pci-stub 或 vfio-pci 被 Nvidia 驱动程序覆盖

pci-stub 或 vfio-pci 被 Nvidia 驱动程序覆盖

我在设置 VGA 直通时遇到了困难。我正在运行 E5-1650v2、Nvidia GTX 970 作为主机显示器和 Quadro K4000,我想将其直通到 Asus X-99 E-WS 上的 VM。这是 Ubuntu 16.04。Vt-d 已打开。

我尝试将 K4000 绑定到 pci-stub 和 vfio-pci,但没有成功。在命令行上:

intel_iommu=on pci-stub.ids=10de:11fa,10de:0e0b或者

intel_iommu=on vfio-pci.ids=10de:11fa,10de:0e0b

并且在 中/etc/initramfs-tools/modules。这两种技术最终都分别将音频设备绑定到存根或 vfio 驱动程序,但 Nvidia 驱动程序始终抓取实际的显示设备。

我尝试过设置

nvidia id=10de:13c2,10de:0fbb

(即 970 卡)看看/etc/initramfs-tools/modules是否可行,但并没有什么区别。

我还尝试过通过将设备 ID 回显到 来从命令行解除卡的绑定/sys/bus/pci/drivers/nvidia/unbind。这会将其从...drivers/nvidia/目录中删除,但也会锁定 bash(它会达到核心的 100% 并且无法终止)。

有没有办法告诉 Nvidia 驱动程序只绑定到一张卡?

编辑:

为了查看是否会有不同的行为,我尝试将 970 绑定到 vfio。nvidia 驱动程序仍然抓取视频设备,但至少我看到 /dev/vfio 中的 vfio 组正在这样做,而我之前没有注意到这种情况。

我想知道 PCI ID 顺序是否与此有关;K4000 是 06,970 是 09,预启动和启动过程显示在 K4000 上。我看不出有任何方法可以告诉 BIOS 将哪张卡设为“主卡”,并且想知道由于 BIOS 首选该卡,内核是否会拒绝将驱动程序绑定到 vfio/stub。这意味着我需要将其拆下并重新排序卡。

答案1

这项工作仍在进行中,但最终还是取得了一定成效,提前解除了一张卡的绑定。我添加了一个 systemd 单元文件来运行:

virsh ondedev-detach pci_0000_08_00_0

在 lightdm 单元之前运行。然后分配 vfio-pci,我可以正常通过。我不知道使用 virsh 分离和使用 /sys/bus/ide/drivers/.../unbind 有什么不同,但 virsh 不会锁定核心。

这是 (a) 让 970 通过,并且 (b) 使用 Nouveau 驱动程序;我根本无法让它与 K4000 一起工作,而且由于时间不够,我还没有再次尝试 Nvidia blob。我能想到的唯一原因是它是一个较低的 PCI id 并且由 BIOS 使用。拆开机器来测试这个理论需要等待一段时间。

相关内容