将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.service
: systemctl 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
。 只需重新启动即可在这两者之间切换。