如何通过 IOMMU / dracut / 内核参数隔离(保留)具有相同硬件 ID 的 GPU(在 VoidLinux 中)

如何通过 IOMMU / dracut / 内核参数隔离(保留)具有相同硬件 ID 的 GPU(在 VoidLinux 中)

我正在尝试在 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/

相关内容