Eu estava tentando verificar se minha VM do Win 8.1 em execução no QEMU está obtendo o benefício completo do VirtIO para o disco (formato de imagem não processada) e para a placa de rede. Eu li este post relacionado e acessou a interface do monitor humano QEMU e descobriu que ele mostra:
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 ""
Isso faz com que pareça estar usando o VirtIO, assim como o fato de o Gerenciador de Dispositivos do Windows exibir o Dispositivo de Disco SCSI do Red Hat Virtio e o Red Hat VirtIO Ethernet Adapter. No entanto, quando eu executo o lsmod no meu host linux ele não mostra nenhum módulo virtio carregado e quando eu verifico a configuração do meu kernel virtio ele não mostra virtio, virtio_net ou virtio_blk embutido:
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
Eu executo minha VM com um comando como:
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
O que estou perdendo aqui? Será que está funcionando via suporte a pci_virtio_legacy embutido no kernel? Em caso afirmativo, seria mais rápido usar a outra variação e, se assim for, apenas certifique-se de carregar os módulos virtio, virtio_net e virtio_blk antes de iniciar a VM?