关于kvm显卡直通的问题

关于显卡直通的问题

环境

我的环境是Thinkstations20
cpu是x5670 支持 VT-x
内存是8*3
显卡是hd5500和Gtx650Ti
OS:openSUSE leap 42.3

我的目的是什么

我的目的是可以让我的宿主机作为日常开的机器使用
再开一台WIndows的虚拟机使用kvm 显卡直通去使用这个Gtx650ti的显卡从而实现日常的剪辑视频,和coding

目前的问题是

我现在已屏蔽了Gtx650Ti

04:00.0 VGA compatible controller: NVIDIA Corporation GK106 [GeForce GTX 650 Ti] (rev a1)
	Subsystem: ZOTAC International (MCO) Ltd. Device 4292
	Kernel driver in use: vfio-pci
	Kernel modules: nouveau
04:00.1 Audio device: NVIDIA Corporation GK106 HDMI Audio Controller (rev a1)
	Subsystem: ZOTAC International (MCO) Ltd. Device 4292
	Kernel driver in use: vfio-pci
	Kernel modules: snd_hda_intel

但是我去分配这个显卡设备然后启动虚拟机的时候就会出现无法启动下面这个是日志输出

2018-11-04 12:29:52.246+0000: starting up libvirt version: 3.3.0, qemu version: 2.9.1(openSUSE Leap 42.3), hostname: chaos-pc
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -name guest=win10-2,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-6-win10-2/master-key.aes -machine pc-i440fx-2.9,accel=kvm,usb=off,vmport=off,dump-guest-core=off -cpu Westmere,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff -m 4096 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid aadd4d8b-29bc-40f3-9389-da1faae73eb5 -display none -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-6-win10-2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-reboot -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x3.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x3 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x3.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x3.0x2 -device lsi,id=scsi0,bus=pci.0,addr=0x4 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/kvm/disk/win10.qcow2,format=raw,if=none,id=drive-scsi0-0-0,cache=unsafe -device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0,bootindex=2 -drive file=/kvm/iso/cn_windows_10_enterprise_ltsc_2019_x64_dvd_2efc9ac2.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=on -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,bootindex=1 -netdev tap,fd=25,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:4c:34:72,bus=pci.0,addr=0x2 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0,bus=usb.0,port=1 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 -device vfio-pci,host=04:00.0,id=hostdev0,bus=pci.0,addr=0x6 -device vfio-pci,host=04:00.1,id=hostdev1,bus=pci.0,addr=0x7,rombar=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 -msg timestamp=on
2018-11-04T12:29:52.335429Z qemu-system-x86_64: -chardev pty,id=charserial0: char device redirected to /dev/pts/2 (label charserial0)
2018-11-04T12:29:52.365298Z qemu-system-x86_64: -device vfio-pci,host=04:00.0,id=hostdev0,bus=pci.0,addr=0x6: vfio error: 0000:04:00.0: failed to setup container for group 14: failed to set iommu for container: Operation not permitted
2018-11-04 12:29:52.430+0000: shutting down, reason=failed

我看到这里的日志片段是

vfio error: 0000:04:00.0: failed to setup container for group 14: failed to set iommu for container: Operation not permitted

我应该检查哪里可以获取帮助呢?谢谢

https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF_(简体中文)
一般照着来一遍就完事了
目测有几个问题

  1. 就是显卡有没有GOP UEFI
  2. 再一个就是suse需要先
sudo sh -c "cat <<EOF > /etc/modules-load.d/vfio.conf
vfio_pci
vfio
vfio_iommu_type1
vfio_virqfd
EOF"

然后再去/etc/modprobe.d/vfio.conf绑定GPU
之后再sudo dracut -f(我不知道如何在dracut里提高vfio的加载优先级 求告知)
最后就是VT-x是kvm的基础 显卡直通则还需要VT-d

ok 十分感谢
我去试试看
对于dracut如何提高加载的优先级别这个我不太清楚诶。

现在遇到的问题

我现在可以直通我的显卡设备并且启动虚拟机了,但是显卡驱动是没有办法安装的,每次安装完了之后都没有效果,然后我的Windows 虚拟机就会停用这个设备,我还需要哪里做调整呢?

错误43?
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF_(简体中文)#Nvidia_GPU.E7.9B.B4.E9.80.9A.E5.88.B0Windows_.E8.99.9A.E6.8B.9F.E6.9C.BA.E6.97.B6.E5.8F.91.E7.94.9F.22.E9.94.99.E8.AF.AF43:.E9.A9.B1.E5.8A.A8.E7.A8.8B.E5.BA.8F.E5.8A.A0.E8.BD.BD.E5.A4.B1.E8.B4.A5.E2.80.9D

楼上指出的那样 基本上archwiki里有非常详实的记录
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF_(简体中文)#.E5.90.AF.E7.94.A8IOMMU
这个是否需要就另外一说
还有那个固定透明大内存页面也是

我认为不是内存页的问题,我现在再尝试使用dump下来的显卡rom文件去启动,但是还是没有办法正常的去使用驱动,我查看了一下这个视频


但是按照这种做法还是没有办法正常使用驱动 也许我应该换一张支持uefi的显卡?

https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF_(简体中文)#Nvidia_GPU.E7.9B.B4.E9.80.9A.E5.88.B0Windows_.E8.99.9A.E6.8B.9F.E6.9C.BA.E6.97.B6.E5.8F.91.E7.94.9F.22.E9.94.99.E8.AF.AF43:.E9.A9.B1.E5.8A.A8.E7.A8.8B.E5.BA.8F.E5.8A.A0.E8.BD.BD.E5.A4.B1.E8.B4.A5.E2.80.9D
这个链接你看过吗?
你的卡应该是支持UEFI 否则应该都进不了系统(用UEFI启动的话)
支持不支持GOP UEFI用GPU-Z看就完事了