iGPU Passthrough mit intel N355 (Twin Lake) funktioniert nicht

towerplease

New Member
Feb 9, 2025
6
0
1
madgeeks.de
Hi Servus,

ich habe mir kürzlich einen mini-PC mit intel N355 zugelegt und darauf Proxmox installiert. Habe alle meine VMs erfolgreich von meinem QNAP darauf migriert (teilweise manuell, teilweise per Clonezilla). Läuft auch alles rund ohne Probleme.

Nun wollte ich für meine VM (Docker-Host unter Ubuntu 24.04) die iGPU durchreichen um dort HW-Transcoding nutzen zu können.
Ich habe mich dabei strikt an folgende Anleitung gehalten:
https://3os.org/infrastructure/proxmox/gpu-passthrough/igpu-passthrough-to-vm/
Sah auch alles wunderbar aus.
Aber in Ubuntu ist unter /dev/dri dann nur "card0" erschienen und kein renderD128.
Ich hab viel rumprobiert, aber konnte es nicht zum laufen bekommen.
Ich dachte dann, ich probiere erstmal mit einer Windows-VM um einfach auszuschließen ob es an Proxmox oder an Ubuntu liegt.
Habe eine Test-VM mit Windows 11 aufgesetzt und dort dann die iGPU durchgereicht. Wird auch als "Intel Graphics" erkannt, jedoch funktioniert das dort ebenfalls nicht, siehe:
1749809323488.png

Ich vermute nun, dass es hier ein Problem unter proxmox gibt. Die TwinLake iGPU ist auch ziemlich neu (Q1 2025) und ich frage mich, ob ich dort was besonderes beachten muss.
Mir ist auch aufgefallen, dass beim PCI-Gerät keine Beschreibung angezeigt wird, dass ist bei anderen Videos oder Screenshots die ich gesehen habe der Fall (Sind aber auch ältere intel CPUs mit intel UHD Graphics)
1749809041502.png
Hinweis: 00:02.0 ist die iGPU
1749809113944.png

Danke schon mal im Voraus!
VG
 
Leider hatte ich mit dem Ansatz "SR-IOV" keinen erfolgt und bin wieder zurück.

Ich versuche nochmal den Stand der Dinge zu erläutern.
Also die iGPU scheint auf dem Host aus zu sein, da ich mit meinem KVM (JetKVM) im Bootvorgang ein Bild bekomme, aber ab dem Zeitpunkt, wenn der Kernel lädt, dann nicht mehr. Eindeutiger Hinweis, dass die iGPU dann nicht aktiv ist.

Auf dem Host sehe ich die volle Beschreibung vom PCI-Device "00:02":

Code:
root@pve-n1:~# lspci -v
00:00.0 Host bridge: Intel Corporation Device 4617
        DeviceName: Onboard - Other
        Subsystem: Intel Corporation Device 7270
        Flags: bus master, fast devsel, latency 0, IOMMU group 1
        Capabilities: [e0] Vendor Specific Information: Len=14 <?>
        Kernel driver in use: igen6_edac
        Kernel modules: igen6_edac

00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [Intel Graphics] (prog-if 00 [VGA controller])
        DeviceName: Onboard - Video
        Subsystem: Intel Corporation Alder Lake-N [Intel Graphics]
        Flags: bus master, fast devsel, latency 0, IRQ 11, IOMMU group 0
        Memory at 60e8000000 (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)
[...]

Wenn ich dann an meine Ubuntu-VM (pdocker01) das Gerät dann durchreiche, wird aber nur "VGA Compatible Device" erkannt:

Code:
root@pdocker01:~# lspci -v
[...]
01:00.0 VGA compatible controller: Intel Corporation Alder Lake-N [Intel Graphics] (prog-if 00 [VGA controller])
        Subsystem: Intel Corporation Device 7270
        Physical Slot: 0
        Flags: fast devsel, IRQ 10
        Memory at f9000000 (64-bit, non-prefetchable) [size=16M]
        Memory at 7070000000 (64-bit, prefetchable) [size=256M]
        I/O ports at 5000 [size=64]
        Expansion ROM at fa000000 [disabled] [size=128K]
        Capabilities: [40] Vendor Specific Information: Len=0c <?>
        Capabilities: [70] Express Endpoint, MSI 00
        Capabilities: [ac] MSI: Enable- Count=1/1 Maskable+ 64bit-
        Capabilities: [d0] Power Management version 2
        Capabilities: [100] Null
        Capabilities: [200] Address Translation Service (ATS)
        Capabilities: [300] Page Request Interface (PRI)
   
[...]

Die iGPU wird erkannt auch der Name, aber es wird kein Treiber geladen...

Demnach sehe ich unter /dev/dri auch nur "by-path" und "card-0" aber keinen "renderD128"...

Hat noch jemand eine Idee, warum das so ist bzw. was helfen könnte?
 
Last edited:
...
Die iGPU wird erkannt auch der Name, aber es wird kein Treiber geladen...

...
Wenn der i915 Treiber die PCI-ID deiner GPU nicht in seiner eigenen Liste der unterstützten IDs findet, dann lädt er natürlich auch nicht.

Dass lspci den Namen dekodieren kann ist davon völlig unabhängig. Das ist nur der Abgleich der PCI-ID mit einer textuellen Liste und das Einsetzen des dort hinterlegten Namens. Auf weitere Funktionen hat das keinen Einfluss, bzw. gibt keinen Hinweis, ob diese gegeben sind.

Läuft denn deine TwinLake GPU auf einer bare-metal Installation der gleichen Ubuntu Version (wie bei deiner VM) überhaupt richtig?
Falls die Antwort nein lautet, dann hast du (zumindest einen Teil) deine(r) Erklärung.
Es kann gut sein, dass du hier neuere Kernel Versionen brauchst.
Entweder Kernel Commit-Logs durchforsten, oder Trial & Error. Aktuell bietet Proxmox Kernel bis 6.14 and und bei Ubuntu dürfte es ähnlich sein, weil Proxmox seine Kernel eh auf Ubuntu Sourcen basiert.
 
Hmm.. das ist ein guter Tipp.. Danke!

Ich boote die Maschine mal direkt mit ubuntu und schaue ob die iGPU dort korrekt geladen wird.
Melde mich, sobald ich ein Ergebnis habe.
 
Ok, Problem gefunden.
Ursache -> Kernel 6.8 ist zu ALT!!!

Bevor ich mir einen USB-Stick gemacht habe, bin ich mal testweise hingegangen und habe eine Ubuntu Desktop 25.04 VM gemacht (mit GUI etc. etc.).
Habe dort dann das PICE-Gerät (iGPU) angehängt. Mir ist aufgefallen, dass die Konsole beim Bootvorgang hängt. Aber die VM noch lief.
Habe anschließend das PCIE gerät wieder rausgenommen und SSH schnell konfiguriert. Kurzer check -> Ja, komme per ssh drauf.
Dann wieder ausgeschaltet, PCIE (iGPU) wieder angehängt, VM gestartet und per SSH drauf -> Geht. Nun der Moment:

ls -ltrh /dev/dri
uuund... da ist der renderD128
Für die iGPU wird i951, xe genutzt. Dafür braucht man wohl mind. Kernel 6.11 (Ubuntu 25.04 kommt direkt mit 6.14).
1752017710140.png

Ich werde also den Kernel von meiner Docker-VM auf 6.14 hochziehen und dann dort die iGPU anhängen.
Dann sollte auch Problemfrei die Transkodierung für immich, Plex, etc. funktionieren :)


Hat mich jetzt paar Stunden/Tage gekostet, aber Lösung ist da.

Für alle die das gleiche Problem haben, hier nochmal meine gesamte Konfiguration zum Nachstellen:

/etc/default/grub
Code:
# If you change this file, run 'update-grub' afterwards to update
[...]
##GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction initcall_blacklist=sysfb_init video=simplefb:off video=vesafb:off video=efifb:off video=vesa:off disable_vga=1 vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=radeon,nouveau,nvidia,nvidiafb,nvidia-gpu,snd_hda_intel,snd_hda_codec_hdmi,i915"
GRUB_CMDLINE_LINUX=""
[...]
#GRUB_INIT_TUNE="480 440 1"

Danach:
Bash:
update-grub

Nun die Modules erweitern:
/etc/modules
Code:
## Modules required for PCI passthrough
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
mdev
kvmgt

Nun Kernel-Dinge tun:
Bash:
update-initramfs -u -k all

Jetzt Proxmox-host neu starten
Danach sollte die iGPU auf dem Host ausgeschaltet sein und via IOMMU in einer eigenen Gruppe sein.
Details hier in der Anleitung (habe ich 1zu1 befolgt):
https://3os.org/infrastructure/proxmox/gpu-passthrough/igpu-passthrough-to-vm/

Nun ganz wichtig! Wenn Ihr eine N355 CPU mit entsprechend moderner Twin-Lake iGPU habt, muss euere Linux-Gast-VM mind. Kernel 6.11 haben.
Mit Ubuntu fahrt ihr hier vermutlich am besten. Habe Ubuntu Server 24.04 LTS. Hier kann man Problemfrei den Kernel aktualisieren:
https://serverhost.com/blog/step-by-step-guide-installing-linux-kernel-6-14-on-ubuntu-24-10/#:~:text=Method 1: Using the Mainline Kernels Tool (GUI)&text=After installation, open the Mainline,Once installed, reboot your computer.

Bash:
sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update && sudo apt install mainline
mainline --install 6.14.11
## alternativ
## mainline --install 6.11.11

Ihr könnt vorher die Liste der verfügbaren Kernels anzeigen lassen:
Bash:
mainline --list

EDIT:
Nach etwas Recherche habe ich rausgefunden, dass man die HWE Kernels nutzen kann. Diese sind wohl ebenfalls von Ubuntu, anders als mainline.
Ich habe mich selbst bei meiner Docker-VM dazu entschieden die HWE-Kernel zu nutzen

Bash:
apt install --install-recommends linux-generic-hwe-24.04 linux-headers-generic-hwe-24.04

Damit kommt man dann genau so auf Kernel 6.11 und die iGPU wird mit dem renderD128 erkannt.

Danach neu starten.

Ich hoffe das hilft jemanden weiter :)
 
Last edited: