QEMUで実行されているWin 8.1 VMがディスク(ネイティブイメージフォーマット)とネットワークカードのVirtIOの利点の両方を取得できることを確認しようとしました。私は読んだこの関連投稿そして、QEMU人間-機械インターフェースにアクセスし、以下を発見しました。
bus: virtio-bus
type virtio-pci-bus
dev: virtio-blk-device, id ""
drive = "virtio0"
....
bus: virtio-bus
type virtio-pci-bus
dev: virtio-net-device, id ""
これは、WindowsデバイスマネージャがRed Hat VirtIO SCSIディスクデバイスとRed Hat VirtIOイーサネットアダプタを表示するのと同じように、VirtIOが使用されているようです。ただし、Linuxホストでlsmodを実行すると、ロードされたvirtioモジュールは表示されず、virtioカーネル構成を確認すると、組み込みのvirtio、virtio_net、またはvirtio_blkは表示されません。
zcat /proc/config.gz | grep -i virtio
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=m
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_CAIF_VIRTIO=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_VIRTIO=m
# Virtio drivers
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
次のコマンドを使用して仮想マシンを実行します。
qemu-system-x86_64 -enable-kvm -cpu host -smp cores=2,threads=1 -drive file=filename.raw,index=0,media=disk,if=virtio,cache=none,format=raw -net nic,model=virtio,macaddr=xx:xx:xx:xx:xx:xx -net bridge,br=br0 -m 4096 -localtime
私がここで何を見逃しているのでしょうか?カーネルに組み込まれたpci_virtio_legacyサポートを介して動作しますか?それでは、別のバリエーションを使用する方が速いでしょうか?それでは、VMを起動する前にvirtio、virtio_net、およびvirtio_blkモジュールがロードされていることを確認できますか?
答え1
ビティオリアホストカーネルではなく、qemu自体にあります。 qemuがゲストvirtioからパケットを受信しています。フロントエンドネットワークドライバを要求されたブリッジデバイスに送信します。
ホストカーネルには次のものがあります。仮想ホストドライバはバックエンド機能の一部、つまりパケット転送を最適化します。
バラよりこのブログ投稿。