PVE优化和直通核显SR-IOV

Proxmox VE 去掉未订阅的提示

1
2
3
4
sed -i_orig "s/data.status === 'Active'/true/g" /usr/share/pve-manager/js/pvemanagerlib.js
sed -i_orig "s/if (res === null || res === undefined || \!res || res/if(/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
sed -i_orig "s/.data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy

需要浏览器清缓存,重新登录

开启核显的 SR-IOV

Shell 窗口输入 lspci查看所有的 PCIe 设备列表

配置开启IOMMU直通 PCIe,然后重启

1
2
3
4
5
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
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules
update-grub
update-initramfs -u -k all
reboot

查看是否直通成功

1
dmesg | grep -e IOMMU

成功执行后,预期结果是:
[ 0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA

通过运行以下命令检查 VFIO 模块的状态

1
dmesg | grep -i vfio

输出应类似于以下内容:
[ 7.262027] VFIO - User Level meta-driver version: 0.3

验证您的系统是否支持中断重映射:

1
dmesg | grep 'remapping'

如果命令返回:AMD-Vi: Interrupt remapping enabled" or "DMAR-IR: Enabled IRQ remapping in x2apic mode,则支持重新映射。否则,

您可以使用以下命令启用不安全的中断:

1
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

安装i915-sriov

先做一些清理工作

1
2
3
rm -rf /usr/src/i915-sriov-dkms-*
rm -rf /var/lib/dkms/i915-sriov-dkms
find /lib/modules -regex ".*/updates/dkms/i915.ko" -delete
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
更新
apt upgrade -y # 大版本更新重启系统
reboot

uname -r # 查看系统

apt install build-* dkms git sysfsutils -y
apt install proxmox-headers-$(uname -r) proxmox-kernel-$(uname -r)
cd ~
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd ~/i915-sriov-dkms
dkms add .
dkms install -m i915-sriov-dkms -v $(cat VERSION) --force
dkms status # 查看是否安装成功
# i915-sriov-dkms/2024.09.21, 6.8.12-4-pve, x86_64: installed 类似这种返回表示安装成功

lspci | grep VGA # 请记录当前的核显ID,修改下行的ID后执行下面的代码。

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

重启之后,在 SHELL 窗口输入 lspci | grep VGA ,回显如下所示,SR-IOV 开启成功,成功虚拟出了 7 个核显

注意:分配pcie设备时,切记显卡第0个不要分配,分配会导致SR-IOV 失效,变回一个