系统环境 PVE 6.8.4-2
硬件 Intel N100
要求使用SR-IOV使虚拟机能使用PVE host上的N100显示能力。
1,安装SR-IOV 功能
添加 pve-header的源
echo "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
#如果需要换全部源,可参考这里
安装必要的软件
apt install -y build-* pve-headers-6.8.4-2-pve git dkms sysfsutils
#6.8.4-2 换成PVE当前安装的版本
安装DKMS
DKMS github https://github.com/strongtz/i915-sriov-dkms
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd i915-sriov-dkms
dkms add .
dkms install -m i915-sriov-dkms -v 2024.08.09 --force
#此处版本号可能有变化,请按git发布页面
dkms status
出现 i915-sriov-dkms/2024.08.09, 6.8.4-2-pve, x86_64: installed
即为安装成功
lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics]
即为安装成功,N100的PCI设备序号为 00:02.0
添加内核参数
intel_iommu=on i915.enable_guc=3 i915.max_vfs=7
到 GRUB_CMDLINE_LINUX_DEFAULT 中
GRUB_CMDLINE_LINUX_DEFAULT = "quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"
更新 grub update-grub
添加虚拟化显卡
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf
#最多7个,根据需求设置
reboot
dmesg | grep i915
看到若干个VFs 说明安装成功。
警告:虽然理论上可以虚拟7个虚拟GPU,但实际上强烈建议需要几个虚拟几个。如果只需要一台虚拟机使用该显示核心,请改成“1”个。N100一类的CPU,原则上不应该虚拟超过3个,否则容易崩溃。
2,安装Guest
Guest示例:Microsoft Windows
安装过程从略。配置要求:
CPU:Host模式,核心4(与N100的物理设计一致)
OMVF bios,Q35平台,先不要安装PCIE设备,先安装Windows。安装完毕系统后,关闭虚拟机。
添加PCIE设备:
设备需要选择0000:00:02.1或之后的,0000:00:02.0 不是虚拟显卡,而是宿主机上的显卡位置,因此不能选择。(如果你虚拟了多个VFS, 序号从1开始,如果只有一个VFS,选择1即可)
选择主GPU,如果不必要,不要选择多余的功能。
修改Windows的PCI设备序号
nano /etc/pve/qemu-server/[虚拟机编号].conf
#例如Windows虚拟机的序号是101
则命令为:
nano /etc/pve/qemu-server/101.conf
在配置文件中添加以下内容,目的是在Windows中,将PCI设备序号设置为02.0(实际上刚才填写的是02.1,但是那是在PVE中的序号,如果不修改,可能Windows会找不到设备)
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2
此处可参考这里
进入系统后能看到显卡已识别,再去设备管理器中看到显示功能正常。
现在实验从虚拟机中调用显示核心,给一些负载。使用ffmpeg进行转码:
ffmpeg -hwaccel qsv -hwaccel_output_format qsv -i test.wmv -c:v h264_qsv -b:v 6000k -c:a aac -strict experimental -b:a 192k test-output.mp4
可以看到ffmpeg成功使用了SR-IOV虚拟化的显示芯片进行转码。
Trouble Shoot: 无法载入DKMS驱动程序、无法看到虚拟化显卡
如果一切安装正常后,仍然无法看到虚拟化的显卡(PCI序号应该为 00:02.1 – 00:02.7),说明DKMS驱动未载入。这可能是由于VT-D或IOMMU未开启、内核版本和安全启动等因素引起的。
首先检查BIOS中VT-D和IOMMU是否开启。
根据目前网上的信息,PVE 6.8以上“不兼容”是错误的。6.8以上版本PVE需要安装新的DKMS驱动程序,请在DKMS项目的github上查找最新驱动匹配的PVE版本号。
修改版本号的方法是:首先卸载DKMS,卸载后进入 dkms.conf中修改对应版本号。某些资料说的“降级内核到6.5” 既无必要,也不安全。
修改完版本号后重新编译安装DKMS。
在安全启动中允许加载DKMS驱动
PVE 6.8 以上的系统不允许加载第三方驱动,首先需要安装 mokutil (如果apt get 显示已经安装,且控制台显示已经启用Secure BOOT,则需要手动允许DKMS驱动加载)
mokutil --import /var/lib/dkms/mok.pub
这将允许DKMS驱动在启动时加载。此时系统会要求你输入一个密码,这个密码是用于重启动后允许驱动加载的。这个密码在输入一次过后不需要重新输入。
插入键盘鼠标,重启PVE宿主。(此时需要屏幕)
PVE宿主重启后会出现要求输入刚才你设置的密码,确认加载驱动。如果未能输入密码,则驱动不会被加载,需要再次重启。输入成功后,下次重启无需再次输入。
以上内容请参考 这篇 https://www.derekseaman.com/2024/07/proxmox-ve-8-2-windows-11-vgpu-vt-d-passthrough-with-intel-alder-lake.html
w5mp7k
jlnj1w