MGI XCP-NG项目开发商宣布 最近,他们正在开发一个新项目,其名称为 «PV-IOMMU» 并且允许来宾系统访问通过 Xen 环境中的半虚拟化实现的 IOMMU 的有限功能。
基本上,PV-IOMMU 承诺使 Dom0 能够使用半虚拟化 IOMMU,它提供了多种优势,例如 Dom0 的 DMA 保护和对 Linux VFIO 的支持。
什么是 IOMMU?
IOMMU 根据制造商的不同而有不同的名称(Intel 中的 VT-d、AMD 中的 AMD-Vi、ARM 中的 SMMU 等), 它是一个特殊的装置实现 其主要功能是 转换或过滤 DMA 请求 (直接内存访问)从设备到机器的物理内存。在虚拟化中,它用于允许客户系统直接访问外围设备,例如以太网适配器、显卡和存储控制器。
IOMMU 半虚拟化可以获得哪些好处?
此前, Xen 虚拟机管理程序使用 IOMMU 重定向访问 PCI 设备并控制这些设备对内存的访问。然而, 出于稳定性和安全原因,访客无法直接访问 IOMMU 块 由硬件提供。
我们提出了一种新的半虚拟化 IOMMU,简称为 PV-IOMMU。它基本上实现了客户期望从 IOMMU 获得的功能,抽象了硬件的所有内部细节。在 Xen 中,我们为此类操作添加了一个新的超级调用(HYPERVISOR_iommu_op),它提供来宾可以使用的各种 IOMMU 操作(如果允许)。
尽管如此, 可以为客人提供一个界面 允许您访问 IOMMU, 使用简化的 Xen 半虚拟化基础设施,同时隐藏低级硬件细节。该接口称为 PV-IOMMU,抽象了硬件的所有内部细节,并提供了一组访客可以访问的 IOMMU 操作(如果允许)。 PV-IOMMU 中的操作在 HYPERVISOR_iommu_op 超级调用中公开为子操作,并以方便客户的方式设计。
主机期望 IOMMU 的主要功能之一是能够创建和修改“IOMMU 域”,“IOMMU 域”是一组生成内存上下文并可应用于一个设备(或多个设备)的转换。这些域在 Xen 中称为“IOMMU 上下文”,以避免与作为虚拟机的 Xen 域混淆。
IOMMU 半虚拟化具有以下突出优势:
- Dom0 的 DMA 保护: IOMMU 半虚拟化为虚拟化环境中的管理域 (Dom0) 提供直接内存访问 (DMA) 保护。这有助于防止设备直接访问系统内存(这可能会损害 Dom0 的完整性),从而有助于提高系统安全性和稳定性。
- Linux VFIO 支持:IOMMU半虚拟化有利于支持虚拟化环境中用户设备的虚拟化灵活I/O基础设施(VFIO),允许用户应用程序和虚拟机直接访问硬件设备。
- 可以轻松地使用 Xen 实施 SPDK: IOMMU 半虚拟化也是通过 Xen 支持 SPDK 的持续努力的一部分。这为虚拟机存储开辟了一条新的快速数据路径,有可能提高虚拟化环境中的存储性能。
除此之外,还有 Xen 的问题之一计划通过 IOMMU 解决,因为目前或者允许在单个 Xen 域中存在多个 IOMMU 上下文。 然而,正在考虑重新设计 Xen IOMMU 子系统,以考虑多个 IOMMU 上下文并修改现有功能以利用它们。尽管实现第一种方法的功能性 PoC 已经实现,但存在一定的限制和不完整的支持,但有人提到,未来正在对子系统进行彻底的重新设计。
最后,应该提到的是 目前开发阶段,PV-IOMMU仅支持Intel VT-d,但计划很快添加对 AMD-Vi 和 SMMUv3 的支持。如果您有兴趣了解更多信息,可以查阅详细信息 以下链接。