基于PVE8.0的SR-IOV配置
此文可以作为11代至13代英特尔CPU在PVE8.0中开启SR-IOV的参考
硬件情况
主板&CPU:尔英12700H ITX
(如果想买尔英主板,ITX比ATX更好,BIOS更简单)

什么是SR-IOV?这里引用Oracle的说明
SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。
简单来说,允许将一个PCIe设备虚拟化成多个设备,且每个虚拟化出来的设备都可以获得与物理设备相近的性能
如果显卡开启SR-IOV就可以给多台虚拟机同时配上显卡
网卡之类的设备也支持SR-IOV,但是不如显卡这么有用(毕竟虚拟化出来的网卡性能也没差多少,还不需要自己安装驱动)

前置条件
以下设置基于尔英12700H主板
1.BIOS中开启VMX(VT-X)
Advanced --- CPU Configuration --- Intel (VMX) Virtualization Technology
2.开启VT-D(位于显卡设置中)
Advanced --- Graphics Configuration --- VT-d
3.开启4G以上MMIO分配
Advanced --- Graphics Configuration --- Above 4GB MMIO BIOS assignment
4.关闭UEFI的安全启动
其他诸如CPU超频,XMP之类请自行设定
安装PVE过程中无需其他操作,请按各类教程自行安装
插播一条,UEFI编辑可以用这个GitHub库,网页上即可查看,搜索,修改BIOS的配置
GitHub库 https://github.com/BoringBoredom/UEFI-Editor
在线编辑器 https://boringboredom.github.io/UEFI-Editor
尔英12代ITX主板BIOS需要的东西我已全部打包,其他BIOS可以按照教程操作
下载连接 https://xingnian.lanzoum.com/icMO615vlcmd
修改BIOS有风险!请小心操作,只看看还是没有问题的
PVE安装后可选内容
修改软件源为国内源
8.0的PVE对应的Debian版本为Debian 12 Bookworm
可以直接搜索Debian 12替换国内源
这是我的/etc/apt/sources.list文件参考,其他的源基本用不到
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
最后一个源在安装驱动时会用到,不然会无法搜索到pve头文件

开始配置直通SR-IOV
1.修改GRUB
修改/etc/default/grub文件的GRUB_CMDLINE_LINUX_DEFAULT项,自行选择文本编辑工具
quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7
添加以下内容,完成图如下

2.安装驱动
参照https://github.com/strongtz/i915-sriov-dkms
安装headers,用于安装驱动
apt update && apt install pve-headers-$(uname -r)
安装驱动编译需要软件包
apt install build-* dkms
克隆GitHub库
git clone https://github.com/strongtz/i915-sriov-dkms
替换字符串
sed -i 's/@_PKGBASE@/i915-sriov-dkms/;s/@PKGVER@/6.1/' i915-sriov-dkms/dkms.conf
移动到指定位置
mv i915-sriov-dkms /usr/src/i915-sriov-dkms-6.1
编译并安装驱动
dkms install --force -m i915-sriov-dkms -v 6.1
检查一下驱动安装情况
dkms status
正常情况下应该只有一行
i915-sriov-dkms/6.1, 6.2.16-3-pve, x86_64: installed
如果有多行or有报错请移除错误的驱动(如果没改命令应该不会变)
dkms remove i915-sriov-dkms/6.1
一次移除不干净就用移除全部驱动(驱动名字自己改)
dkms remove i915-sriov-dkms/6.1 --all
3.更新 GRUB 与 initrramfs
update-grub && update-initramfs -u
4.安装sysfsutils(这一步只有宿主机需要执行!!!)
apt install sysfsutils
查找iGPU所在总线
lspci | grep VGA

我的GPU在00:02(我已经完成了驱动的安装,还没安装的只会显示出一个,而且不会有.1.2.3这些)
把这行命令中的00:02替换成自己的
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf
5.确认驱动情况
重启系统 后再次运行
lspci | grep VGA
如果已经出现了我上面的截图说明已经配置成功
之后可以在虚拟机的硬件页面中添加 Raw Device
注意,不要直通.0设备,即0000:00:02.0设备,不要勾选全部功能

虚拟机安装驱动
Windows虚拟机是比较简单的
创建虚拟机,系统机型选Q35,启动选UEFI
进入系统后搞定远程桌面之类的远程控制软件,最好先测试连接成功后再进行下一步
添加SR-IOV设备,重启系统
勾选主GPU,PCIe

主GPU会屏蔽VGA(不屏蔽也用不了),PCIe只支持Q35机型(好像是只支持UEFI)
开启后远程连接,去英特尔管网下载最新的显卡驱动
驱动安装完成后进行一次重启,这时PVE管理页面的控制台应该无效了
直接使用远程桌面连接上系统,使用其他远程控制软件也可,但是可能会有分辨率的问题(600*480警告!)
可以使用虚拟显示器解决
打开任务管理器,理论上应该出现了你的显卡
可以打开一个视频,看看显卡是否正常工作

Linux虚拟机要稍微麻烦一点
我为了方便用的是Ubuntu23.04 内核版本6.2.0-27-generic
GitHub上说Debian系统会缺少一些必须的模块,建议自己去看
内核版本在6.1-6.3都可以用这个操作,可以选择自己升级内核,也可以去找支持其他内核版本的驱动
创建虚拟机,机型还是Q35,启动也是UEFI
务必关闭PVE提供的UEFI的安全启动!
然后操作与宿主机安装SR-IOV相似
修改GRUB这一步,改成这样
GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.enable_guc=3"
跳过安装sysfsutils这一步
也就是说需要执行1235步
正常情况下应该可以显示如下内容

安装并运行vainfo[可选]
如果你的显卡驱动已经正常工作,那么应该会显示相似的内容,具体因解码能力而定
如果报错请重新检查驱动安装情况,驱动安装/重装后必须更新 GRUB 与 initrramfs
apt install vainfo && vainfo
