PVE下使用(PCT)LXC如何搭建媒体服务器并正确开启硬件加速

跑在什么什么上面好呢?
我的首选当然是创建一个PVE里的CT来跑了,这种轻量级虚拟化的好处有如下几点:
1.占用存储空间较少 (由于我这台机器存储空间比较紧张,所以必然选择这种方式啦).
2.性能损耗几乎为0,与物理机拥有相同的性能.
3.当然还有就是搭建方便快捷啦,turnkeylinux上面有海量的模板,几乎你需要的在上面都能找到(例如docker plex jellyfin emby 等等..).


总结一下就是,性能好占用少还方便!! 香~.

服务器程序我选择的是Jellyfin,听说硬件转码是免费的.

搭建过程非常简单无脑:
1.下载模板:
模板可能要使用科学的方式获取,大家应该都懂。
  或者也可以自行网上搜索,替换一下国内镜像.
  否则下载速度感人.

 
2.创建CT.
第一步记得要把无特权容器的选项去掉,否则会创建不成功.

模板选择我们刚刚下载好的mediaserve

接下来的步骤就按照自己的需求分配CPU 内存等资源就可以了.
3.配置mediaserver
    由于是CT,所以这一步非常之简单,开机后输入用户名密码,直接就会跳出设置向导,按照提示设置smb密码,jellyfin等等的密码即可.结束后会提示你各个后台的地址,打开浏览器访问即可
    

搭建完成后,兴致冲冲的放了一段DOOM的演示视频(1080p 40m比特率)的视频测试转码性能.
但是发现开启转码后,CPU占用率直接飙升到95%,这必须得折腾一下硬件加速了:

4.配置CT渲染设备节点,开启硬件加速:  默认情况下.LXC并不会自动映射dev目录下的设备节点文件.所以我们首先需要修改配置文件,使LXC自动映射dev下的设备文件.
首先我们需要在host(pve) shell中确认一下host设备文件的情况,标红的参数我们需要用到:


root@pve:~# ls -l /dev/dri/
total 0
drwxr-xr-x 2 root root         80 Apr 20 12:24 by-path
crw-rw—- 1 root video  226,   0 Apr 20 12:24 card0
crw-rw—- 1 root render 226, 128 Apr 20 12:24 renderD128


video  id: 226,   0
render id:226, 128
修改LXC的配置文件,路径为/etc/pve/lxc/{你的CT ID}.conf.

例如我的CT ID是100,所以对应的文件是/etc/pve/lxc/100.conf
使用编辑器打开该文件进行编辑:

vim /etc/pve/lxc/100.conf


将以下内容添加到文件末尾(将对应的id替换成自己的):
lxc.cgroup.devices.allow = c 226:0 rwm
lxc.cgroup.devices.allow = c 226:128 rwm
lxc.autodev: 1
lxc.hook.autodev:/var/lib/lxc/100/render_device_hook.sh

CT启动的时候,会执行lxc.hook.autodev里的内容,我们需要手动创建对应的节点文件
还是一样,使用编辑器创建并打开脚本文件:

  1. vim /var/lib/lxc/100/render_device_hook.sh

复制代码

将以下内容添加到文件中(一样,还是要替换成自己的设备id):


mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128

最后设置文件权限:

  1. chmod 755 /var/lib/lxc/100/render_device_hook.sh

复制代码

这样,我们CT的配置就修改好了,现在去启动CT吧.
启动后,我们还需要在CT里安装VA的驱动文件,以下命令均在CT内执行:


apt-get install i965-va-driver
apt-get install vainfo

安装完成后执行vainfo命令,如果打印如下类似信息就表明硬件转码已经可用了:


root@mediaserver ~# vainfo
error: XDG_RUNTIME_DIR not set in the environment.
error: can’t connect to X server!
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Kabylake – 1.7.3
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple            :        VAEntrypointVLD
VAProfileMPEG2Simple            :        VAEntrypointEncSlice
VAProfileMPEG2Main              :        VAEntrypointVLD
VAProfileMPEG2Main              :        VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline:        VAEntrypointVLD
VAProfileH264ConstrainedBaseline:        VAEntrypointEncSlice
VAProfileH264Main               :        VAEntrypointVLD
VAProfileH264Main               :        VAEntrypointEncSlice
VAProfileH264High               :        VAEntrypointVLD
VAProfileH264High               :        VAEntrypointEncSlice
VAProfileH264MultiviewHigh      :        VAEntrypointVLD
VAProfileH264MultiviewHigh      :        VAEntrypointEncSlice
VAProfileH264StereoHigh         :        VAEntrypointVLD
VAProfileH264StereoHigh         :        VAEntrypointEncSlice
VAProfileVC1Simple              :        VAEntrypointVLD
VAProfileVC1Main                :        VAEntrypointVLD
VAProfileVC1Advanced            :        VAEntrypointVLD
VAProfileNone                   :        VAEntrypointVideoProc
VAProfileJPEGBaseline           :        VAEntrypointVLD
VAProfileJPEGBaseline           :        VAEntrypointEncPicture
VAProfileVP8Version0_3          :        VAEntrypointVLD
VAProfileVP8Version0_3          :        VAEntrypointEncSlice
VAProfileHEVCMain               :        VAEntrypointVLD
VAProfileHEVCMain               :        VAEntrypointEncSlice
VAProfileHEVCMain10             :        VAEntrypointVLD
VAProfileHEVCMain10             :        VAEntrypointEncSlice
VAProfileVP9Profile0            :        VAEntrypointVLD
VAProfileVP9Profile0            :        VAEntrypointEncSlice
VAProfileVP9Profile2            :        VAEntrypointVLD

现在再到Jellyfin的控制台,将转码的硬件加速设置为VA API,在转码再看看CPU占用以及拖动视频的相应速度~:

Enjoy….

发表回复