既不回头,何必不忘。既然无缘,何须誓言
今日种种,似水无痕。明夕何夕,君已陌路

PVE8 上启用 12 代 Intel CPU 核显 SR-IOV(一)

一、GPU 直通与虚拟化

典型的 GPU 直通将整个 PCIe 图形设备传递到 VM。这意味着只有一个 VM 可以使用 GPU 资源。这样做的优点是能够通过计算机的 HDMI 或 DisplayPort 端口将视频显示输出到外部显示器,但是,您只能有一个使用 GPU 的 VM,如果您希望在台式计算机上使用 Proxmox,但又希望通过外部显示器充分利用主桌面操作系统的 GPU 资源,这将非常有用。

但是,有一种方法可以在 VM 之间共享 GPU。该技术称为英特尔 VT-d(英特尔定向 I/O 虚拟化技术),可实现 GPU 资源的虚拟化,并为多达 7 个虚拟机提供 VF(虚拟功能),这样,(最多)7 个 VM 可以同时使用 GPU,但您将无法使用物理连接的监视器,因此,只能对这些 VM 进行远程桌面访问。

完整的 GPU 直通和 vGPU 设置都有其一席之地。这完全取决于您希望设置做什么。

二、开启核显 SR-IOV

SR-IOV 是一种硬件虚拟化技术,简单来说,能将物理 PCIe 设备虚拟成多个虚拟设备,在网卡上被广泛使用。Intel Core CPU 在 11 代后支持了该技术用于 GPU 虚拟化,替换了过去的 GVT-g(Intel 产品 GPU 虚拟化技术列表)

1、开启 SR-IOV 主要用到这个驱动程序:i915-sriov-dkms,能够创建最多 7 个 VF(可以简单理解为 vGPU)
在 Proxmox 主机上,打开 shell 并运行以下命令。首先,我们需要安装 Git、内核头文件,做一些清理,然后使用正确的版本设置内核变量。

apt update && apt install git pve-headers mokutil -y
rm -rf /var/lib/dkms/i915-sriov-dkms*
rm -rf /usr/src/i915-sriov-dkms*
rm -rf ~/i915-sriov-dkms
KERNEL=$(uname -r); KERNEL=${KERNEL%-pve}

2、现在我们需要克隆 DKMS 仓库并修改配置文件以设置内核版本,检查软件包名称是否为 i915-sriov-dkms,并且软件包版本是否与您的内核版本匹配。

cd ~
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd ~/i915-sriov-dkms
cp -a ~/i915-sriov-dkms/dkms.conf{,.bak}
sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf
sed -i 's/"@PKGVER@"/"'"$KERNEL"'"/g' ~/i915-sriov-dkms/dkms.conf
sed -i 's/ -j$(nproc)//g' ~/i915-sriov-dkms/dkms.conf
cat ~/i915-sriov-dkms/dkms.conf

3、在这里,我们安装 DKMS,链接内核源代码,并检查状态。验证内核是否显示为已添加

apt install --reinstall dkms -y
dkms add .
cd /usr/src/i915-sriov-dkms-$KERNEL
dkms status

4、现在让我们构建新内核并检查状态。验证它是否显示已安装

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

5、对于全新安装的 Proxmox 8.1 及更高版本,可以启用安全启动。以防万一,我们需要加载 DKMS 密钥,以便内核加载模块。运行以下命令,然后输入密码。此密码仅用于 MOK 设置,并在您重新引导主机时再次使用,之后,就不需要密码了。它不需要与您用于 root 帐户的密码相同。

mokutil --import /var/lib/dkms/mok.pub

三、Proxmox GRUB 配置

注意: Proxmox 的默认安装使用 GRUB 引导加载程序。如果这是您的情况,请按照本节中的步骤操作。如果您使用的是 ZFS 或其他使用 systemd 引导加载程序的配置,请跳到下面的 systemd 部分。

1. 返回 Proxmox shell,如果您的 Proxmox 主机中没有 Google Coral PCIe TPU,请运行以下命令。你会知道你是否这样做了,所以如果你不确定,请运行第一个命令块。如果您的 Google Coral 是 USB,请同时使用第一个命令块。如果您的 Google Coral 是 PCIe 模块,请运行第二个命令块。

cp -a /etc/default/grub{,.bak}
sudo sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"' /etc/default/grub
update-grub
update-initramfs -u -k all
apt install sysfsutils -y

如果您的 Proxmox 主机确实具有 Google Coral PCIe TPU,并且您正在使用 PCIe 直通到 LXC 或 VM,请改用此命令。这会在 Proxmox 主机级别将 Coral 设备列入黑名单,以便您的 LXC/VM 可以获得独占访问权限。

cp -a /etc/default/grub{,.bak}
sudo sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7 initcall_blacklist=sysfb_init pcie_aspm=off"' /etc/default/grub
update-grub
update-initramfs -u -k all
apt install sysfsutils -y

2、现在我们需要找到显卡在哪个PCIe总线上。通常为 00:02.0

lspci | grep VGA

3、运行以下命令并根据需要修改 PCIe 总线。在本例中,我使用的是 00:02.0。若要验证文件是否已修改,请对文件进行 cat 操作并确保它已被修改。

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

四、Proxmox SystemD 引导加载程序

注意:如果您的 Proxmox 主机不使用 GRUB 引导(默认),而是使用 systemd,请按照以下步骤操作。如果您使用的是 ZFS,则很可能是这种情况。如果您使用的是 GRUB,请跳过此部分。

1、让我们修改内核加载器命令行:

nano /etc/kernel/cmdline

2、将以下文本添加到当前行的末尾。

intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7

3、运行以下命令以更新引导加载程序。

proxmox-boot-tool refresh

五、完成PCI配置

1、现在我们需要找到显卡在哪个PCIe总线上。通常为 00:02.0

2、运行以下命令并根据需要修改 PCIe 总线号。在本例中,我使用的是 00:02.0。若要验证文件是否已修改,请对文件进行 cat 操作并确保它已被修改。

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

3、重新启动 Proxmox 主机。如果将 Proxmox 8.1 或更高版本与安全启动一起使用,则必须设置 MOK。当 Proxmox 主机重新启动时,监视启动过程并等待“执行 MOK 管理”窗口(下面的屏幕截图)。如果错过了第一次重新启动,则需要重新运行 mokutil 命令并再次重新启动。在您完成此设置之前,DKMS 模块不会加载。

4、选择注册 MOK、继续、是、<密码>、重新启动。

5、登录到 Proxmox 主机,打开 Shell,然后运行以下命令。第一个应返回 8 行 PCIe 设备。第二个命令应返回大量日志数据。如果一切顺利,最后您应该会看到次要 PCIe ID 1-7,最后是 Enabled 7 VF。如果您使用的是安全启动,但没有看到 7 个 VF,则 DKMS 模块可能未加载,根据需要进行故障排除。

lspci | grep VGA
dmesg | grep i915

6、现在 Proxmox 主机已准备就绪,我们可以安装和配置 Windows 11。如果您没有看到启用了 7 个 VF,请停止。根据需要进行故障排除。如果您使用的是安全启动,但没有看到 7 个 VF,请仔细检查 MOK 配置。

赞(3)
未经允许不得转载:疯言疯语 » PVE8 上启用 12 代 Intel CPU 核显 SR-IOV(一)