PVE7.3 下折腾核显直通以及 EMBY 开启视频硬件转码

硬件环境 j:n6005 主板 NAS

软件环境:Proxmox VE7.3 虚拟机上直通硬盘跑了 truenas scale 22.12.0,开通 samba 共享和 nfs 共享,做为数据存储中心。另外再跑了一个 debian11 用来跑各种应用。nas-tools,qbittorent,emby,ddns-go 这些。因为 emby 不开启硬解,在转码的时候非常占用 cpu 资源,于是有了这一篇折腾笔记。

开启 PVE 虚拟化

1、PVE 的内核开启支持 VD-T 直通的 IOMMU 及相关模块

文件位于:

/etc/default/grub

把原内容中

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet"

改为(我的是 intel 的 cpu,如果你用 amd,把 intel 改成 amd)

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

然后在 ssh 下输入 update-grub2 立即更新 grub;

2、编辑 /etc/modules 模块文件

如果系统没有此文件,则自己建立一个,加上以下代码

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd    

3、 验证是否开启成功

1
dmesg | grep remapping

出现如下例子,则代表成功。

显卡直通

显卡直通需要满足前面所有的配置,同时虚拟机芯片组必须是 q35,BIOS 最好是 UEFI 模式 AMD 的显卡如果给黑苹果使用,则需要小心重启 bug NVIDIA 的显卡如果支持 vGPU 模式,可以配置虚拟 PCI-E 设备给虚拟机使用

1、建立驱动黑名单

编辑 /etc/modprobe.d/pve-blacklist.conf 添加驱动屏蔽列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# This file contains a list of modules which are not supported by Proxmox VE                          2
# nidiafb see bugreport https://bugzilla.proxmox.com/show_bug.cgi?id=701

# Nvidia
blacklist nvidiafb
blacklist nouveau
blacklist nvidia

# AMD
blacklist amdgpu
blacklist radeon

# Intel UHD
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core

options nouveau modeset=0

2、GPU 信息确认
在 ssh 下输入命令 lspci -knn | grep -i -A 2 vga,查看你要直通的显卡

其中 00:01 是代表组名。00:01.0 是代表 00:01 组的第一个设备 laf4:1100 表示厂商 ID: 设备 ID,直接通过 lspci 看的话可以看到音频设备甚至是 USB 设备 这里我因为不需要对当前 PCI-E 设备组再拆分,所以直接略过

如果你需要设置显卡显示设备和音频设备单独直通,需要执行下面语句 让 PCI-E 设备(显卡)由 vfio 驱动程序接管便于直通 如果不需要单独直通,vfio 驱动会在设置直通的时候自动接管 PCI-E 设备,可以不用配置 vfio-pci

1
2
echo "options vfio-pci ids=1234:1111,laf4:1100" > /etc/modprobe.d/vfio.conf
#注意,上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。

更新引导配置

1
update-initramfs -u -k all

重启 PVE

验证 PCI-E 显卡是否被 vfio-pci 驱动,Kernel driver in use: vfio-pci 表示直通驱动成功

1
lspci -knn | grep -i -A 2 vga

虚拟机直通显卡

然后开机,注意:由于显卡已经直通,所以 VNC 查看时,是没有介面的。

此时再 ssh 到 debian 虚拟机上就可以看到直通的显卡了

剩下的就简单了。

用 docker-compose 把 emby 跑起来,我用的是 xinjiawei1 大大的镜像直接 unlockd 了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "2.1"
services:
emby:
# image: linuxserver/emby:latest
image: xinjiawei1/emby_unlockd:4.7.11.0
container_name: emby
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /data/emby/config:/config
- /mnt/video:/data/video
ports:
- 8096:8096
devices:
- /dev/dri:/dev/dri #把显卡映射到容器里
restart: unless-stopped

最后就是成果