需要调用核显的服务-SR-IOV 与 LXC 核显共享
tags: NAS需要调用核显的服务-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
首先确保核显驱动正常:
- 如果能够看到 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)
- 查看驱动
可以看到 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 注意事项:
- CPU 类型选 Host
- 机型选 Q35
- 系统安装完成后,显示选为“无”
- 直通显卡时,勾选主 GPU、高级功能-PCIE-Express;不能选择 PCIE 号末尾为 0 的物理核显,也不能勾选所有功能。
进入 Windows 系统后,直接安装微软官方显卡驱动即可,如果设备管理器报错 43,则认真对比上述 4 点。
安装完成后,不要再用 VNC 访问 Windows 了,应该用远程桌面进行访问。SR-IOV 的核显没有显示功能,只有计算功能(后来听说可以显示,但不建议折腾)。

Debian 系 Linux
SR-IOV 官方只支持了 Debian 系和 Arch 系,对于 Debian12/13 来说,安装流程比较固定
- 更新系统,安装 sudo,并将用户加入 sudo 组
apt update
apt install sudo
sudo usermod -aG sudo {username}
- 修改 grub 文件
sudo vim /etc/default/grub
添加启动参数
i915.enable_guc=3
sudo update-grub 更新 grub
- 安装内核文件
sudo apt install -y dkms vainfo intel-media-va-driver wget firmware-linux linux-headers-$(uname -r)
- 在官方网站下载 deb 格式的驱动并安装 strongtz/i915-sriov-dkms
sudo dpkg -i i915-sriov-dkms_*_amd64.deb
这一步时间可能比较长,装好之后重启系统。
飞牛 OS
装好系统后在应用商店安装 SR-IOV 驱动,不要通过官方的方法安装。