PVE 安装windows10 硬件虚拟化UHD630显卡直通与GVT-g
硬件:
CPU: i9-10900t es 版核显 UHD630
主板:七彩虹H510i GAMING V20ITX主板
一、原理介绍:
显卡直通很好理解,即是显卡直接直通给虚拟机,包括PVE和其他虚拟机都不能用。适合打算将显卡直通给一个虚拟机外联显示器的情况,或者主机有多个显卡分别直通给不同设备的情况。这里需要说下,直通也需要IOMMU拆分,不然整个PCIe全都给了某个虚拟机,后果不限于PVE失联,M.2固态找不到了,硬盘也找不到了等等。。。
中介设备【 Mediated Devices 】:vGPU, GVT-g。Intel核显的技术叫GVT-g, NVIDIA技术叫vGPU。这个是很多小伙伴的刚需,想把核显分享给黑群晖或者docker里面的emby、jellyfin做硬解,win10或者别的虚拟机也想要个核显,反正都得有。这种情况就用到intel的GVT-g,效果如下:
二、修改引导加载程序内核命令行配置文件GRUB
nano /etc/default/grub
【第一步】添加命令
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1"
光标放在quiet的后面空一格,然后复制黏贴。
修改完成后按Ctrl+x,问你是否需要保存?-->输入Y,问你是否写入文件-->按回车。
弄错了没关系,问你是否需要保存?-->输入N,就返回了。
原理说明(按需要添加命令):
1、官方文档:IOMMU (I/O Memory Management Unit)中断重新映射。如果不中断重新映射,将无法使用 PCI 直通。设备分配将失败,并显示“无法分配设备”[设备名称]“:不允许操作”或“找不到中断重新映射硬件,将设备传递到非特权域不安全”错误。【 'Failed to assign device "[device name]": Operation not permitted' or 'Interrupt Remapping hardware not found, passing devices to unprivileged domains is insecure.' error.】
所有使用英特尔处理器和芯片组的系统,如果支持英特尔虚拟化技术定向 I/O (VT-d),但不支持中断重新映射,将看到此类错误。较新的处理器和芯片组(AMD 和英特尔)提供中断重新映射支持;
2、PCIe直通需要主要主要开启虚拟化, Intel叫VT-d,AMD的叫AMD-V(i) ,都需要再主板BIOS里面开启;
3、Intel添加的为intel_iommu=on,AMD添加的为amd_iommu=on;
4、 iommu=pt,官方文档说明:这仅在必要时才启用 IOMMU 转换,适配器不需要使用 DMA 转换到内存,因此可以提高虚拟机管理程序 PCIe 设备(未传递到 VM)的性能。意思就是开了能提高虚拟机调取PCIe的性能,那就开吧。
5、i915.enable_gvt=1,官方文档说明:Intel的 GVT-g 驱动程序集成在内核中,启用时加载模块。意思就是,想开启GVT-g的就添加这条,显卡直通的就不要添加了。
【第二步】保存更改并更新 grub
update-grub
GVT-g可支持数量和最多分辨率:
i915-GVTg_V5_1 # Video memory: <512MB, 2048MB>, resolution: up to 1920x1200
可用数量
i915-GVTg_V5_2 # Video memory: <256MB, 1024MB>, resolution: up to 1920x1200
可用数量
i915-GVTg_V5_4 # Video memory: <128MB, 512MB>, resolution: up to 1920x1200
可用数量2
i915-GVTg_V5_8 # Video memory: <64MB, 384MB>, resolution: up to 1024x768
可用数量1
所以想要核显分享给多个虚拟机用的,需要在bios里面设置内存分给核显显存的大小。
二、修改内核模块
编辑文件:
nano /etc/modules
在最后加入 :
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvmgt
原理说明:
1、PCIe直通启用vfio vfio_iommu_type1 vfio_pci vfio_virqfd
2、vGPU和GVT-g需再添加kvmgt
【第二步】更改任何与模块相关的内容后,您需要刷新 initramfs
update-initramfs -u -k all
同时完成后,应重启以下。可用shell里面reboot,或者web界面重启。
总共也就四步而已,非常简单。
三、效果检测
命令一:
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
命令二:
find /sys/kernel/iommu_groups/ -type l
命令三:
lspci
命令四:
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types
标题二里最后的TIPS里面,i915-GVTg_V5_4,i915-GVTg_V5_8。
最简单的还是直接建一个虚拟机,完成后不要启动,再【硬件】-->【添加】-->【PCI设备】就能看到了。
四、放一张虚拟机的配置图大家参考
五、问题与总结
pve按照完成后,可先检测一下硬件设备和系统是否支持。要确定您的系统是否支持中断重新映射,请执行以下操作:
dmesg | grep 'remapping'
如支持应显示:
[ 0.111370] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.112284] DMAR-IR: Enabled IRQ remapping in x2apic mode
下面重点来了,不支持咋办?,下面的办法我没验证,做为参考。
如不显示,则硬件设备不支持,可以使用以下命令允许不安全的中断:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
意思就是通过命令行或者软支持(我的理解)。
然后再命令行更新 grub,刷新 initramfs。
update-grub
update-initramfs -u -k all
要是再不行,只能再网上搜搜有没有案例了。
最后的最后:
1、给软路由的小伙伴,这样设置下来,你的多网口网卡可以支持分别分给ikuai、op、routeros等等软路由了。
2、如果你的网卡支持SR-IOV的话,你会发现也变成中介模式了一个网口也能支持给多个设备了。