第5章 KVM 準仮想化 (virtio) ドライバー

準仮想化ドライバーはゲストのパフォーマンスを強化し、I/O 待ち時間を短縮すると共に、スループットをベアメタルレベル近くにまで高めます。I/O 負荷の高いタスクとアプリケーションを実行する完全仮想マシンには、準仮想化ドライバーの使用が推奨されます。
virtio ドライバーは、KVM ホスト上で実行されるゲスト仮想マシンに利用できる KVM の準仮想化デバイスドライバーです。これらのドライバーは、virtio パッケージに含まれています。virtio パッケージは、ブロック (ストレージ) デバイスとネットワークインターフェースコントローラーに対応しています。

注記

PCI デバイスは、仮想化システムアーキテクチャーによる制限を受けます。割り当てデバイスの使用時の追加の制限については、16章ゲスト仮想マシンデバイスの設定 を参照してください。

5.1. 既存ストレージデバイスでの KVM virtio ドライバーの使用

ゲストに割り当てられている既存ハードディスクデバイスを変更して、仮想化 IDE ドライバーの代わりに virtio ドライバーを使用することができます。このセクションの例では、libvirt 設定ファイルを編集します。これらのステップを実行するためにゲスト仮想マシンをシャットダウンする必要はありませんが、変更が適用されるには、ゲストを完全にシャットダウンして再起動する必要があります。

手順5.1 既存デバイスでの KVM virtio ドライバーの使用

  1. この手順を実行する前に、適切なドライバー (viostor) がインストールされていることを確認してください。
  2. root で virsh edit guestname コマンドを実行し、デバイスの XML 設定ファイルを編集します。たとえば、virsh edit guest1 のようになります。設定ファイルは、/etc/libvirt/qemu/ ディレクトリーにあります。
  3. 以下の例は、仮想化 IDE ドライバーを使用したファイルベースのブロックデバイスです。これは、virtio ドライバーを使用しない仮想マシンの通常のエントリーです。
    <disk type='file' device='disk'>
    	 ...
       <source file='/var/lib/libvirt/images/disk1.img'/>
       <target dev='hda' bus='ide'/>
    	 <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
  4. virtio デバイスを使用するために、bus= エントリーを virtio に変更します。ディスクが以前に IDE だった場合は、hdahdbhdc などと同様のターゲットを持ちます。bus=virtio に変更する場合は、ターゲットもそれに応じて vdavdbvdc に変更する必要があります。
    <disk type='file' device='disk'>
       ...
       <source file='/var/lib/libvirt/images/disk1.img'/>
       <target dev='vda' bus='virtio'/>
    	 <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
  5. disk タグ内の address タグを削除します。これは、この手順が動作するために必要な作業です。仮想マシンの次回起動時に、libvirt が適切に address タグを再生成します。
別の方法としては、virtio ドライバーを使用して virt-managervirsh attach-disk、または virsh attach-interface で新規デバイスを追加することもできます。
Virtio の使用方法の詳細については、libvirt の web サイト http://www.linux-kvm.org/page/Virtio を参照してください。