Intel 核心显卡 SR-IOV Install on PVE

系统环境 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.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

Intel 核心显卡 SR-IOV Install on PVE》上有7条评论

发表回复

您的电子邮箱地址不会被公开。