关于启动内核模块kvmgt遇到的问题
只有添加内核参数intel_iommu=on i915.enable_gvt=1 i915.enable_guc=0
到grub配置文件内才能启动kvmgt,否则在下一个步骤中,启动内核模块时modprobe kvmgt vfio-iommu-type1 mdev
就会遇到报错
有两个小坑:
1、修改完grub配置文件必须执行update-grub
并重启才能生效
2、执行modprobe kvmgt vfio-iommu-type1 mdev
后,仅对本次开机生效;这意味着需要让它开机自动执行这条命令
GVT-g以UEFI方式启动Win10
网络上关于使用GVT-g以传统BIOS方式启动Win10的教程已经很完善了,他们大多参考自ArchWiKi:
https://wiki.archlinux.org/title/Intel_GVT-g
但其中“Using DMA-BUF with UEFI/OVMF”篇章有些令人费解的问题,在客户机的表现为;无论如何都无法安装显卡驱动、安装显卡驱动过程中卡死、甚至导致物理机卡死
实则是kvm配置错误,虚拟化的核显没有提供给虚拟机。
我反复实验,通过以下的几个操作成功以UEFI方式启动Win10:
首先,确保你已经准备好了虚拟化的核显,执行ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
以查看;0000:00:02.0
取决于你的显卡,使用lspci -D -nn
命令来查找。
上述命令应该能得到类似i915-GVTg_V5_4 i915-GVTg_V5_8
的输出
确保你已经生成了uuid给虚拟化出来的显卡,命令类似于
echo "$GVT_GUID" > "/sys/devices/pci${GVT_DOM}/$GVT_PCI/mdev_supported_types/$GVT_TYPE/create"
对于“libvirt qemu hook”,再次提醒你要确保它有可执行权限;如果libvirt qemu hook不能正常工作,启动KVM客户机时将会报错,类似于
启动域时出错: device not found: mediated device 'c3e42018-b346-4fe5-b82c-ca0419f6e4eb' not found
当你认为一切都妥当了,将要操作“Assign a virtual GPU to the virtual machine”一段时,请这么做:
操作“Assign a virtual GPU to the virtual machine”一段;但将<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='off'>
中的display='off'
改为display='on'
。
操作“Getting virtual GPU display contents”一段(是的,你没有看错,虽然是UEFI;但要操作这一段)。
操作“Using DMA-BUF with UEFI/OVMF”一段。
操作“Enable RAMFB display (optional)”一段。
操作“Display virtual GPU output”中的“Output using QEMU display (QEMU CLI only)”或者“libvirt”(取决于使用命令行创建KVM客户机还是使用xml文件创建);并且用<gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/>
替换
$ virsh edit vmname
...
<graphics type='spice'>
<listen type='none'/>
<gl enable='yes'/>
</graphics>
<video>
<model type='none'/>
</video>
...
中的<gl enable='yes'/>
;注意0000:00:02.0
取决你的显卡
不要操作“Output using SPICE with MESA EGL”和“Output using SPICE with NVIDIA EGL or VNC”;除非你知道它怎么用才好
操作“Changing the display resolution of virtual GPU”
至此,启动KVM客户机并安装核显驱动就可以正常运行了