前言

PVE下开启SR-IOV虚拟化核显的教程非常多,但是很多坑和细节其他所谓的保姆级教程并不保姆,所以我们也来出一个陪伴级教程,以一个前瞻视角来开启这个功能,之后无论PVE更新到什么版本都通用。

仅只有支持SR-IOV的CPU才能开启此功能

此功能的好处就是能过多个虚拟机直通核显使用,但是缺点就是开启后就不能直通核显给windows的HDMI画面直出,只能通过远程桌面使用。

一、配置PVE的国内源

更换方法

备份源文件

cp /etc/apt/sources.list /etc/apt/sources.list.backup

添加国内源

有两段代码,第一段整段代码一次性复制

cat <<EOF > /etc/apt/sources.list

deb http://mirrors.ustc.edu.cn/debian/ bookworm main non-free-firmware

deb-src http://mirrors.ustc.edu.cn/debian/ bookworm main non-free-firmware

deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib

deb http://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free-firmware

deb-src http://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free-firmware

EOF

echo "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

屏蔽企业源

sed -i 's/^deb https:\/\/enterprise.proxmox.com\/debian\/pve/#deb https:\/\/enterprise.proxmox.com\/debian\/pve/' /etc/apt/sources.list.d/pve-enterprise.list

屏蔽 Ceph 源

sed -i 's/^deb https:\/\/enterprise.proxmox.com\/debian\/ceph-quincy/#deb https:\/\/enterprise.proxmox.com\/debian\/ceph-quincy/' /etc/apt/sources.list.d/ceph.list

更新源

apt-get update

测试还会不会报错

已经没有报错信息了

概览里面注意,会有,未启用Proxmox VE存储库! 提示,这个忽略不管,因为企业源没用,被我们屏蔽了

二、降级内核版本

Q:为什么要降级内核?

A:因为当前我们使用的PVE版本是最新的8.2.4,内核版本为6.8.4,而使用到的i915-sriov-dkms项目作者最新只更新支持到的内核版本为6.5,所以需要进行降级内核操作。

1.首先查看当前版本及内核

输入以下命令可以查看到当前PVE版本为8.2.4,内核版本为6.8.4

pveversion

2.查看当前可以用的内核

proxmox-boot-tool kernel list

此时可以看到系统默认有一个6.5.13-5的内核版本,符合项目需求的6.5版本,但是i915-sriov-dkms项目作者目前依旧没有更新到这个版本,所以直接使用这个版本是无法编译成功的,所以我们还是需要继续降级内核操作

经过我测试6.5.13-1这个版本内比较稳定,所以我们降级为这个版本。

3.开始降级操作

更新源

apt update

查找可用内核

apt-cache search pve-kernel

安装此版本内核

apt install pve-kernel-6.5.13-1-pve

更新 Grub 引导配置

update-grub

三、固化这个版本的内核

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

检查固化是否成功

proxmox-boot-tool kernel list

看到下图红框内容,代表固化成功

四.安装此版本内核的头文件

apt install pve-headers-6.5.13-1-pve

五、配置直通的基础环境

1.开启IOMMU直通功能

sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream i915.enable_guc=3 i915.max_vfs=7"' /etc/default/grub

2.增加虚拟化驱动,加载vifo系统模块

使用了我们VUM-PVE整合包的无需再配置这步

echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules

3.屏蔽显卡驱动

这步是个巨大的坑,一定要注意,如果你之前配置过这步,进去全部删除,如果没有配置过就不管

nano  /etc/modprobe.d/blacklist.conf 

4.更新Grub引导配置和initramfs

update-grub

update-initramfs -u -k all

5.重启PVE

reboot

6.重启后检查固化降级的内核是否生效

uname -r

已经成功以6.5.13-1内核版本启动PVE,固化成功

七、配置开启SR-IOV虚拟化核显

1.安装编译环境依赖

apt-get install --no-install-recommends git mokutil sysfsutils -y
apt install --reinstall dkms -y

2.添加一个临时的KERNEL环境变量

KERNEL=$(uname -r); KERNEL=${KERNEL%-pve}

3.克隆项目

项目地址:https://github.com/strongtz/i915-sriov-dkms.git

git clone https://github.com/strongtz/i915-sriov-dkms.git

cd i915-sriov-dkms/

sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf

sed -i 's/"@PKGVER@"/"'"$KERNEL"'"/g' ~/i915-sriov-dkms/dkms.conf

4.检查dkms.conf 配置文件中是否配置正确的内核版本和i915-sriov-dkms

cat ~/i915-sriov-dkms/dkms.conf

5.创建目录的符号链接到/usr/src/目录下

dkms add .

6.进入到链接到的目录

cd /usr/src/i915-sriov-dkms-$KERNEL

7.查看已安装的 DKMS 模块及其状态

dkms status

8.开始编译内核加入i915-sriov驱动

dkms install -m i915-sriov-dkms -v $KERNEL -k $(uname -r) --force -j 1

编译过程时间稍长,需要等待

再次检查编译是否成功

dkms status 

9.查询当前核显ID

lspci | grep VGA

这里显示00:02.0,完整的PCI地址0000:00:02.0

10.修改下面代码的核显ID和虚拟核显数

echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf


# 0000:00:02.0 这个修改为你的ID

# sriov_numvfs = 7里面的7修改为其他值,不要超过7

11.重启PVE

reboot

12.重启完检查是否开启成功

lspci | grep VGA