我在设置 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 使用。拆开机器来测试这个理论需要等待一段时间。