Linux kernel VIRTIO:它是如何提高性能的

Linux kernel VIRTIO:它是如何提高性能的,linux-kernel,virtual-machine,virtualization,qemu,kvm,Linux Kernel,Virtual Machine,Virtualization,Qemu,Kvm,我想了解: 与完全虚拟化或硬件辅助虚拟化(如virtio_net或virtio_blk)相比,virtio驱动程序如何提高性能 这些virtio驱动程序如何影响VMEXIT/VMENTER或来宾和虚拟机监控程序之间的上下文切换 virtio的基本理念或架构是什么 谢谢VIRTIO是一个准虚拟化的界面。这意味着客户机必须知道它正在虚拟化环境中运行,以便能够部署它的VIRTIO驱动程序来与虚拟硬件通信。对准虚拟化案例进行了优化,以将来宾->hyper visor->主机和后台转换的数量保持在最小,从

我想了解:

  • 与完全虚拟化或硬件辅助虚拟化(如virtio_net或virtio_blk)相比,virtio驱动程序如何提高性能

  • 这些virtio驱动程序如何影响VMEXIT/VMENTER或来宾和虚拟机监控程序之间的上下文切换

  • virtio的基本理念或架构是什么


  • 谢谢

    VIRTIO是一个准虚拟化的界面。这意味着客户机必须知道它正在虚拟化环境中运行,以便能够部署它的VIRTIO驱动程序来与虚拟硬件通信。对准虚拟化案例进行了优化,以将来宾->hyper visor->主机和后台转换的数量保持在最小,从而提高性能。与完全虚拟化相比,客户可能不知道它是虚拟化的,因为它提供了大量模拟的硬件,就其而言,这些硬件是真实的硬件。然而,对于硬件的每次访问,都有一个陷阱从来宾机中出来,以处理每次单独的访问。例如,如果一个NIC卡需要20个寄存器设置来发送一个数据包,该数据包将从来宾机发送到模拟器

    现在有另一种类型的虚拟化依赖于IOMMUs。可以对它们进行编程,将部分地址空间传递给给定的虚拟机。因此,虚拟机可以直接访问硬件,而hyper visor/主机不需要参与真实硬件的仿真。在这种情况下,可能是一个虚拟NIC,它实际上是一个真实的NIC,已细分为多个不同的虚拟NIC,每个VM一个


    亲爱的Stsquad,这里有一篇关于VIRTIO架构的好文章,谢谢你的回答我知道VIRTIO(准虚拟化接口)的基本定义。我想知道是什么让这些比硬件辅助虚拟化更快?如何将来宾->超级visor->主机和后台转换的数量降至最低。。。Thanks@AshishYadav定义我的硬件辅助虚拟化是什么意思?是的,虚拟机扩展有助于更有效地管理事物,但是如果您的模拟硬件仍然需要针对主机的每一个IO操作将其捕获回主机。相反,VIRTIO在自己的内存空间中创建一个描述符(无需捕获),然后执行一次写入来触发操作。@stsqud:硬件辅助虚拟化意味着在CPU中支持VMX&EPT(wrt x86)。除非硬件特别支持任何系统操作(与硬件交谈,弄乱页面表,生成软irq)将涉及到虚拟机监控程序,可能还有主机。所有各种虚拟化扩展都是为了减少对这些陷阱的需要。最接近于硬件辅助的VIRTIO替换的是我提到的IOMMU支持(英特尔VT-d/AMD Vi)这可能会更快,因为您从未尝试启动IO操作。