释放小七猫的分享欲

需要调用核显的服务-SR-IOV 与 LXC 核显共享

tags: NAS
@ 27/11/2025

需要调用核显的服务-SR-IOV 与 LXC 核显共享

在第一部分,我们已经介绍了 PVE 上开启 SR-IOV 的方法,这一部分来说说,具体怎么在虚拟机、容器中使用核显。

LXC 核显共享

从上图可以看到,虽然 EmbyServer 这个服务是跑在一个专门的 LXC 容器中,但我们在宿主机里面进行 PS,仍然可以发现 Emby 进程。

这也证明了 LXC 容器中的进程并没有与 PVE 主机真正隔离,那么我们也可以像 docker 一样,通过映射 /dev/dri 设备的方式共享核显。

与之对比,迅雷的进程跑在虚拟机里面,与 PVE 实现了真正隔离。

root@pve:~# ps -ef | grep thunder
root     2210438 2208189  0 14:20 pts/0    00:00:00 grep thunder

首先确保核显驱动正常:

  1. 如果能够看到 PCI 设备中包含核心显卡,说明设备识别正常
root@pve:~# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Raptor Lake-P [Iris Xe Graphics] (rev 04)
00:02.1 VGA compatible controller: Intel Corporation Raptor Lake-P [Iris Xe Graphics] (rev 04)
00:02.2 VGA compatible controller: Intel Corporation Raptor Lake-P [Iris Xe Graphics] (rev 04)
00:02.3 VGA compatible controller: Intel Corporation Raptor Lake-P [Iris Xe Graphics] (rev 04)
00:02.4 VGA compatible controller: Intel Corporation Raptor Lake-P [Iris Xe Graphics] (rev 04)
  1. 查看驱动

可以看到 card0 和 renderD128 都存在,说明驱动正常

root@pve:~# ls /dev/dri
by-path  card0  card2  card3  card4  renderD128  renderD130  renderD131  renderD132

我的设备比较多是因为开启了核显 SR-IOV,分出了多张显卡。核显驱动一般包含在 Linux 内核里面,无需自行安装。

修改核心显卡直通需要使用 PVE 宿主机的命令行修改 LXC 容器的配置文件

编辑容器对应的配置文件,例如容器 ID 101 对应的文件是 101.conf,路径是 /etc/pve/lxc/101.conf,使用 vim etc/pve/lxc/101.conf 编辑该文件,在文件末端加入以下内容:

lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop: 
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

这些配置参数是针对 Linux 容器(通常是 LXC 容器)的一些安全和资源控制设置,用于限制容器内部的行为和访问。以下是每个配置项的作用解释:

lxc.apparmor.profile: unconfined:该配置指定了 AppArmor(应用程序安全性配置框架)的配置文件名称,这里设置为“unconfined”,用于允许容器内的进程具有更高的系统权限

lxc.cgroup.devices.allow: a:允许容器内的进程访问所有的 cgroup 设备。

lxc.cap.drop: 此配置项为空,容器内的进程将继承主机系统的默认能力设置。

lxc.cgroup2.devices.allow: c 226:0 rwm 和 lxc.cgroup2.devices.allow: c 226:128 rwm:允许容器内的进程对设备号为 226:0 和 226:128 的字符设备节点拥有读、写和映射(rwm)的权限。用于允许容器内的进程访问特定的设备,如图形加速设备。

lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file 和 lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file:将主机系统上的两个设备节点 /dev/dri/card0 和 /dev/dri/renderD128 挂载到容器内的相同位置,用于允许容器内的应用程序访问图形硬件加速功能,以便执行图形相关的任务

修改完成后保存,启动 LXC 容器。等容器启动成功后,进入容器,使用命令行检查 /dev/dri 路径下挂载的文件,card0 和 renderD128 都正常。

ls /dev/dri/
card0  renderD128

部分应用程序可能没有调用核显的权限,最简单的方法是 chmod 777 -R /dev/dri,运行所有用户读写执行。如果更新了 PVE 系统,可能需要重新授权该目录。

核显 SR-IOV

Windows

SR-IOV 注意事项:

  1. CPU 类型选 Host
  2. 机型选 Q35
  3. 系统安装完成后,显示选为“无”
  4. 直通显卡时,勾选主 GPU、高级功能-PCIE-Express;不能选择 PCIE 号末尾为 0 的物理核显,也不能勾选所有功能。

进入 Windows 系统后,直接安装微软官方显卡驱动即可,如果设备管理器报错 43,则认真对比上述 4 点。

安装完成后,不要再用 VNC 访问 Windows 了,应该用远程桌面进行访问。SR-IOV 的核显没有显示功能,只有计算功能(后来听说可以显示,但不建议折腾)。

Debian 系 Linux

SR-IOV 官方只支持了 Debian 系和 Arch 系,对于 Debian12/13 来说,安装流程比较固定

  1. 更新系统,安装 sudo,并将用户加入 sudo 组
apt update 
apt install sudo
sudo usermod -aG sudo {username}
  1. 修改 grub 文件 sudo vim /etc/default/grub

添加启动参数

i915.enable_guc=3

sudo update-grub 更新 grub

  1. 安装内核文件
sudo apt install -y dkms vainfo intel-media-va-driver wget firmware-linux linux-headers-$(uname -r) 
  1. 在官方网站下载 deb 格式的驱动并安装 strongtz/i915-sriov-dkms
sudo dpkg -i i915-sriov-dkms_*_amd64.deb

这一步时间可能比较长,装好之后重启系统。

飞牛 OS

装好系统后在应用商店安装 SR-IOV 驱动,不要通过官方的方法安装。