Intel Alder Lake N100 HW transcoding

Server Version#: 1.32.3.7162
Player Version#: Any

Hi I just purchased my Plex Pass subscrition in order to use HW transcoding on my PMS which is installed in a docker container on Ubuntu 22.04.2 host on a PC with Intel N100 processor.

I have followed the following guide in order to enable HW transcoding:

The thing is that when trying to check if Quicksync recognises my GPU I get the following (all the commands below where executed in the host):

ubuntu@pms:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy
ubuntu@pms:~$ uname -r
5.15.0-73-generic
ubuntu@pms:~$ sudo lspci -v -s $(lspci | grep VGA | cut -d" " -f 1)
00:02.0 VGA compatible controller: Intel Corporation Device 46d1 (prog-if 00 [VGA controller])
        DeviceName: Onboard - Video
        Subsystem: Intel Corporation Device 7270
        Flags: bus master, fast devsel, latency 0, IRQ 255
        Memory at 6000000000 (64-bit, non-prefetchable) [size=16M]
        Memory at 4000000000 (64-bit, prefetchable) [size=256M]
        I/O ports at 4000 [size=64]
        Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
        Capabilities: [40] Vendor Specific Information: Len=0c <?>
        Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
        Capabilities: [ac] MSI: Enable- Count=1/1 Maskable+ 64bit-
        Capabilities: [d0] Power Management version 2
        Capabilities: [100] Process Address Space ID (PASID)
        Capabilities: [200] Address Translation Service (ATS)
        Capabilities: [300] Page Request Interface (PRI)
        Capabilities: [320] Single Root I/O Virtualization (SR-IOV)

When as per the guide I should get:

Kernel driver in use: i915

And the path /dev/dri which I should pass to teh container does not exist:

ubuntu@pms:~$ ls /dev/dri
ls: cannot access '/dev/dri': No such file or directory

So I assume that the kernel is not recognizing my GPU. Do I need to do anything else? Install any driver whatsoever?

Thanks in advance for your help, as I cannot find more infromation in the official guide.

1 Like

What is the output of running the following terminal command on the host (not Docker)?

sudo dmesg | grep -i i915

This should show the status of the module’s loading progress.

Empty:

ubuntu@pms:~$ sudo dmesg | grep -i i915
ubuntu@pms:~$

And what about sudo modprobe i915 (followed by the above command)?

What does sudo lshw -C Display show?

[chuck@lizum ~.2002]$ sudo lshw  -C Display
  *-display                 
       description: VGA compatible controller
       product: Polaris 22 XT [Radeon RX Vega M GH]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:01:00.0
       logical name: /dev/fb0
       version: c0
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=amdgpu latency=0 mode=3840x2160 visual=truecolor xres=3840 yres=2160
       resources: iomemory:200-1ff iomemory:210-20f irq:191 memory:2000000000-20ffffffff memory:2100000000-21001fffff ioport:e000(size=256) memory:db500000-db53ffff memory:c0000-dffff
  *-display
       description: Display controller
       product: HD Graphics 630
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 04
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm bus_master cap_list
       configuration: driver=i915 latency=0
       resources: iomemory:2f0-2ef iomemory:2f0-2ef irq:188 memory:2ffe000000-2ffeffffff memory:2fa0000000-2fafffffff ioport:f000(size=64)
[chuck@lizum ~.2003]$ 
ubuntu@pms:~$ sudo modprobe i915
ubuntu@pms:~$ sudo dmesg | grep -i i915
ubuntu@pms:~$

(empty response in both cases)

ubuntu@pms:~$ sudo lshw -C Display
  *-display UNCLAIMED
       description: VGA compatible controller
       product: Intel Corporation
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list
       configuration: latency=0
       resources: iomemory:600-5ff iomemory:400-3ff memory:6000000000-6000ffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff memory:4010000000-4016ffffff memory:4020000000-40ffffffff
  *-graphics
       product: EFI VGA
       physical id: 4
       logical name: /dev/fb0
       capabilities: fb
       configuration: depth=32 resolution=3840,2160

There was incomplete support for some processor graphics (11th gen and later) in the 5.15.x kernels included in 22.04. Some (most) of that has been resolved by 5.19.x, which is included in the hardware enablement package. It can be installed via:

sudo apt update && sudo apt install --install-recommends linux-generic-hwe-22.04

As always, backups are the order of the day.

1 Like

To add to @pshanew

When you have upgraded to 5.19 kernel (HardWare Enablement – hwe), you should see something like this.

[chuck@lizum ~.2002]$ sudo lshw  -C Display
  *-display                 
       description: VGA compatible controller
       product: Polaris 22 XT [Radeon RX Vega M GH]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:01:00.0
       logical name: /dev/fb0
       version: c0
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=amdgpu latency=0 mode=3840x2160 visual=truecolor xres=3840 yres=2160
       resources: iomemory:200-1ff iomemory:210-20f irq:191 memory:2000000000-20ffffffff memory:2100000000-21001fffff ioport:e000(size=256) memory:db500000-db53ffff memory:c0000-dffff
  *-display
       description: Display controller
       product: HD Graphics 630
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 04
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm bus_master cap_list
       configuration: driver=i915 latency=0
       resources: iomemory:2f0-2ef iomemory:2f0-2ef irq:188 memory:2ffe000000-2ffeffffff memory:2fa0000000-2fafffffff ioport:f000(size=64)
[chuck@lizum ~.2003]$ 

That seemed to work:

ubuntu@pms:~$ sudo lshw -C Display
  *-display
       description: VGA compatible controller
       product: Intel Corporation
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       logical name: /dev/fb0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=i915 latency=0 mode=3840x2160 resolution=3840,2160 visual=truecolor xres=3840 yres=2160
       resources: iomemory:600-5ff iomemory:400-3ff irq:132 memory:6000000000-6000ffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff memory:4010000000-4016ffffff memory:4020000000-40ffffffff

It seem to work as the following path which I should pass to the docker container now exists:

ubuntu@pms:~$ ls /dev/dri
by-path  card0  renderD128

But I tried to check if Plex was doing HW transconding but it is not as you can see in the following screenshot:

image

Anything else I should do?

Settings - Server - Transcoder - Show Advanced.

Enable all the transcoding options (the most important one is OFF by default)

You ARE using VOBSUB subtitles.
You won’t get full HW transcoding.

Image based subtitles (VOBSUB, DVDRIP, PGS) require the CPU to burn in.
HW is suppressed.

1 Like

I have all the advanced settings enabled except:
ā€œDisable video stream transcodingā€

Just FYI the field " Transcoder temporary directory" is empty. Do I need to put anything there?

I tried with another video file and I do not see (hw) in any of the streams:

image

This are two known good files.

Basic H.264 bt709. To force transcoding, set the playback quality to anything under 80 Mbps.

It is 2160p UHD.
Audio is nice and simple.
No subtitles.

Place it in an ā€˜other videos’ section.

Same, no HW transcoding:

image

image

It’s late here (US EDT), but I’ll try to provide some additional suggestions tomorrow. In the interim, I’d suggest that you ensure that your /dev/dri directory is being passed through to your container successfully, and that correct permissions are applied (the user you configured for the container is a member of the group owner of /dev/dri/card0 and /dev/dri/renderD128. It might also be helpful if you could provide server logs with debug logging enabled (not verbose).

Sorry guys I had a typo in my docker compose file and the /dev/dri directory was not passed correctly.
Now it is working like a charm. Thanks a lot for your help!

1 Like

little birdie whistling :bird:

I’m not harping but this is why the native app is easier – Fewer things to mess up because the native package does it all for you. I put a lot of time/effort into making the native installer intelligent and handle everything we (us and the community) could think of.

The runtime user is easily changed too (standard systemd override)

Docker is great when there is no native package for a distro (what it’s intent is)
but when you can – ā€œGo Nativeā€ :monkey:

:wink:

Yes, I agree that the native app would be much easier in most cases, but the thing is that I am hosting many other applications in the same PC that I want to avoid messing with each other (*arr apps, home assistant, reverse proxy, etc.) that is why docker in this case is not better, but it is the only way to go :slight_smile:

Thanks for your comment!

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.