E.4. IOMMU 策略和用例
有很多方法可以处理包含更多设备的 IOMMU 组。对于插件卡,第一个选项是确定是否将卡安装到不同的插槽中是否会产生预期的分组。在典型的 Intel 芯片组上,PCIe 根端口通过处理器和平台控制器 Hub(PCH)提供。这些根端口的功能可能非常不同。Red Hat Enterprise Linux 7 支持公开大量 PCH 根端口的隔离,即使其中很多端口没有原生 PCIe ACS 支持。因此,这些根端口是创建较小的 IOMMU 组的良好目标。通过 Intel® Xeon® 类处理器(E5 系列和以上)和"High End Desktop Processors",基于处理器的 PCIe 根端口通常提供对 PCIe ACS 的原生支持,但低延迟客户端处理器(如 Core™ i3、i5 和 i7 和 Xeon E3 处理器不提供)。对于这些系统,PCH 根端口通常提供最灵活的隔离配置。
另一种选择是与硬件供应商合作,以确定是否存在隔离,并要求内核识别此隔离。这通常是决定在功能间是否可以进行内部对等到工作程序(如果是下游端口)以及是否有可能确定重定向是可行的。Red Hat Enterprise Linux 7 内核包括很多设备 quirks 和红帽客户支持可帮助您与硬件供应商合作,以确定 ACS-quivalent 隔离是否可用,以及最好将类似的 quirk 纳入内核以公开此隔离。对于硬件供应商,请注意,不支持 peer-to-peer 的多功能端点可以使用配置空间中的单个静态 ACS 表来公开这一点。将这一功能添加到硬件可让内核自动检测到隔离的功能,并消除您的硬件所有用户的问题。
如果上述建议不可用,则内核应提供一个选项来禁用这些隔离检查,或者某些设备类型(由用户指定)。通常,以前的技术不会对这一程度的隔离和"正常"的所有操作实施隔离。不幸的是,绕过这些隔离功能会导致无法支持的环境。不知道隔离存在,这意味着不知道设备是否实际被隔离,而且最好在灾难恢复之前找出。设备隔离功能上的差距可能很难触发,甚至难以追溯到设备隔离。VFIO 的作业是首先工作,对主机内核不受用户拥有的设备和 IOMMU 组的影响是 VFIO 使用的机制,以确保隔离。
总之,通过在 IOMMU 组之上构建,VFIO 能够提供比使用传统 KVM 设备分配的设备之间更高的安全性和隔离程度。现在,在 Linux 内核级别强制实施这个隔离,允许内核保护自身并防止用户危险配置。此外,还应该鼓励硬件供应商支持 PCIe ACS 支持,而不仅仅是多功能端点设备,还在芯片集和互联设备中。对于缺少此支持的现有设备,红帽可以与硬件供应商合作,以确定隔离是否可用,并添加 Linux 内核支持来公开此隔离。