Bad transcoding performance using Intel UHD 770 - fl0wfr - 2025-03-19
Hi,
I just change my hardware, from an Intel Xeon E-2186G (iGPU is an Intel UHD Graphics P630) to an Intel Core i9 14900T (iGPU is an Intel UHD Graphics 770), configured as followed:- Host OS is Rocky Linux 9.5 x86_64
- Kernel version is 6.13.7-1.el9.elrepo.x86_64
- Jellyfin running in compose on Docker CE
- GUC is enabled for LP encoding mode (but same issue when not using low power encoding)
- I'm using RAM FS for storing transcoding temporary files
I'm unable to get a proper transcoding of 4K videos, which worked without an issue before. Did I miss something? I read that an Intel UHD 770 can handle several 4K transcoding at the same time, but I'm not even able to get a single one working, that's strange. Any help would be greatly appreciated 
Docker compose:
Code: jellyfin:
image: docker.io/jellyfin/jellyfin
container_name: jellyfin
hostname: jellyfin
restart: unless-stopped
user: 1000:1000
environment:
- JELLYFIN_PublishedServerUrl=http://jellyfin.domain.tld
volumes:
- /docker/Jellyfin/config:/config
- /docker/Jellyfin/cache:/cache
- /volumes/data:/media/data
- /var/transcoding-temp:/transcoding-temp
devices:
- /dev/dri:/dev/dri
group_add:
- "998" # Add render group
ports:
- 8096:8096
networks:
- jellyfin
My transcoding settings:
Modules loaded:
Code: i915 4526080 2
i2c_algo_bit 12288 1 i915
cec 81920 1 i915
drm_buddy 24576 1 i915
ttm 102400 1 i915
intel_gtt 24576 1 i915
drm_display_helper 262144 1 i915
drm_kms_helper 245760 2 drm_display_helper,i915
drm 790528 6 drm_kms_helper,drm_display_helper,drm_buddy,i915,ttm
video 81920 1 i915
i915 module comes from the installed kernel:
Code: # modinfo i915
filename: /lib/modules/6.13.7-1.el9.elrepo.x86_64/updates/i915.ko.xz
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
author: Tungsten Graphics, Inc.
Before using transcoding:
When a transcoding is started:
ffmpeg process when started:
Code: flow 606800 13.3 0.3 2454412 249948 ? Sl 09:23 0:01 /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v hevc_qsv -i file:/media/data/Series/episode.mkv -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 hevc_qsv -tag:v:0 hvc1 -low_power 1 -preset veryfast -b:v 14616000 -maxrate 14616000 -bufsize 29232000 -profile:v:0 main -level 50 -g:v:0 72 -keyint_min:v:0 72 -vf setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,vpp_qsv=format=nv12 -codec:a:0 libfdk_aac -ac 2 -ab 256000 -af volume=2 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename 7a4fe63ae03c0701e982fcf17b2c4cee-1.mp4 -start_number 0 -hls_segment_filename /transcoding-temp/jellyfin/7a4fe63ae03c0701e982fcf17b2c4cee%d.mp4 -hls_playlist_type vod -hls_list_size 0 -y /transcoding-temp/jellyfin/7a4fe63ae03c0701e982fcf17b2c4cee.m3u8
Jellyfin logs:
Code: [2025-03-19 09:24:55.426 +01:00] [INF] [20] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "flow". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2025-03-19 09:24:55.426 +01:00] [INF] [20] Jellyfin.Api.Helpers.MediaInfoHelper: RemoteClientBitrateLimit: 14000000, RemoteIP: "192.168.0.1", IsInLocalNetwork: True
[2025-03-19 09:24:55.783 +01:00] [INF] [130] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2025-03-19 09:24:55.784 +01:00] [INF] [130] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -f matroska -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v hevc_qsv -i file:\"/media/data/Series/episode.mkv\" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 hevc_qsv -tag:v:0 hvc1 -low_power 1 -preset veryfast -b:v 14616000 -maxrate 14616000 -bufsize 29232000 -profile:v:0 main -level 50 -g:v:0 72 -keyint_min:v:0 72 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,vpp_qsv=format=nv12\" -codec:a:0 libfdk_aac -ac 2 -ab 256000 -af \"volume=2\" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename \"0ba4000c84531c0cb99ef80f5aae8fe5-1.mp4\" -start_number 0 -hls_segment_filename \"/transcoding-temp/jellyfin/0ba4000c84531c0cb99ef80f5aae8fe5%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/transcoding-temp/jellyfin/0ba4000c84531c0cb99ef80f5aae8fe5.m3u8\""
[2025-03-19 09:25:05.790 +01:00] [INF] [130] MediaBrowser.Controller.MediaEncoding.TranscodingJob: Stopping ffmpeg process with q command for "/transcoding-temp/jellyfin/0ba4000c84531c0cb99ef80f5aae8fe5.m3u8"
[2025-03-19 09:25:05.792 +01:00] [ERR] [109] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: "A task was canceled". URL "GET" "/videos/73e730ba-cd8c-528d-cf42-64336206b15e/hls1/main/-1.mp4".
[2025-03-19 09:25:07.610 +01:00] [INF] [130] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
[2025-03-19 09:25:07.610 +01:00] [INF] [130] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2025-03-19 09:25:07.610 +01:00] [INF] [130] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -ss 00:06:18.000 -noaccurate_seek -f matroska -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v hevc_qsv -i file:\"/media/data/Series/episode.mkv\" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 hevc_qsv -tag:v:0 hvc1 -low_power 1 -preset veryfast -b:v 14616000 -maxrate 14616000 -bufsize 29232000 -profile:v:0 main -level 50 -g:v:0 72 -keyint_min:v:0 72 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,vpp_qsv=format=nv12\" -codec:a:0 libfdk_aac -ac 2 -ab 256000 -af \"volume=2\" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename \"0ba4000c84531c0cb99ef80f5aae8fe5-1.mp4\" -start_number 126 -hls_segment_filename \"/transcoding-temp/jellyfin/0ba4000c84531c0cb99ef80f5aae8fe5%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/transcoding-temp/jellyfin/0ba4000c84531c0cb99ef80f5aae8fe5.m3u8\""
[2025-03-19 09:25:24.554 +01:00] [INF] [109] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.UserSyncNotification: Started user data sync
[2025-03-19 09:25:24.647 +01:00] [INF] [109] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.UserSyncNotification: User Data Sync: User "flow" ("205dc7b9aecf4a728811ef76c2c783f9") posted 2 updates
[2025-03-19 09:25:24.647 +01:00] [INF] [109] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.UserSyncNotification: Finished user data sync, taking "00:00:00.0925659"
[2025-03-19 09:25:33.261 +01:00] [INF] [111] MediaBrowser.Controller.MediaEncoding.TranscodingJob: Stopping ffmpeg process with q command for "/transcoding-temp/jellyfin/0ba4000c84531c0cb99ef80f5aae8fe5.m3u8"
ffmpeg logs:
ffmpeg.txt (Size: 81.92 KB / Downloads: 36)
RE: Bad transcoding performance using Intel UHD 770 - TheDreadPirate - 2025-03-19
What is the output of this command?
Code: sudo dmesg | grep i915
Unrelated, you should check "Enable tone mapping" and uncheck VPP tone mapping. The OpenCL based tone mapping produces better results than VPP tone mapping.
RE: Bad transcoding performance using Intel UHD 770 - nyanmisaka - 2025-03-19
This appears to be a slowdown caused by I/O. You can try the following command to rule out the problem.
Test QSV decoder:
Code: /usr/lib/jellyfin-ffmpeg/ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v hevc_qsv -i file:"/media/data/Series/episode.mkv" -an -sn -f null -
Test QSV encoder:
Code: /usr/lib/jellyfin-ffmpeg/ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -f lavfi -i nullsrc=s=3840x1606,format=nv12 -c:v hevc_qsv -low_power 1 -preset veryfast -b:v 14616000 -maxrate 14616000 -bufsize 29232000 -profile:v main -level 50 -g:v 72 -keyint_min:v 72 -f null -
RE: Bad transcoding performance using Intel UHD 770 - fl0wfr - 2025-03-19
(2025-03-19, 12:42 PM)TheDreadPirate Wrote: What is the output of this command?
Code: sudo dmesg | grep i915
Unrelated, you should check "Enable tone mapping" and uncheck VPP tone mapping. The OpenCL based tone mapping produces better results than VPP tone mapping.
Hi, there it is:
Code: [ 1.425485] i915 0000:00:02.0: [drm] VT-d active for gfx access
[ 1.425543] i915 0000:00:02.0: vgaarb: deactivate vga console
[ 1.425582] i915 0000:00:02.0: [drm] Using Transparent Hugepages
[ 1.426222] i915 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 1.427763] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adls_dmc_ver2_01.bin (v2.1)
[ 2.384219] i915 0000:00:02.0: [drm] [ENCODER:235:DDI A/PHY A] failed to retrieve link info, disabling eDP
[ 2.558032] i915 0000:00:02.0: [drm] GT0: GuC firmware i915/tgl_guc_70.bin version 70.36.0
[ 2.558035] i915 0000:00:02.0: [drm] GT0: HuC firmware i915/tgl_huc.bin version 7.9.3
[ 2.561053] i915 0000:00:02.0: [drm] GT0: HuC: authenticated for all workloads
[ 2.561804] i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
[ 2.561805] i915 0000:00:02.0: [drm] GT0: GUC: SLPC enabled
[ 2.562241] i915 0000:00:02.0: [drm] GT0: GUC: RC enabled
[ 2.594121] [drm] Initialized i915 1.6.0 20230929 for 0000:00:02.0 on minor 0
[ 2.658459] fbcon: i915drmfb (fb0) is primary device
[ 2.728794] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device
[ 5.210384] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
(2025-03-19, 03:03 PM)nyanmisaka Wrote: This appears to be a slowdown caused by I/O. You can try the following command to rule out the problem.
Test QSV decoder:
Code: /usr/lib/jellyfin-ffmpeg/ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v hevc_qsv -i file:"/media/data/Series/episode.mkv" -an -sn -f null -
Test QSV encoder:
Code: /usr/lib/jellyfin-ffmpeg/ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -f lavfi -i nullsrc=s=3840x1606,format=nv12 -c:v hevc_qsv -low_power 1 -preset veryfast -b:v 14616000 -maxrate 14616000 -bufsize 29232000 -profile:v main -level 50 -g:v 72 -keyint_min:v 72 -f null -
I don't see any bottleneck:
Code: Linux 5.14.0-503.31.1.el9_5.x86_64 (bunker.fl0w.lan) 03/19/2025 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.05 0.31 2.47 1.35 0.00 90.80
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
dm-0 6.42 296.53 21.10 0.00 350512 24945 0
dm-1 5.33 113.72 59.84 0.00 134418 70737 0
dm-2 386.78 9975.27 2180.59 0.00 11791366 2577590 0
md125 0.40 4.84 0.00 0.00 5716 0 0
md126 371.50 10387.48 2261.54 0.00 12278624 2673273 0
md127 0.20 3.71 0.01 0.00 4383 14 0
nvme0n1 340.35 7197.99 2275.79 0.00 8508459 2690122 0
nvme1n1 196.54 3200.39 2275.79 0.00 3783051 2690122 0
sda 0.62 9.24 1.73 0.00 10920 2048 0
sdb 1.61 519.25 1.73 0.00 613784 2048 0
sdc 1.85 563.72 1.73 0.00 666356 2048 0
sdd 3.01 1848.08 1.73 0.00 2184536 2048 0
sde 1.97 714.93 1.81 0.00 845084 2136 0
sdf 2.17 1269.86 1.73 0.00 1501052 2048 0
sdg 0.71 15.63 1.86 0.00 18472 2204 0
sdh 0.74 10.28 1.73 0.00 12156 2048 0
sdi 0.64 38.01 1.86 0.00 44928 2204 0
sdj 1.26 252.45 2.14 0.00 298408 2532 0
But yeah, not very quick...
Code: frame= 5386 fps= 86 q=-0.0 Lsize=N/A time=00:03:44.68 bitrate=N/A speed=3.58x
Code: frame= 650 fps= 27 q=-0.0 size=N/A time=00:00:25.84 bitrate=N/A speed=1.08x
RE: Bad transcoding performance using Intel UHD 770 - nyanmisaka - 2025-03-20
Linux 5.14.0-503.31.1.el9_5.x86_64
I think I know why. Linux 5.14 kernel is too old for AlderLake-S iGPU. Check these links and you will find that the minimum requirement is 5.17.
https://github.com/intel/media-driver#known-issues-and-limitations
https://jellyfin.org/docs/general/administration/hardware-acceleration/known-issues#intel-on-linux
RE: Bad transcoding performance using Intel UHD 770 - fl0wfr - 2025-03-20
I finally found the cause of the issue, I set the BIOS CPU C-States to C10, it may not be properly implemented in the BIOS.
After setting it to Cpu Default, I get this result:
Decoding (VCS at 50% in intel_gpu-top):
Code: frame=10207 fps=295 q=-0.0 Lsize=N/A time=00:07:05.75 bitrate=N/A speed=12.3x
Encoding (VCS at 50% in intel_gpu_top):
Code: frame= 2413 fps=109 q=-0.0 Lsize=N/A time=00:01:36.36 bitrate=N/A speed=4.35x
I guess this matches with the ability to transcode 4 4K videos simultaneously.
Thanks for your help!
RE: Bad transcoding performance using Intel UHD 770 - fl0wfr - 2025-03-20
(2025-03-20, 11:39 AM)nyanmisaka Wrote:
Linux 5.14.0-503.31.1.el9_5.x86_64
I think I know why. Linux 5.14 kernel is too old for AlderLake-S iGPU. Check these links and you will find that the minimum requirement is 5.17.
https://github.com/intel/media-driver#known-issues-and-limitations
https://jellyfin.org/docs/general/administration/hardware-acceleration/known-issues#intel-on-linux
i9 14900T is a Raptor Lake, based on TGLx platform (TGL: Tiger Lake, RKL: Rocket Lake, ADL-S/P/N: Alder Lake, RPL-S/P: Raptor Lake), kernel support since 5.9
RE: Bad transcoding performance using Intel UHD 770 - nyanmisaka - 2025-03-20
Glad you solved the problem. 5.14 seems to be the linux version of your storage server, while the linux version of the transcoding server is 6.13.7.
> i9 14900T is a Raptor Lake, based on TGLx platform (TGL: Tiger Lake, RKL: Rocket Lake, ADL-S/P/N: Alder Lake, RPL-S/P: Raptor Lake), kernel support since 5.9
Even though they share a lot of things, there are still differences in transcoding, such as HuC firmware and GuC submitting, which are disabled on Tiger Lake. They are gradually being enabled on Alder Lake and Raptor Lake, and these are two different code paths. I have seen failures due to it.
|