Anyone have been able to HW transcode on an Intel NUC 11 (Iris Xe)?

Server Version: 1.21.4.4079-1b7748a7b
Player Version: any

Hey guys.

I bought an Intel NUC 11 Performance kit recently, with the “Tiger Lake” 11th gen Core i7-1165G7 and Iris Xe iGPU (successor of UHD Graphics). This iGPU has really wide Hardware Accelerated video transcoding support and I was expecting this NUC to replace the embedded Plex Media Server of my Nvidia Shield.

Unfortunately, I can’t make it run under Ubuntu Server 20.10 “Groovy”: I ran into strange issues, like fan stopping, overheating, reported to Intel.

I tuned a bit the BIOS to be sure the fan would have enough speed (I have more confidence in my settings than in Intel BIOS legendary reliability) then I decide to return to a Ubuntu LTS distro instead.

I tried Ubuntu Server 20.04 LTS “Focal Fossa”, from the 5.8 generic kernel, to the 5.8 HWE kernel and the 5.10 OEM kernel, with Intel non-free packages from here.

I had bad crashes, like the following one:

[ 2077.553653] i915 0000:00:02.0: [drm] Resetting vcs1 for preemption time out
[ 2077.554371] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2077.555710] i915 0000:00:02.0: [drm] GPU HANG: ecode 12:10:4ab6fff5, in Plex Transcoder [6235]
[ 2077.555712] GPU hangs can indicate a bug anywhere in the entire gfx stack, including userspace.
[ 2077.555713] Please file a _new_ bug report at https://gitlab.freedesktop.org/drm/intel/issues/new.
[ 2077.555714] Please see https://gitlab.freedesktop.org/drm/intel/-/wikis/How-to-file-i915-bugs for details.
[ 2077.555715] drm/i915 developers can then reassign to the right component if it's not a kernel issue.
[ 2077.555715] The GPU crash dump is required to analyze GPU hangs, so please always attach it.
[ 2077.555716] GPU crash dump saved to /sys/class/drm/card0/error
[ 2088.914150] i915 0000:00:02.0: [drm] GPU HANG: ecode 12:10:4ab6fff5, in Plex Transcoder [6235]
[ 2089.015206] i915 0000:00:02.0: [drm] Resetting vcs1 for stopped heartbeat on vcs1
[ 2089.015913] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.016065] i915 0000:00:02.0: [drm] Resetting chip for stopped heartbeat on vcs1
[ 2089.119928] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.120701] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.121996] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.141356] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.142140] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.143438] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.169411] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.170179] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.171445] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.209398] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.210168] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.211440] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.211994] i915 0000:00:02.0: [drm] *ERROR* Failed to reset chip
[ 2089.212098] i915 0000:00:02.0: [drm:add_taint_for_CI [i915]] CI tainted:0x9 by intel_gt_reset+0x221/0x290 [i915]
[ 2089.315925] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.316689] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.317957] i915 0000:00:02.0: [drm] *ERROR* vcs1 reset request timed out: {request: 00000001, RESET_CTL: 00000001}
[ 2089.318539] i915 0000:00:02.0: [drm] Plex Transcoder[6235] context reset due to GPU hang
[ 2090.242782] show_signal_msg: 1 callbacks suppressed
[ 2090.242785] Plex Media Serv[6171]: segfault at 0 ip 0000000000000000 sp 00007f3e90ff0378 error 14 in Plex Media Server[200000+80c000]

I followed all material I found on Intel Website or Plex website to have proper HW support of this iGPU, but I’m running out of ideas.
I put the same packages on a Live Ubuntu Server installation, booted up my Dell XPS 7590 (which has Intel Graphics UHD 630), and Plex HW transcoding works flawless on my laptop.

If someone managed to get the NUC 11 work with Plex, I would be please to know how.
Thanks !

1 Like

That looks interesting… :slight_smile:

May we have the full logs ZIP please ?

It’s not possible to debug from a system error log snippet but does provide good supporting info for the transcoder team.

Sure. There are some reports attached to my conversation with Intel here, generated by their SSU script:

I’m searching how to export any logs from my Plex installation then I’ll post them here.

Settings - Server - Troubleshooting (left pane at the bottom) - Download Logs (main panel)

I hope it’s the right one:
Plex Media Server Logs_2021-02-27_17-40-52.zip (640.7 KB)

Thank you in advance.

Logs are great! need one more piece please

Would you please do the following?

  1. Settings - Server - General - Show Advanced
  2. Turn off Crash Reporting.
  3. Save
  4. Now break it again :smiling_imp:
  5. The crash report file will be sitting in
    /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Crash Reports/<PMS_version_dir>/PLEX MEDIA SERVER/
  6. if you would make a ZIP or tar.gz of the DMP file and attach here, they would like to see it.

Ok.
Before I read your message, I removed the old i965 driver stack, and tried again.
The “vainfo” command reported correct VA support, and Plex reported HW transcoding, but with a strange flicking green band on right of the screen, and a full green screen on the second transcoding session.
The Plex server then crashed, and “vainfo” now just says “Segmentation fault”.

Here the logs of THAT crash (with crash reporting):
Plex Media Server Logs_2021-02-27_18-08-12.zip (797.2 KB)

Let me reboot and try what you asked for.

All these newer processers (-9xxx) and above don’t work well with the i965 stack. That’s why Intel created the Intel Media Driver (iHD)

1 Like

Here you go:
38c7d58e-ab52-6dbd-1dd62668-6601c747.zip (59.5 KB)

And the full logs, if useful:
Plex Media Server Logs_2021-02-27_18-25-14.zip (968.7 KB)

One more thing, here’s vainfo output :

vainfo: VA-API version: 1.10 (libva 2.10.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 21.1.0 (13c0e14)
vainfo: Supported profile and entrypoints
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileNone                   :	VAEntrypointStats
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointFEI
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointFEI
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointFEI
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointFEI
      VAProfileHEVCMain               :	VAEntrypointEncSliceLP
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointEncSliceLP
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile1            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileVP9Profile3            :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointEncSlice
      VAProfileHEVCMain422_10         :	VAEntrypointVLD
      VAProfileHEVCMain422_10         :	VAEntrypointEncSlice
      VAProfileHEVCMain422_12         :	VAEntrypointVLD
      VAProfileHEVCMain422_12         :	VAEntrypointEncSlice
      VAProfileHEVCMain444            :	VAEntrypointVLD
      VAProfileHEVCMain444            :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_10         :	VAEntrypointVLD
      VAProfileHEVCMain444_10         :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_12         :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain10          :	VAEntrypointVLD
      VAProfileHEVCSccMain10          :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain444         :	VAEntrypointVLD
      VAProfileHEVCSccMain444         :	VAEntrypointEncSliceLP
      VAProfileAV1Profile0            :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointEncSliceLP

And with --all parameter:
vainfo_all.txt (93.4 KB)

Yesterday evening I checked again documentation on the i915 driver, and especially the following pages:

  1. drm/i915 Intel GFX Driver — The Linux Kernel documentation
  2. intel/media-driver (github.com)

We can read something I missed on the Intel Media Driver GitHub page:

HuC firmware is necessary for AVC/HEVC/VP9 low power encoding bitrate control, including CBR, VBR, etc. As of now, HuC firmware support is disabled in Linux kernels by default.

Mind that HuC firmware support presents in the following kernels for the specified platforms:

  • TGL: starting from kernel 5.9

So I downloaded all tgl_*.bin files from here to /lib/firmware/i915.
Then I activate the kernel enable_guc parameter as they said :
options i915 enable_guc=2 in /etc/modprobe.d/i915.conf

I restarted kmod, rebuilt grub (maybe unnecessary), then reboot in my 5.10 OEM kernel.
I confirm now I have HuC loaded :

$ sudo dmesg | grep i915
[    2.033111] i915 0000:00:02.0: [drm] VT-d active for gfx access
[    2.050976] i915 0000:00:02.0: vgaarb: deactivate vga console
[    2.053208] i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[    2.053714] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/tgl_dmc_ver2_08.bin (v2.8)
[    2.187654] i915 0000:00:02.0: [drm] GuC firmware i915/tgl_guc_35.2.0.bin version 35.2 submission:disabled
[    2.187656] i915 0000:00:02.0: [drm] HuC firmware i915/tgl_huc_7.5.0.bin version 7.5 authenticated:yes
[    2.391163] [drm] Initialized i915 1.6.0 20200917 for 0000:00:02.0 on minor 0
[    2.419498] fbcon: i915drmfb (fb0) is primary device
[    2.460373] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device
[    4.948749] mei_hdcp 0000:00:16.0-b638ab7e-94e2-4ea2-■■■2-d1c54b627f04: bound 0000:00:02.0 (ops i915_hdcp_component_ops [i915])
[    4.950329] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])

The HuC firmware is the latest, but not the GuC. I will see later if I can switch to the latest one with the kernel path param.
But after that, I tried very quickly Plex and I was able to HW transcode 1080p to 720p video with just a few percent of CPU usage (transcoding audio). I need to test it more, but I couldn’t make it crash. More info soon.

Edit: well, it crashed, when I try to transcode HDR files with or without tone mapping. I need to debug it more, but right now some transcoding is okay, and some (especially when HDR is involved) are not and will cause the kernel driver to crash and kicked out of the kernel until I reboot the server.

I really am looking forward for this to work. I am planning to either buy a NUC 11 or build a Rocket Lake server just for this purpose.

1 Like

Please come join us over here:

We’re working with CometLake (-10xxx) CPUs and the new Intel-Compute-Runtime.
If it works as it’s touted, it will also have support for the -11xxx

As for availability of NUC11’s, don’t they launch later this month?

It depends on the region. I’ve been able to buy mine on amazon.de at a really good price.

Yeah, they are already launched in EU and Asia. In the US you can buy them only through SimplyNUC at this point - I am still waiting till Newegg/Amazon has it. Alternatively I am looking into building in a Supermicro 846 chassis with a Rocket Lake CPU. Still making up my mind - but main application would be a Plex server.
Switched my mind from going W1250 to a Gen11 consumer grade CPU - solely since it should support better Quicksync transcoding.

As I read the specs from Intel, both the W1200 and the new NUC11’s have the same QSV ASIC.

Given the performance I’m seeing on a W1250 in QNAP, I can only say one thing:

Xeon + QSV == BEAST.

It has more memory addressing range and more physical cores.

Where do you read that the same QSV ASIC is used? That would change everything and I would probably go with a W1250.
Do you have some idea how many 4K to 1080P transcodes with tonemapping enabled the W1250 would support? I remember you told me in another thread that the Qnap was inbound, when I asked about the W1250 performance.

Ark.Intel.com (the authority)

W1250 -

A very nice Xeon.

I seem to not be able to find info on the Quicksync generation of the CPUs on the website.

Intel doesn’t list which CPUs have it .

You must look through the processors and check for “Quick Sync Video: Yes”