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

2023-08-0600 分钟
type
status
date
slug
summary
tags
category
icon
password

背景

前段时间买了台 MiniPC 装 PVE 作为 Homelab,打算作为媒体服务器 + NAS + 学习使用 (虽然最后主要是用来装 Windows 虚拟机玩 Galgame)
机子的 U 是 12 代的 i3-N305,买的时候 PVE8 还没发布,装的是 PVE7,5.x 的内核,对 12 代 U 还没有很完善的支持,核显无法使用。这就导致在 Jellyfin 看番只能软解,以及玩 Galgame 时压力都在 CPU 上,全程 CPU 100%,体验说不上好
最近发现 PVE8 发布了,升级到了 6.2 的内核,于是赶紧折腾一下。升级过程网上很多文章,这里略,无非就是配置下镜像源然后 apt update & apt dist-upgrade
 

开启核显 SR-IOV

SR-IOV 是一种硬件虚拟化技术,简单来说,能将物理 PCIe 设备虚拟成多个虚拟设备,在网卡上被广泛使用。Intel Core CPU 在 11 代后支持了该技术用于 GPU 虚拟化,替换了过去的 GVT-g(Intel 产品 GPU 虚拟化技术列表
 
开启 SR-IOV 主要用到这个驱动程序:i915-sriov-dkms,能够创建最多 7 个 VF(可以简单理解为 vGPU)
按着文档里「PVE Host Installation Steps (Tested Kernel 6.1 and 6.2)」这步做即可。在 update-grub 和 update-initramfs -u 后多执行一句 pve-efiboot-tool refresh
但我这里遇到一个问题,重启后查看 dmesg | grep i915 有这样两条日志
看了这个 issue 后,尝试重装。删除了原来的 dkms 模块,修改 dkms.conf 里的 PACKAGE_NAME 为 6.2(和内核版本匹配),然后 install 时加上 --force 重新走遍安装流程
这回正常了,上面两条日志没有了,也显示成功启用 VF,lspci | grep VGA 能看到多出来 7 个 GPU 设备,可以将其挂载到 LXC 或虚拟机中(00.02.0 那个物理 GPU / PF 不应该被使用)
notion image
 

Windows 虚拟机挂载

Windows 虚拟机要先配置好远程桌面,能连的上。虚拟机配置里「显示」选「无」(选「无」后就无法 VNC 连接了,所以要先配好远程桌面)
添加 PCI 设备,选择 vGPU,勾上主 GPU
notion image
进入 Windows 安装驱动,Bingo
notion image
 

LXC 容器挂载

新建 LXC 容器要选择「嵌套」+「特权」(去掉无特权容器的 ✅)
挂载设备到 LXC 容器里,在 PVE 里找下对应设备驱动,选一个未使用的 vGPU 记下第 5 、 6 列的 video id 和 render id(不要选了 0 的物理 GPU / PF),我这里选择 card2 和 renderD130
关闭 LXC 容器,然后修改对应 LXC 容器配置文件
添加以下内容把设备挂载到 LXC 内(分别填入 video id 和 render id,以及映射对应 card 和 render)
notion image
 
进入 LXC 容器安装驱动
如果 LXC 内也使用了容器,例如我在 LXC 内装了 Docker 部署 Jellyfin,则容器内也要有驱动,并把设备挂载进去
 
然后 Jellyfin 容器内就可以找到对应设备,启用硬件加速即可
notion image
 

总结

核心就两步:
  1. 在 host(PVE)上安装驱动模块,开启 SR-IOV
  1. 配置虚拟机 or LXC 挂载 vGPU,并在里面安装驱动
 
有了 GPU 后体验好了很多,无论是 Windows 玩 Galgame 还是 Jellyfin 追番硬解,CPU 压力基本不超 5%,十分流畅,释放了本就不强的 CPU 算力。而且相比独占的直通物理 GPU,SR-IOV 虚拟出来的多个 vGPU 能分给多台虚拟机使用,打造完美 Homelab
 

更新

2024/09/25 更新
我将 PVE 版本升级到了 8.2.7,内核版本为 6.8.12。升级后因为内核版本变更,原来的修改就会失效,这里更新一下如何处理
 
首先需要卸载掉旧的模块
然后重新走一遍仓库中安装驱动流程,这里同样按照对应内核版本的指南(PVE Host Installation Steps (Tested Kernel 6.5 and 6.8))操作即可
操作的时候注意替换相关命令为自己的内核版本,免得出现问题。例如 apt install proxmox-headers-6.8.8-2-pve proxmox-kernel-6.8.8-2-pve 我这里改成 apt install proxmox-headers-6.8.12-2-pve proxmox-kernel-6.8.12-2-pve
之前已经修改过 GRUB 等配置,因此重新安装完驱动(dkms install ...)后就可以直接重启系统生效,LXC 和 VM 也不必重新配置
 

下一篇

容器标准和生态

Loading...