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

注:lspci 显示所有PCIe设备的信息,比如第二个VGA就是Intel的核显,0000:00:02.0就是设备ID,下一个命令就是参看此设备支持的类型。

命令四:

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的话,你会发现也变成中介模式了一个网口也能支持给多个设备了。

阅读剩余
THE END