pve如何进行SRIOV进行显卡直通

变更内核版本

proxmox8.2默认的内核为proxmox-kernel-6.8.4-2-pve,但后续的步骤不支持该版本,需进行降级

安装新内核

1
apt install proxmox-kernel-6.5.13-5-pve

固定启动内核版本

1
proxmox-boot-tool kernel pin 6.5.13-5-pve

重启系统

内核验证

重启后是用uname -a查看结果是否为Linux pve 6.5.13-5-pve #1 SMP PREEMPT_DYNAMIC PMX 6.5.13-5 (2024-04-05T11:03Z) x86_64 GNU/Linux,是的话才代表内核切换成功

编译i915-sriov-dkms(仅适用于12代处理器,我用的n100)

编译前基础组件安装

1
2
3
4
apt install proxmox-header-6.5.13-5-pve
apt install git
apt install build-*
apt install dkms

下载

1
2
cd /usr/src
git clone https://github.com/strongtz/i915-sriov-dkms.git i915-sriov-dkms-6.5

修改编译配置

1
2
cd /usr/src/i915-sriov-dkms-6.5
git reset --hard d2b3b6e

关于为什么要切换git库的版本号,否则编译不会成功。具体可以见issue165pr164

修改dkms.conf文件,将PACKAGE_NAME和PACKAGE_VERSION改为如下值

1
2
PACKAGE_NAME="i915-sriov-dkms"
PACKAGE_VERSION="6.5"

编译

1
dkms install --force -m i915-sriov-dkms -v 6.5

结束后运行dkms status,确认是否有以下结果

1
i915-sriov-dkms/6.5, 6.5.13-5-pve, x86_64: installed

有则说明编译成功

配置

修改grub

修改/etc/default/grub, 给GRUB_CMD_LINE_LINUX添加intel_iommu=on i915.enable_guc=3 i915.max_vfs=7

使用update-grub刷新grub

修改modules

修改/etc/modules, 添加以下四行

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

使用update-initramfs -u刷新

设置虚拟核显数

安装开机设置工具

1
apt install sysfsutils

编辑/etc/sysfs.conf,加入

1
devices/pci0000:00/0000:00:02.0/sriov_numvfs = 1

其中1代表虚拟出一个核显,主要是n100太弱了,且我只需要虚拟出一个给windows硬解码,左边的key是核显对应的位置。得通过lspci结合pve web ui才能确定,此处只代表n100的

设置完成后重启

验证

通过web ui可以看到有如下图, 则代表成功

成功后通过web ui给指定的主机加pci设备直通即可,记得先别勾上主GPU,启动后先去装上核显驱动,关机,然后将主gpu勾选上,重新开机,开机后打开任务管理器看到GPU,就说明GPU直通了

注意: 设置主GPU可能会导致pve web控制台黑屏,若只需要硬件加速,不需要图像输出,可以考虑关闭主GPU的选项,原因见wiki,如果出现了43错误大概率也是因为驱动导致的,可以具体看看wiki

注意: 检查机型是否为qe35, 这有利于提高性能