IOMMU 组太少 - 分裂?

IOMMU 组太少 - 分裂?

我购买了 AMD RyZEN 5 2400G、技嘉 B450M D3SH 和 16GB 内存。我认为一些较老的 GPU AMD Radeon HD 6XXX 是路过的。但 IOMMU 的分组让我感到不愉快的惊讶。

我将 GPU 放置在第一个 (16/16) 或第三个 (16/8) PCIe 插槽中,发现在这两种情况下它都包含在 iommu 组 0 中。但是这个 iommu 组的其他成员不能传递给 VM,也不能从主机系统中排除。只有四个 iommu 组 (0 - 3),而在教程和我的其他 PC 中,我看到十二个或更多组,并且一些 PCIe 插槽在单个组中非常隔离。提问: 有谁知道吗:

  • 我是否应该购买其他硬件?
  • 是否有一些内核选项可以获取更多 iommu 组(拆分)?
  • 我是否必须使用旧版 BIOS 而不是 uEFI?

启用 SVM,启用 IOMMU。操作系统:Debian Linux testitng,内核 5.10,内核 cmd 选项iommu=on amd_iommu=on

iommu 零组:

01:00.0 USB       [0c03]: [AMD] 400 Series Chipset USB 3.1 XHCI Controller [1022:43d5] (rev 01)
01:00.1 SATA      [0106]: [AMD] 400 Series Chipset SATA Controller [1022:43c8] (rev 01)
01:00.2 PCIbridge [0604]: [AMD] 400 Series Chipset PCIe Bridge [1022:43c6] (rev 01)
02:00.0 PCIbridge [0604]: [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
04:00.0 Ethernet  [0200]: Realtek Co. Ltd. RTL8111/8168/8411 PCIe Gigabit Eth [10ec:8168] (rev 0c)
05:00.0 VGA       [0300]: [AMD/ATI] Turks PRO [Radeon HD 6570/7570/8550] [1002:6759]
05:00.1 Audio dev [0403]: [AMD/ATI] Turks HDMI Audio [Radeon HD 6500/6600/6700M Series] [1002:aa90]
06:00.0 NVMe      [0108]: Intel NVMe Optane Memory [8086:2522]

第1组

...
08:00.0 VGA       [0300]: [AMD/ATI] Raven Ridge [Radeon Vega (Mobile) Series] [1002:15dd] (rev c6)
08:00.1 Audio dev [0403]: [AMD/ATI] Raven/Raven2/Fenghuang HDMI/DP Audio Controller [1002:15de]
...

如您所见,APU(CPU 芯片上集成的 GPU)是组 1 的成员。

答案1

嗯,这似乎是一个非常复杂的问题。这真是一个难题。首先我怀疑操作系统,因为我安装了Debian测试(Bullseye),比稳定版本更危险。因此我在谷歌上搜索了一些内核补丁。是的,该补丁存在,但由于安全漏洞,不建议使用。然后我用谷歌搜索了芯片组和主板 IOMMU 选项的详细规格。这些信息显然对客户和潜在买家都不重要。

经过一些绝望的日子后,我一步一步地重新启动了 uEFI BIOS 设置。最后我明白了:涉及虚拟化的设置分布在各种(子)菜单项中。所以你必须检查:

MIT\Advanced Freq. Settings\Advanced CPU Settings\SVM Mode = Enabled !
Chipset\IOMMU = Enabled !
Peripherals\AMD CBS\PCIe ARI Support = Disable !

最后一个-PCIe ARI Support-对于IOMMU Group分离来说非常重要。我没有找到这个BI​​OS选项的详细说明。但正确设置后,现在我有 12 个 IOMMU 组,并且 PCIe 插槽 1 中的 GPU 位于单个组 9 中(GPU 和关联的音频)。

我希望这篇文章,即使是我自己写的答案,也能对某人有所帮助。

编辑2021-03-16:最近我得到了ARI的解释(给喇嘛):PCI的旧寻址使用地址和子地址,假设地址计数为5位,子地址为3位。因此,您只能使用 32 个不同的 PCI 设备,但每个设备可以容纳 8 个子设备(例如 GPU 和音频)。 ARI 将第 5 位和第 3 位地址聚合为没有子地址的 8 位地址,因此您可以拥有 256 个不同的 PCI 设备。但这极大地改变了分组。一些消息来源称,不久前 uEFI BIOS 的默认配置已更改为禁用 ARI。

答案2

作为第一个答案,它非常复杂!

简单的答案是:具有ACS(访问控制服务)能力的PCIe设备,则拥有IOMMU组;如果没有ACS,则依赖于上游设备。

ACS 功能取决于其提供商,例如带有 RyZEN CPU 和不带有芯片组。

但某些版本的内核会改变这一点,您可以尝试搜索“pve unraid iommu group patch”。

最后,感谢您关于“PCIe ARI Support”的回答,它对我有帮助。但您不需要更改 BIOS,只需附加内核参数即可pci=noari做到这一点。

相关内容