N5105 Jellyfin 硬件加速
先说结论,显卡受限于驱动原因,暂时有Ubuntu 21.04+ 以上系统可以实现,直通Windows 10绝无可能(2022/05/19)。
回到主题,最近流行各种小主机做软路由、家庭影音、Nas等系统。这些主机的CPU主要有J4125(10gen)、N5105(11gen)、N6005,其中前两款为Intel® Celeron®,后面这个款为Intel® Pentium®,10代采用14nm工艺,11代采用10nm工艺,N5105和N6005相对J4125有不错的性能提升。在性能相差不大的情况N5105要经济一些,这也是很多人被坑的主要原因,N5105有各种直通方案的折腾。
重点,本人对硬件其实不熟悉,通过几番折腾紧紧对Intel低功耗CPU有个粗浅的了解,错误地方就当放屁吧。
一、不折腾,怎么最简单直直通到虚拟机?
不折腾
翻遍了中文互联网社区,除了部分LXC方案最简单而且是可靠的,其他大部分不靠谱。大部分方案或者勉强叫教程,最后没有验证过程,按照实施步骤基本可以认定最后是失败的。尤其是直通Win10虚拟机,不可能成功,除非他自己写了驱动。
1. 缘起:Jellyfin硬件加速。
Jellyfin最为一套可靠的穷人家庭影音系统,做到了一个长视频网站所有该做的功能,视频不是从存储直出要经过一次转码(好像也有直出方案,稍后看下文档补充),甚至还有各种码率的选择。
众所周知转码这活CPU也能干,但我们这次专门说的是N5105。做为穷人家庭服务器,机器上必然有个OpwnWRT+NAS+Jeellyfin,我们也不好把算力用在转码上。毕竟这个CPU上还有个集成显卡不是吗?用起来,加速!
Jellyfin 转码设置支持如下几如下几种加速方案:
2. 方案选择
- Intel QuickSync(QSV): 当前Linux环境下需要Intel提供的驱动,编解码支持比较差,具体可参看 https://github.com/intel/media-driver , N5105的显卡代号为
JasperLake [UHD Graphics]
。 - VA-API: 紧支持Intel iGPUs、AMD GPU。
考虑到QSV方案里,Intel® iGPUs支持比较差,我们选择VA-API,当然这也是最简单的方案。
3. 实施
1) 开启Huc和GuC
这不是必须的操作, 只有HEVC硬解,开启低电压解码器需要本单元操作。
HuC
是Intel显卡的HEVC/H.265微处理器,如果需要HEVC的硬解功能才需要开启。9代以后的intel CPU支持此功能。GuC
图形微控制器(Graphics micro (μ) Controller),控制上下提交,电源关闭等方面控制功能。开启低电压转码模式必须要开启。
PVE7.x 某些版本采用的内核是是5.15.x,这些版本的内核开启GuC可能会失败(BUG),所以需要更换内核。
内核升级
升级内核到5.19 #确认内核版本,如果是5.15 可以升级内核
uname -a
#查看可安装内核版本
apt search pve-kernel|grep pve-kernel-
#这里建议安装稳定版内核
apt install pve-kernel-5.19.17-2-pve/stable
#选择启动内核版本
proxmox-boot-tool kernel pin 5.19.17-2-pve
#验证内核状态
root@pn41:~# /usr/sbin/proxmox-boot-tool kernel list
Manually selected kernels:
None.
Automatically selected kernels:
5.15.102-1-pve
5.19.17-2-pve
Pinned kernel:
5.19.17-2-pve开始GuC
/etc/modprobe.d/i915.conf echo "options i915 enable_guc=3" >> nano /etc/modprobe.d/i915.conf
如果非N5105可参照下图确认guc支持情况,3代表同时开始GuC和HuC。更多可参照下文
Enable GuC
链接。重启验证GuC状态,如果没有成功信息,需要更新固件 https://archlinux.org/packages/?name=linux-firmware
dmesg | grep -iE "guc|huc"
[ 5.767306] Setting dangerous option enable_guc - tainting kernel
[ 6.014137] i915 0000:00:02.0: [drm] GuC firmware i915/ehl_guc_70.1.1.bin version 70.1
[ 6.014143] i915 0000:00:02.0: [drm] HuC firmware i915/ehl_huc_9.0.0.bin version 9.0
[ 6.029614] i915 0000:00:02.0: [drm] HuC authenticated
[ 6.030103] i915 0000:00:02.0: [drm] GuC submission enabled
[ 6.030183] i915 0000:00:02.0: [drm] GuC SLPC disabled
2) 检查HOST是否成功驱动显卡。
|
上面就是失败案例,原因是尝试虚拟化开启了,解决步骤如下:
/etc/modprobe.d/pve-blacklist.conf
注释掉blacklist i915
,当然如果不需要其他设备直通可以全部注释掉。/etc/default/grub
去掉video=efifb:off,vesafb:off
/etc/modprobe.d/vfio.conf
去掉网卡,这个需要进一步获取
|
验证显卡是否正确驱动,并开启,如果没有,再看看是不是漏了啥。
|
3) 使用LXC安装Jellyfin
LXC是RedHat?发起的容器化技术。与云原生领域常用的Docker、Podman类似,都是通过cgroups ns实现了进程隔离;保持相对独立的运行环境,做到了进程隔离,资源相对隔离。
本质上LUX容器还是在HOST上跑的,所以能直接使用硬件。
下面开始Jellyfin调用显卡部分操作:
- 安装LXC容器,系统要求Ubuntu不能低于21:05,Debain与PVE版本一致应该都没问题,pve7 用的是Debain 11,建议使用Ubuntu 22:04.
- 编辑 lxc 配置文件 /etc/pve/lxc/
.conf
|
3)重启LXC,进入容器验证时候直通
|
哈哈,依旧失败,我们是不是白干了呢?不是,人家都说了嘛jellyfin-ffmpeg version 4.4.1-2 or higher is required
|
如果更新失败,可以去jellyfin网站下载,手动安装一下 https://repo.jellyfin.org/releases/server/ubuntu/versions/jellyfin-ffmpeg/ 。
更新完务必确认一下ffmpeg 版本
|
二、 总结
整片文章其实没有提供真正意义上的直通。次实验机器为一台华硕PN41,真正实现了直通的设备是AX201 Wifi6, N5105核显直通到Win10不能驱动,Linux理论上可以做到虚拟机直通,使用PCI方案,网上尝试直通Win10虚拟机(直通后不能驱动,显卡代码43)的也都是这种方案。另外据称Win11可以直通,希望有老哥尝试一把。
请注意!!!!Kernel5.15 GuC 开启有问题,具体参照⬇️
Kernel BUG
, 其他内核暂无问题。其他问题请参照扩展链接开启 确认GuC开启状态。