結論
KVMにて使用するNICを、virtio
になっている事を確認する。
仕事でKVMのVMを使用している時、監視ツールから、pingのロスを時々検出するという事例が発生した。その際に上記の方法を実行することでパフォーマンスが改善した。
ちなみに、その時使用していたNICはrtl8139
であった。
rtl8139 仮想化 NIC はほとんどの環境で問題なく機能しますが、
このデバイスは、10 ギガバイトイーサネットなど、一部のネットワークでパフォーマンス低下の問題が発生する可能性があります。
変更手順
バックアップ取得&シャットダウン
対象のゲストに入り、ネットワーク設定をコピペする。下記の例では一つだけだが、複数NICがあるときは都度コピーする。
cp -p /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0.bk
その後、ゲストをシャットダウンする。
shutdown -h now
ホストからの操作
ホストにSSHした後、以下のコマンドでゲストのxmlファイルを取得する。
sudo virsh dumpxml guest_vm_name >/tmp/guest_vm_name.xml
その後、virt-managerもしくはvirsh editで変更を行う。
virt-managerの場合
以下コマンドを実行し、virt-managerを起動する。
sudo xauth add $(xauth -f ~/.Xauthority list | tail -1)
sudo virt-manager
virt-manager起動後、対象のゲストを選択し電球アイコンをクリックする。
NICの情報をクリックし、以下の画像のようにデバイスのモデルをvirt-ioへ変更し適用を押下する。
virsh editの場合
以下のコマンドをホストにて実行する。
sudo virsh edit GUEST名
その後、interface-typeの部分に移動し、model type
の部分を変える。
<interface type='network'>
[output truncated]
<model type='rtl8139' />
</interface>
<interface type='network'>
[output truncated]
<model type='virtio' />
</interface>
変更したらwq
で保存する。
ゲストの起動
以下のコマンドでゲストを起動させる。virt-managerで開いている場合はそこから起動させてもよい。
sudo virsh start GUEST名
以上。