系统环境 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虚拟化的显示芯片进行转码。