IOMMU是什么,它会提高我的虚拟机性能吗?

我的主板芯片组支持这个功能IOMMU,我读过(但并不真正理解)它通过让虚拟机使用实际物理硬件而不是虚拟硬件来提高虚拟机的性能。
这样做真的会提高虚拟机的性能吗?如果是的话,我该如何让Virtualbox受益于此?
1个回答

长话短说,IOMMU 只有在您直接将硬件资源分配给虚拟机时才能发挥作用。仅仅拥有它并不能使事情更快。
了解到确切的主板/CPU 哪个宣传了这个功能会很有帮助。 IOMMU 是一种特定系统的 IO 映射机制,可与大多数设备一起使用。
IOMMU 听起来像是 Intel VT-d 和 AMD IOV 的通用名称。在这种情况下,我认为您不能复用设备,这就像在所有这些花哨的虚拟化指令出现之前的 PCI 透传 :). SR-IOV 则不同,外围设备本身必须具备支持。硬件知道自己正在被虚拟化,并可以将自己的硬件“切片”委派给虚拟机。许多虚拟机可以同时与 SR-IOV 设备进行通信,而开销非常低。
SR-IOV是唯一比PCI直通更快的技术,但在这种情况下,只有一个虚拟机可以使用该设备,甚至主机操作系统也不能使用它。PCI直通对于运行强大数据库并受益于连接到光纤通道存储区域网络(SAN)的虚拟机非常有用。
然而,接近硬件也有一些限制,例如,在需要实时迁移的部署中,使您的虚拟机变得不太便携。这适用于SR-IOV和PCI直通。
默认的虚拟化Linux部署通常使用VirtIO,这本身就相当快速。

我在我的主板用户指南中读到,如果芯片组支持它,它可以提供对主机硬件的某种物理访问。 - Uri Herrera
我刚刚阅读了Xen Wiki,发现IOMMU似乎也能实现SR-IOV的功能。但是我不使用Xen,而且显然Virtualbox对此并没有很好地利用。 - Uri Herrera
不,大多数计算机没有IOMMU。也许你想的是IO-APIC? - psusi
@psusi,这就是我回复太晚、没有戴眼镜的后果:)。正在更新答案。 - ppetraki
1实际上,这篇维基百科文章解释得很清楚:http://en.wikipedia.org/wiki/X86_virtualization。IOMMU支持的重要优势在于我们可以在运行时更改要传递的设备。在此之前,我们必须在内核参数列表中指定一系列设备,并且只有这些外围设备才能进行透传。IOMMU允许您根据需要重新映射设备。再次强调,这是独占访问,要么是主机在使用,要么是其中一个虚拟机在使用。这实际上是一个面向服务器的特性。 - ppetraki
2@UriHerrera 我建议你使用KVM,它支持Intel和AMD的虚拟化扩展。它更灵活,并且具有比VirtualBox更多功能包括在内的其他特性。 - Oxwivi
@ppetraki 主板芯片组是AMD 990X。 - Uri Herrera
Windows虚拟化管理程序支持IOMMU:https://docs.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/system-requirements-for-hyper-v-on-windows - Erik Aronesty