Hi! I'm fairly new to the hobby, and a few days ago I've built a server using only used pc hardware. The hardware in question:
- CPU: Intel i3-4170 (4 threads @ 3.70GHz)
- RAM: 8GB DDR3
- GPU: NVIDIA GTX 1050 2GB (NVENC working and confirmed with nvidia-smi)
- Storage: 2x 1TB HDD 7200rpm (one for OS/LXC, one for media)
I'm running Jellyfin in a Docker container inside an unprivileged LXC container on Proxmox (Debian 13 Trixie), and I'm experiencing severe IO delay whenever Jellyfin transcodes a file. Looking for advice on whether this is a hardware limitation or a configuration issue.
Software stack:
- Proxmox VE 9.1.9 on kernel 6.14.11-7-pve
- Unprivileged LXC container running Debian 12
- NVIDIA driver 550.163.01 with full GPU passthrough to LXC
- nvidia-container-toolkit installed, Docker runtime configured for NVIDIA
The problem is when Jellyfin transcodes a file (even for a single stream), IO delay spikes to 95%+ and load average hits 35+. The specific file causing issues is a 1080p HEVC + Dolby Vision Profile 8.1 (HDR10) WEBRip with Hungarian AC3 5.1 audio. Jellyfin cannot Direct Play this and falls back to transcoding.
What iotop shows during transcoding:
ffmpeg -analyzeduration 200M -probesize 1G -ss [timestamp]
-noaccurate_seek -fflags +genpt+cont -y /dev/shm/jellyfin-transcode/[file]
Current Jellyfin transcoding setup:
- NVENC hardware acceleration enabled
- Transcode temp directory: /dev/shm/jellyfin-transcode (RAM disk)
- nvidia-smi confirms ffmpeg process uses GPU during transcoding (274MiB VRAM, 6-14% GPU util)
What we've already done:
- NVENC confirmed working (nvidia-smi shows ffmpeg process on GPU)
- Transcode cache moved to RAM (/dev/shm) to avoid HDD write bottleneck
- Tdarr set up for automated DTS/TrueHD → EAC3 conversion (scheduled overnight)
- Radarr/Sonarr configured to avoid DTS/TrueHD/DoVi releases going forward
My main question is whether the extreme IO delay (95%+) during transcoding is expected even when NVENC is active and the transcode cache is on a RAM disk. The HDD shouldn't be involved in writing since temp files go to /dev/shm, but reads from the source file seem to be killing IO.
Is the -probesize 1G -analyzeduration 200M in the ffmpeg command normal for Jellyfin? That seems like it would cause massive source file reads on HDD.
I can provide the transcoding log snippet if needed. Thanks in advance!