N5095使用经验分享 Step By Step (一 核显直通jellyfin)
1. 前言
前面写的折腾日记系列随心所欲的写了写,都只涉及了想法和思路。没有基础的人可能很难get到我说的点,也没办法参照着使用起来。因此想另外写一个Step By Step系列,基本遵循可操作的原则。
因为不是软路由的专家,所以此系列也不敢称为教程,只做是经验分享。
废话说完了,这篇主要是介绍一下N5095在PVE上如何进行核显直通,并进行硬件解码。
2. PVE核显直通配置
2.1 更改grub
修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX_DEFAULT中增加下面的参数:
intel_iommu=on video=efifb:off
2.2 更新grub
执行 update-grub命令,可以看到下面的信息。
2.3 配置开机加载vfio模块
编辑/etc/modules,写入下面的模块名
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
2.4 配置禁止加载显卡驱动
编辑/etc/modprobe.d/pve-blacklist.conf文件,增加下面的内容
blacklist i915
2.5 更新initrd
执行update-initramfs -u命令
2.6 重启PVE
3. 创建虚拟机
这里以创建Archlinux为例说明(5.15左右的版本内核存在一个bug会导致核显无法使用,每个发行版的内核版本的差异还是有一些的,可能在其他版本的内核上也会遇到这个bug)
3.1 下载archlinux虚拟机的镜像
从arch官方下载了镜像,地址如下:
https://gitlab.archlinux.org/archlinux/arch-boxes/-/jobs/63736/artifacts/browse/output
选择basic就好了。
3.2 把镜像拷贝到PVE中
命令可以参考下面的,其中192.168.50.3是我的PVE地址
scp Arch-Linux-x86_64-basic-20220528.58196.qcow2 root@192.168.50.3:/root/
3.3 创建虚拟机
在PVE中创建一个新的虚拟机,不需要带磁盘,相关配置如下
cpu按需求选择就好了。习惯性的选上了aes,默认应该也会启用
memory按需选择就好了。我喜欢把balloon去掉。
network 也是按需选择
一个不带磁盘的虚拟机就创建好了。
3.4 导入磁盘
把之前下载的archlinux的镜像导入到虚拟机中。看一下上一步创建的虚拟机id,和需要使用的存储。这里虚拟机id为103,存储为local-lvm
执行下面的命令导入磁盘
qm importdisk 103 Arch-Linux-x86_64-basic-20220528.58196.qcow2 local-lvm
三个参数分别是 虚拟机id,下载的镜像名,导入的存储名
3.5 启用导入的磁盘
3.6 设置从导入的磁盘启动
钩上,再拖动到第一个
3.7 添加核显
这里是00:02.0。如果跟我设备不一样的话,需要执行命令查看一下 lspci | grep VGA
3.8 启动虚拟机
不出意外的话,就可以进来了。外面已经配置完成了,到里面了。用户名:arch 密码:arch
3.9 进入虚拟机
查看一下ip,并开启sshd服务,命令如下(通过ssh连进去可以拷贝)。
ip a
sudo systemctl start sshd
上面在启动sshd服务的时候太慢了,我停了重启了一次,直接等也是可以的。
不出意外的话,就已经可以看到显卡的节点了。
3.10 设置软件源
切换到root用户,设置ustc源。顺便把vim也装上。命令如下(注意:下面两个$前面都需要一个反斜杠,这里没办法打出来)
sudo su
echo "Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch" > /etc/pacman.d/mirrorlist
pacman -Sy
pacman -S vim
3.11 设置核显驱动参数
设置guc,安装核显的firmware,然后重启。命令如下:
echo “options i915 enable_guc=3” > /etc/modprobe.d/i915.conf
pacman -S linux-firmware
reboot
启动之后可以看到guc,huc启动成功的日志
虚拟机的配置到这里就完成了。
4. jellyfin
不知道多少人是因为jellyfin才需要硬解的
4.1 安装启动docker
sudo pacman -Sy docker docker-compose
sudo systemctl start docker
4.2 安装jellyfin
创建个目录,新建docker-compose.yml,把下面的内容拷贝进去。需要自定义目录或者端口的话,需要自己改一下。
version: “2.1”
services:
jellyfin:
image: nyanmisaka/jellyfin
container_name: jellyfin
volumes:
- /home/cfs/jellyfin/config:/config
- /home/cfs/jellyfin/tvseries:/data/tvshows
- /home/cfs/jellyfin/movies:/data/movies
ports:
- 8096:8096
- 8920:8920 #optional
devices:
- /dev/dri:/dev/dri #optional
restart: unless-stopped
执行下面的命令安装jellyfin
sudo docker-compose up -d
jellyfin已经安装完成了
4.3 测试jellyfin硬解
进入到jellyfin的容器中,找到ffmpeg。相关命令如下
sudo docker exec -it jellyfin /bin/bash
硬解使用的是ffmpeg的qsv编解码器
安装一个wget,下载一个测试的视频
apt update && apt install wget
视频可以自己随便找一个
wget https://f7881eaf9ab44d-a.akamaihd.net/files/media_publication/16/wsb_B_02_r720P.mp4
测试命令,好像也不是很快,N5105应该会快很多
/usr/lib/jellyfin-ffmpeg/ffmpeg -i wsb_B_02_r720P.mp4 -vcodec hevc_qsv out.mp4
对比一下软件的编解码(惨不忍睹)
/usr/lib/jellyfin-ffmpeg/ffmpeg -i wsb_B_02_r720P.mp4 -vcodec libx264 out.mp4
jellyfin已经可以进行硬解了,其他配置就不说了。
5. 遗留问题
vbios一直报着错误,还不清楚原因和影响,不过好像并不影响使用
6. 后记
11代的核显直通,别人做过很多的尝试了。可以参考一下,尤其是windows。此处删除一个链接
GVT-g在八代以后的CPU中就已经不支持了,SR-IOV是用了替换GVT-g的技术。SR-IOV之前应该只用在了网卡上。
SR-IOV的性能比GVT-g应该会强一些的,但遗憾的是目前linux上还没有支持的方案。在intel的社区中,官方回复过,windows上的驱动是支持的,linux上的支持是受限的,依赖厂商的支持。
其实折腾了半天,我根本用不上jellyfin的硬解,甚至用不上jellyfin……
好吧,一切都是为了折腾……
另外,忘了说一件事。PVE现在是我的生产环境,所以没有重装来验证配置步骤,可能会出现有问题的地方。
再吐槽一句,排版太复杂了,各种特殊字符,格式也很难搞。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
pass2pass
校验提示文案
Hi王蕴
校验提示文案
cosz
校验提示文案
ChampionNB
校验提示文案
Dr_Orwell
校验提示文案
隔壁老司机-_-
校验提示文案
Dr_Orwell
校验提示文案
隔壁老司机-_-
校验提示文案
ChampionNB
校验提示文案
cosz
校验提示文案
pass2pass
校验提示文案
Hi王蕴
校验提示文案