QEMU VM 使用 virtio 驱动程序,主机上没有内核支持/模块?

QEMU VM 使用 virtio 驱动程序,主机上没有内核支持/模块?

我试图验证在 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 ""

这使得它看起来正在使用 VirtIO,Windows 设备管理器显示 Red Hat VirtIO SCSI 磁盘设备和 Red Hat 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 支持来工作的吗?如果是这样,使用其他变体会更快吗?如果是这样,我是否只需确保在启动虚拟机之前加载 virtio、virtio_net 和 virtio_blk 模块?

答案1

维蒂奥后端位于 qemu 本身中,而不是位于主机内核中。 qemu 正在从 guest virtio 获取数据包前端网络驱动程序并将它们发送到您请求的桥接设备。

在主机内核中你可以有虚拟主机驱动程序优化了部分后端功能,即传递数据包。

这篇博文

相关内容