![如何通过 IOMMU / dracut / 内核参数隔离(保留)具有相同硬件 ID 的 GPU(在 VoidLinux 中)](https://linux22.com/image/198149/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20IOMMU%20%2F%20dracut%20%2F%20%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0%E9%9A%94%E7%A6%BB%EF%BC%88%E4%BF%9D%E7%95%99%EF%BC%89%E5%85%B7%E6%9C%89%E7%9B%B8%E5%90%8C%E7%A1%AC%E4%BB%B6%20ID%20%E7%9A%84%20GPU%EF%BC%88%E5%9C%A8%20VoidLinux%20%E4%B8%AD%EF%BC%89.png)
我正在尝试在 void 上设置 pci/gpu 直通。具体来说,使用vfio-pci
驱动程序“保留”其中一个 GPU。我一直在遵循中概述的程序这个 void-docs PR(以及相关的 arch wiki)
我有一个 RX 580 和一个 RX 570,我的组允许隔离前者:
IOMMU Group 0 - 11:
dummy host bridges and such
IOMMU Group 12:
03:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller [1022:43d5] (rev 01)
03:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller [1022:43c8] (rev 01)
03:00.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Bridge [1022:43c6] (rev 01)
20:00.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
20:01.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
20:04.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
22:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
25:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev ef)
25:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]
IOMMU Group 13:
26:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev e7)
26:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]
IOMMU Group 14 - 19:
dummy functions and audio devices
因此,将 RX570 与一堆 CPU 混在一起:
IOMMU group 12: 25:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df]
RX580 在其自己的组中完全独立:
IOMMU group 13: 26:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df]
现在您可以看到这两个共享硬件 ID,因此我不能只指定一个内核参数来将vfio-pci
驱动程序推送到其中一个,它会捕获它们两个。 (正如上述拉取请求的指南中所描述的那样)
我尝试将它们分开遵循 arch-wiki 上的指南,将“Passthrough selected GPU”脚本添加到我的 dracut 配置中:
/usr/local/bin/vfio-pci-override.sh
#!/bin/sh
DEVS="0000:26:00.0 0000:26:00.1"
if [ ! -z "$(ls -A /sys/class/iommu)" ]; then
for DEV in $DEVS; do
echo "vfio-pci" > /sys/bus/pci/devices/$DEV/driver_override
done
fi
modprobe -i vfio-pci
/etc/dracut.conf.d/10-vfio.conf
hostonly=" yes "
hostonly_cmdline=" amd_iommu=on iommu=pt "
force_drivers+=" vfio_pci vfio vfio_iommu_type1 vfio_virqfd "
install_items+=" /usr/local/bin/vfio-pci-override.sh "
如果我没记错的话,这应该会产生影响,如果我运行xbps-reconfigure --force linuxX.Y
但由于某种原因,amdgpu
驱动程序仍然会捕获两个 GPU。
我在文件中设置了以下内核参数/etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=4 amd_iommu=on iommu=pt rd.driver.pre=vfio_pci"
非常感谢任何帮助,并将转发给上述 PR 以扩展指南。 (虽然我知道无效手册并不是要详细描述这样的事情,但也许它对于创建一个独立的指南很有用)
答案1
我也尝试过 Arch 指南,但没有任何运气。当我读到这一页的底部时,我很遗憾没有看到任何解决方案。
Ubuntu/Kubuntu 20.04 我可以正常工作,但在 Manjaro 下相同的硬件没有骰子。
区别在于 initramfs-tools 与 mkinitcpio (或者在您的情况下为 dracut)
这是我的 Reddit 帖子:https://www.reddit.com/r/VFIO/comments/tjjb9g/switched_from_kubuntu_to_manjaro_kde_minimal_lts/