将qvu / kvm passthrough的Nvidia gpu列入黑名单

我试图在虚拟机中运行Windows,同时让VM直接通过GPU以获得更好的性能。

我有一个集成的英特尔GPU(我会用这个主机)和一个Nvidia GTX980(我希望这个用于VM)。 我使用Elementary OS 0.3.2 Freya 64位。

我已经按照本指南进行了操作,但现在仍然停留在第2步。我无法将Nvidia gpu列入黑名单。

首先,我做lspci -nn | grep NVIDIA lspci -nn | grep NVIDIA

这导致以下输出

 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:13c0] (rev a1) 01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbb] (rev a1) 

接下来,我将此行添加到/etc/initramfs-tools/modules文件中。

 pci_stub ids=10de:13c0,10de:0fbb 

然后我使用update-initramfs -u重新加载,然后重新启动。

重启后我运行dmesg | grep pci-stub dmesg | grep pci-stub我得到以下输出:

 [ 2.029626] pci-stub: add 10DE:13C0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 2.029630] pci-stub: add 10DE:0FBB sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 2.029637] pci-stub 0000:01:00.1: claimed by stub 

正如您所看到的那样,存根不会声明音频或video。

我还尝试将此选项直接添加到etc/default/grub的grub文件中,因此GRUB_CMDLINE_LINUX_DEFAULT行如下所示:

 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on pci-stub.ids=10de:13c0,10de:0fbb" 

但这也导致Nvidia卡未被列入黑名单。

任何人都知道这可能是什么原因导致的?

我也正在设置qemu-kvm passthrough,我和你有同样的问题。 我使用我的集成英特尔显卡作为我的主要GPU,所以我打开了nvidia设置并禁用了混合显卡,因此不会使用nvidia卡:( 图片相关)

之后,我没有问题将卡绑定到vfio-pci。

有可能在某种程度上,nvidia模块会在启动qemu时导致您遇到麻烦,或者您无法选择关闭混合图形。 如果是这种情况,您也可以尝试我也做的事情,并使用类似于脚本模式(CTRL + ALT + F1)的脚本手动禁用nvidia模块:

 #!/bin/bash sudo service lightdm stop sudo rmmod nvidia_uvm sudo rmmod nvidia_drm sudo rmmod nvidia_modeset sudo rmmod nvidia sudo service lightdm start 

这将停止显示管理器(在我的情况下为lightdm),按顺序禁用nvidia模块,然后重新启动显示管理器。 确保在控制台模式下启动它,因为从桌面运行它很可能会在第一行之后中断脚本。

重启后,nvidia模块将自动再次加载,但您也可以手动重新加载它们:

 modprobe nvidia nvidia_modeset nvidia_drm nvidia_uvm 

希望这可以帮助。

您是否尝试过本指南https://forum.level1techs.com/t/play-games-in-windows-on-linux-pci-passthrough-quick-guide/108981 ? :)这是相当新:)

您的音频已被存根声明

 [ 2.029637] pci-stub 0000:01:00.1: claimed by stub 

video不是。 我有同样的问题,我已将Nvidia和/或Nouveau列入黑名单。 我正在使用Ubuntu服务器15.10所以不完全相同,但我有同样的问题。 我已经搜索了几周的互联网,没有任何东西。

编辑最后解决了,我在这里找到了它: https : //forum.level1techs.com/t/pci-stub-not-claming-secondary-graphics-card/88728

所以我将Nvidia和Nouveau模块列入黑名单并重新启动。 希望能帮助到你

再次编辑:

我目前采取的步骤将pci卡与内核4.10.1-1绑定到pci-stub。

我编辑/ etc / default / grub看起来像这样GRUB_CMDLINE_LINUX_DEFAULT =“安静的intel_iommu = on pci-stub.ids = 1002:6798,1002:679a,1002:aaa0,1106:3483”

然后我创建新的grub配置文件

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

然后重启。

在/etc/mkinitcpio.conf中我将pci-stub添加到模块中,使它看起来像:MODULES =“pci-stub”

然后运行

$ sudo mkinitcpio -P

重建所有initramfs映像。 然后重启。

然后这个命令只是为了确保它们已被pci-grub声明

$ dmesg | grep pci-stub

我遇到了类似你的问题(Lubuntu 16.04)。 这是因为在pci-stub能够执行此操作之前,驱动程序/模块将设备绑定到它们。 这里至少有两个选项:

第一个也是最简单的一个是将声明该设备的模块列入黑名单。 输入lspci -knn | grep VGA -A 5 lspci -knn | grep VGA -A 5可以查看所有VGA pci设备及其设备编号及其内核模块。

 01:00.0 VGA兼容控制器[0300]:NVIDIA Corporation设备[10de:128b](rev a1)
    子系统:微星国际有限公司[MSI]设备[1462:8c93]
    正在使用的内核驱动程序:nouveau
    内核模块:nvidiafb,nouveau
 01:00.1音频设备[0403]:NVIDIA Corporation GK208 HDMI / DP音频控制器[10de:0e0f](rev a1)
    子系统:微星国际有限公司[MSI] GK208 HDMI / DP音频控制器[1462:8c93]
 - 
 02:00.0 VGA兼容控制器[0300]:NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2](rev a1)
    子系统:ZOTAC International(MCO)Ltd。GM204 [GeForce GTX 970] [19da:1366]
    正在使用的内核驱动程序:nouveau
    内核模块:nvidiafb,nouveau
 02:00.1音频设备[0403]:NVIDIA Corporation GM204高清晰度音频控制器[10de:0fbb](rev a1)
    子系统:ZOTAC International(MCO)Ltd。GM204高清晰度音频控制器[19da:1366]

现在您需要检查正在使用的驱动程序。 例如,nouveau抓住我想要用于我的VM的我的VGA设备02:00.0,所以我将那个列入黑名单:

sudo nano /etc/modprobe.d/blacklist.conf blacklist nouveau

你完成了。

在我的情况下,这会导致问题,因为我安装了两个nVidia VGA(01:00.0和02:00.0)都使用相同的驱动程序运行。 在我的情况下,我不会将驱动程序列入黑名单。

从我的02:00.0 VGA卡手动取消绑定 nouveau,因为我想将该卡用于我的VM-guest和01:00.0 VGA用于我的Linux主机。 感谢本指南,我发现了如何操作: https : //lwn.net/Articles/143397/

输入sudo tree /sys/bus/pci/drivers/nouveau 。 用任何模块抓取你的设备来交换新手。

你应该收到这样的清单:

 / SYS /总线/ PCI /司机/暴发户
 ├──0000:01:00.0  - > ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0
 ├──0000:02:00.0  - > ../../../../devices/pci0000:00/0000:00:05.0/0000:02:00.0
 ├──绑定
 ├──模块 - > ../../../../module/drm
 ├──new_id
 ├──remove_id
 ├──uevent
 └──解开

我们看到驱动程序nouveau必须绑定到它的设备:0000:01:00.0和0000:02:00.0

要取消绑定并绑定我的图形卡,我首先需要关闭lightdm.service。 因此,我使用CTRL + ALT + F2在桌面环境之外打开控制台。 以root身份登录并键入systemctl stop lightdm.service

现在我可以从显卡中取消绑定模块:

echo -n "0000:02:00.0" > /sys/bus/pci/drivers/nouveau/unbind

并将其绑定到我想要的任何模块(pci-stub或vfio-pci)。 我用过vfio-pci。

echo -n "0000:02:00.0" > /sys/bus/pci/drivers/vfio-pci/bind

之后,您可以再次systemctl start lightdm.servicesystemctl start lightdm.service

如果一切正常,您应该通过查找lspci -knn | grep VGA -A 5找到绑定到您指定的模块的设备 lspci -knn | grep VGA -A 5再次。

 01:00.0 VGA兼容控制器[0300]:NVIDIA Corporation设备[10de:128b](rev a1)
    子系统:微星国际有限公司[MSI]设备[1462:8c93]
    正在使用的内核驱动程序:nouveau
    内核模块:nvidiafb,nouveau
 01:00.1音频设备[0403]:NVIDIA Corporation GK208 HDMI / DP音频控制器[10de:0e0f](rev a1)
    子系统:微星国际有限公司[MSI] GK208 HDMI / DP音频控制器[1462:8c93]
 - 
 02:00.0 VGA兼容控制器[0300]:NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2](rev a1)
    子系统:ZOTAC International(MCO)Ltd。GM204 [GeForce GTX 970] [19da:1366]
    正在使用的内核驱动程序:vfio-pci
    内核模块:nvidiafb,nouveau
 02:00.1音频设备[0403]:NVIDIA Corporation GM204高清晰度音频控制器[10de:0fbb](rev a1)
    子系统:ZOTAC International(MCO)Ltd。GM204高清晰度音频控制器[19da:1366]

不幸的是,这种解决方法在重启后失效。 然而,我没有找到如何让它持久化。 也许其他任何人都可以给我一个暗示。 我想,像启动录这样的东西是可能的。 但是最好能够将设备绑定到特定模块而不必先解除绑定。 想象一下,有一天我想使用nvidia驱动程序。 在这种情况下,从nouveau解除绑定将是无用的,因为图形卡将绑定到nvidia模块。

使用grub配置停用nvidia / nuveau。

可以通过grub2命令行将module_blacklist=[,] (documentation)指令传递给内核。 我能够通过以下添加到/etc/default/grub的GRUB_CMDLINE_LINUX_DEFAULT来停用nuveau和nvidia驱动程序(不要忘记发出sudo update-grub ):

module_blacklist=nvidia,nvidia_uvm,nvidia_drm,nvidia_modeset,nouveau

对于每个内核,还可以为此选项自动生成grub条目: https : //unix.stackexchange.com/questions/24670/choose-at-grub-menu-whether-nvidia-driver-should-be – 使用 (第一个答案)。 但事实certificate它比预期的更麻烦。 ubuntu grub配置非常复杂。 确保在修补之前进行备份。

如果您想使用function强大的NVIDIA显卡在使用VGA Passthrough的虚拟机中进行游戏,但是可以选择将其用于深度学习,例如tensorflow ,这将特别tensorflow 。 只需重新启动即可在这两者之间切换。