Skip to content

Jellyfin Hardwarebeschleunigung mit Proxmox und LXC

Published: at 22:58

Wer keine dedizierte GPU für Jellyfin nutzen möchte, kann mit den LXC Containern von Proxmox die Host Grafikkarte verwenden. Das hat viele Vorteile, Intel-Grafikkarten sind die empfohlenen Grafikkarten von/für Jellyfin und bei den Minisforum PCs eine recht potente Grafikkarte mit an Board. Somit wird eine dedizierte Grafikkarte überflüssig.

Hardware

Vorbereitung

Damit Proxmox und der LXC Container die Hardwarebeschleunigung nutzen können, müssen die Intel Treiber auf dem Proxmox Host installiert werden.

dgpu-docs.intel.com/driver/client/overview.html

  1. Intel Repo auf dem Host hinzufügen
wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
sudo gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg
echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \
sudo tee /etc/apt/sources.list.d/intel-gpu-jammy.list
sudo apt update
  1. Benötigte Pakete installieren
apt install -y \
intel-opencl-icd intel-level-zero-gpu level-zero \
intel-media-va-driver-non-free libmfx1 libmfxgen1 libvpl2 \
libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 libxatracker2 mesa-va-drivers \
mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all vainfo hwinfo clinfo
  1. Nun lassen wir uns den Render auf dem Promxox Host auflisten.
ls - /dev/dri

# Ausgabe
drwxr-xr-x 2 root root          80 Dec 30 13:37 by-path
crw-rw---- 1 root video   226,   0 Dec 30 13:37 card0
crw-rw---- 1 root render  226, 128 Dec 30 13:37 renderD128

Den Render “226” können wir nun an den LXC Container durchreichen.

  1. LXC Container erstellen

Wir erstellen eine neuen LXC Container mit Ubuntu und installieren diesen durch. Nun wird die LXC Konfiguration angepasst und die Grafikkarte angegeben.

nano /etc/pve/lxc/112.conf

# Am Ende der Datei einfügen: 
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

Jellyfin installieren

jellyfin.org/docs/general/installation/linux#repository-automatic

curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

Einstellungen und Codecs im LXC Container prüfen

Wenn alle Einstellungen durchgeführt wurden, prüfen wir mit den intel-gpu-tools ob die Grafikkarte richtig erkannt und genutzt wird. Anschließend lassen wir und die unterstützen Codecs für die Hardwarebeschleunigung anzeigen.

Grafikkarte Auslastung prüfen

Das Tool zeigt die Grafikkarte und die Auslastung beim Rendern an.

intel_gpu_top

Falls dieses nicht installiert ist kann es über apt install intel-gpu-tools installiert werden.

Proxmox Host während des Rendern

Prüfen welche QSV / VA-API Codecs unterstützt werden

sudo /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128

Die ausgegeben Codecs sollten anschließend in Jellyfin hinterlegt werden.

OpenCL runtime prüfen

sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va

Wichtig ist hierbei der Part “function found”, mit dieser Ausgabe ist OpenCL aktiv.

[AVHWDeviceContext @ 0x5623f7ba5ec0] Intel QSV to OpenCL mapping function found (clCreateFromVA_APIMediaSurfaceINTEL).
[AVHWDeviceContext @ 0x5623f7ba5ec0] Intel QSV in OpenCL acquire function found (clEnqueueAcquireVA_APIMediaSurfacesINTEL).
[AVHWDeviceContext @ 0x5623f7ba5ec0] Intel QSV in OpenCL release function found (clEnqueueReleaseVA_APIMediaSurfacesINTEL).

Jellyfin Einstellungen anpassen

Unter: “Einstellungen -> Administration -> Übersicht -> Wiedergabe -> Intel QuickSync (QSV)” aktivieren.

Hardwarebeschleunigung Codecs Einstellen:

Hardwarekodierung, VPP-Tone-Mapping und Tone-Mapping aktiveren

Troubleshooting

  1. Jellyfin könnte kein Mitglied der Render Gruppe sein
sudo usermod -aG render jellyfin
sudo systemctl restart jellyfin
  1. Die Render Gruppe ist nicht auf /dev/dri gesetzt
chown root:render /dev/dri
  1. CPU Pinning: Falls nur die Performance Cores der CPU für den Container genutzt werden sollen kann man die CPU Cores festlegen.
# LXC Container Konfiguration anpassen
nano /etc/pve/lxc/112.conf
# In die Datei am Ende einfügen
lxc.cgroup2.cpuset.cpus: 0-5