QEMU VM usando drivers virtio sem suporte / módulo do kernel no host?

4

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?

    
por Brian O'Connell 12.06.2016 / 20:16

1 resposta

3

O virtio backend está no próprio qemu, não no kernel do host. O qemu está recebendo pacotes do driver de rede guest virtio frontend e enviando-os para o dispositivo de ponte que você solicitou.

No kernel do host, você pode ter drivers vhost para otimizar parte da função de back-end, ou seja, passar os pacotes de dados.

Veja esta postagem no blog .

    
por 12.06.2016 / 22:10

Tags