PCIe-Grafikkarte an Windows VM in Proxmox VE 8 durchreichen

Mit PCIe-Passthrough bietet Proxmox VE die Möglichkeit, physische Hardware direkt an eine virtuelle Maschine durchzureichen. Besonders interessant ist dies beim Einsatz dedizierter Grafikkarten: Die GPU steht der VM nahezu mit nativer Performance zur Verfügung und kann damit für anspruchsvolle Anwendungen wie Spiele, 3D-Rendering, CAD, Videobearbeitung oder GPU-beschleunigte Berechnungen genutzt werden.

Im Gegensatz zu virtuellen Grafikadaptern (SPICE, noVNC, VirtIO-GPU) wird bei PCIe-Passthrough die Grafikkarte vollständig aus dem Host-System herausgelöst und exklusiv der Windows-VM zugewiesen. Dadurch entfallen typische Einschränkungen virtualisierter Grafiklösungen, insbesondere bei DirectX-, Vulkan- oder OpenGL-Anwendungen.

Da die VM in diesem Szenario keine virtuelle Anzeige mehr bereitstellt, erfolgt die grafische Ausgabe ausschließlich über Mechanismen des Gastbetriebssystems selbst, beispielsweise über Remote Desktop Protocol (RDP). SPICE- oder noVNC-Konsolen können hierbei nicht verwendet werden, da sie die durchgereichte GPU nicht ansprechen und stattdessen auf virtuelle Grafikadapter zurückgreifen würden


Voraussetzungen

  • Proxmox VE 8.4.x (Kernel 6.8.x, VFIO & IOMMU aktiviert)
  • Grafikkarte (z.B. NVIDIA Quadro P2000 z.B. in PCIe Slot 3)
  • Windows VM (z.B. Windows 10)

1.0 Prüfen, ob IOMMU aktiviert und funktionsfähig ist

IOMMU (Input-Output Memory Management Unit) ist eine Hardwarefunktion, die Speicherzugriffe von PCI-Geräten wie Grafik- oder Netzwerkkarten verwaltet, kontrolliert und voneinander isoliert. Dadurch ermöglicht IOMMU eine sichere und saubere Zuweisung von Hardware-Ressourcen an virtuelle Maschinen.
IOMMU (bei Intel als VT-d, bei AMD als AMD-Vi bezeichnet) ist eine zwingende Voraussetzung für den Einsatz von PCI-Passthrough.

1.1 Notwendige BIOS/UEFI-Einstellungen

  • Intel: VT-d, Above 4G Decoding und VT-x aktivieren.
  • AMD: IOMMU/AMD-Vi, Above 4G Decoding und SVM aktivieren.

Nach jeder Änderung im BIOS muss das System neu gestartet werden.

1.2 Prüfen, ob IOMMU-Hardware erkannt wird

Der Befehl zeigt an, ob das System IOMMU-Hardware erkannt hat.

Bei erfolgreicher Erkennung erscheint eine Ausgabe wie dmar0 (Intel) oder amd_iommu_v2 (AMD).
Bleibt die Ausgabe leer, ist IOMMU nicht aktiviert oder die Hardware unterstützt es nicht.

1.3 Überprüfung der IOMMU-Gruppen (ausführlicher Funktionstest)

Mit den folgenden Befehlen wird geprüft, wie das System die vorhandenen PCI-Geräte in IOMMU-Gruppen einteilt. Diese Gruppierung ist entscheidend für PCI-Passthrough, da nur Geräte aus einer eigenen IOMMU-Gruppe sicher und exklusiv an eine virtuelle Maschine durchgereicht werden können.

Alternative Kurzansicht:

Erscheint die Grafikkarte (VGA-Controller und zugehöriger Audio-Controller) in einer eigenen IOMMU-Gruppe, ist IOMMU aktiv und korrekt konfiguriert. Befinden sich alle Geräte in nur einer Gruppe oder sind keine Gruppen vorhanden, ist IOMMU nicht funktionsfähig.

1.4 Kernel-Log und Boot-Parameter (ergänzende Prüfung)

Mit Hilfe der Boot-Parameter kann ebenfalls geprüft werden, ob IOMMU geladen wurde. Die Ausgabe sollte intel_iommu=on (Intel) oder amd_iommu=on (AMD) enthalten. Bei manchen, oft älteren Server-Plattformen, können diese Meldungen fehlen – das ist nicht kritisch.

Alternativ kann der Befehl dmesg verwendet werden:

Die Ausgaben sollten Meldungen wie „IOMMU enabled“ oder „Found IOMMU cap…“ enthalten.


2.0 VFIO-Module laden und GPU an vfio-pci binden

Damit Hardware sicher und isoliert an virtuelle Maschinen weitergegeben werden kann, müssen die VFIO (Virtual Function I/O) im Kernel geladen sein. Die Module vfio, vfio_iommu_type1 und vfio_pci sind notwendig für den Basisbetrieb von VFIO. Das optionale Modul vfio_virqfd verbessert die Handhabung von Interrupts und kann die Stabilität bei GPU-Passthrough erhöhen.

2.1. Prüfen, ob die VFIO-Module bereits geladen sind

Die VFIO-Module müssen geladen sein, damit Hardware isoliert an virtuelle Maschinen durchgereicht werden kann.

Sind die Module vfio, vfio_iommu_type1 und vfio_pci geladen, kann direkt mit der Ermittlung der PCI-IDs fortgefahren werden. Beispielausgabe:

Fehlen Module oder ist die Ausgabe leer, müssen die Module zunächst geladen werden (s. Punkt 2.2).

2.2 VFIO-Module laden (nur wenn sie nicht bereits geladen sind)

Falls die oben genannten VFIO-Module nicht geladen wurden, kann das Laden mit folgenden Einträgen erzwungen werden. Die Module werden dadurch dauerhaft beim Systemstart aktiviert:

Anschließend das System neu starten und prüfen, ob die Module geladen sind:

Sind die Module nun geladen, ist VFIO einsatzbereit. Andernfalls besteht ein Problem mit der IOMMU-Konfiguration (siehe Sektion 1).

2.3 Überprüfung von IOMMU und VFIO-Konfiguration

Die abschließende Prüfung stellt sicher, dass IOMMU korrekt aktiviert ist und VFIO die GPU (hier: NVIDIA Quadro P2000) als Hosttreiber übernommen hat, sodass die Hardware fehlerfrei an eine VM durchgereicht werden kann.

Erwartete Anzeige unter jeder GPU-Komponente:

IOMMU und VFIO sind korrekt konfiguriert, und die GPU steht für den PCI-Passthrough in der VM bereit. Wird ein nativer Treiber (z. B. nouveau, amdgpu, i915) verwendet, ist das Binding fehlgeschlagen. In diesem Fall liefert

Hinweise auf mögliche Fehler.


3.0 Virtuelle Maschine erstellen und Windows installieren

Eine virtuelle Maschine kann in Proxmox VE entweder über das Webinterface oder über die Shell erstellt werden.

3.1 Virtuelle Maschine erstellen (Webinterface)

Bei der Erstellung der virtuellen Maschine sind die folgenden Einstellungen vorzunehmen. Diese bilden eine geeignete Grundlage für eine stabile Windows-VM unter Proxmox VE und sind insbesondere für die spätere PCI-Passthrough-Konfiguration relevant.

  • Name und VM-ID vergeben
  • Gastbetriebssystem: Microsoft Windows 10/11
  • Machine-Typ: q35
  • SCSI-Controller: VirtIO SCSI single, VirtIO-Informationen s.u. (alternativ LSI 53C895A)
  • Festplatte: Erstellen (VirtIO Block oder SCSI empfohlen)
  • CPU-Typ: host
  • Arbeitsspeicher: mindestens 8192 MiB (je nach Anwendung höher)
  • Netzwerk: VirtIO (paravirtualisiert)
  • Erstellung bestätigen

Die VM kann alternativ auch über die Shell mit qm create und qm set erstellt werden. Eine entsprechende Konfiguration per Kommandozeile ist ebenfalls möglich.

VirtIO bietet gegenüber emulierter Hardware eine deutlich bessere Performance, geringere Latenz und eine effizientere Ressourcennutzung. Werden VirtIO-Geräte verwendet, benötigt Windows während der Installation die passenden VirtIO-Treiber, um Hardware wie Festplatten und Netzwerkkarten zu erkennen. Ohne diese Treiber können die Geräte nicht initialisiert werden, und die Windows-Installation findet keine verfügbaren Datenträger oder Netzwerkadapter.

3.2 Windows 10 installieren (mit virtueller Grafikkarte)

  • Windows-ISO und VirtIO-ISO in die CD/DVD-Laufwerke der VM einbinden
  • VM starten
  • Falls nicht vom Windows-Installationsmedium gebootet wird, die Boot-Reihenfolge anpassen oder beim Start über die noVNC-Konsole mittels ESC das Installationsmedium auswählen
  • Windows installieren (VirtIO-Treiber bei der Installation mittels VirtIO-ISO laden)
  • Nach der Windows-Installation müssen die VirtIO-Treiber von der VirtIO-ISO (virtio-win-gt-x64.msi) installiert werden, da Treiber für Netzwerk, Speichercontroller und ggf. die VirtIO-GPU nicht automatisch eingerichtet werden.nächst nicht verfügbar sind.

Die virtuelle Grafikkarte (Standard VGA oder VirtIO-GPU) bleibt während der gesamten Windows-Installation aktiv und wird auch für die anschließende GPU Treiberinstallation verwendet.


4.0 GPU als PCI-Device zuweisen und GPU-Treiber in Windows installieren

Nach Abschluss der Windows-Installation samt VirtIO Treibern wird die VM heruntergefahren. Anschließend erfolgt das Durchreichen der physischen PCIe-Grafikkarte an die Windows-VM  über das Proxmox-Webinterface:

  • VM auswählen
  • Optionen → Hardware → PCI-Gerät
  • Im Dropdown menu unter RAW Device Grafikarte auswählen und Option “PCIe Express” aktivieren
  • Im Dropdown menu unter RAW Device Soundkarte der Grafikarte auswählen und Option “PCIe express” aktivieren

    Für einen korrekten und stabilen PCI-Passthrough ist es zwingend erforderlich, sowohl den VGA-Controller als auch den zur Grafikkarte gehörenden Audio-Controller jeweils als eigenes PCIe-Gerät an die VM durchzureichen. Beide PCIe-Geräte befinden sich in derselben IOMMU-Gruppe (z. B. Gruppe 3) und müssen einzeln der VM zugewiesen werden. Andernfalls ist ein zuverlässiger Betrieb der durchgereichten Grafikkarte nicht gewährleistet.

  • VM Starten und entsprechenden Treiber der Grafikkarte installieren
  • Nach einem Neustart sollte dann die Karte korrekt im Gerätemanager gelistet werden

5.0 Grafikkarte über Remoteverbindung nutzen

Virtuelle Grafikadapter wie RDP, noVNC oder SPICE werden von Windows als eigenständige Grafikkarten behandelt. Bei deren Verwendung kommt ausschließlich die jeweilige virtuelle GPU zum Einsatz, nicht jedoch die per PCI-Passthrough zugewiesene Grafikkarte. Um die durchgereichte Grafikkarte für die Grafikausgabe auf entfernten Systemen zu nutzen, empfiehlt sich der Einsatz eines Streaming-Servers wie beispielsweise Sunshine in Kombination mit dem Moonlight-Client.

Sunshine greift innerhalb der Windows-VM direkt auf die durchgereichte PCIe-Grafikkarte zu und stellt deren Bildausgabe als Stream bereit. Der Moonlight-Client (verfügbar für Linux, MacOS und Windows) verbindet sich mit dem Sunshine-Server und überträgt zusätzlich lokale Eingabegeräte wie Tastatur, Maus oder Gamepads an die VM. Im Gegensatz zu klassischen Remote-Lösungen erfolgt die Darstellung somit vollständig über die physische Grafikhardware, wodurch der volle Funktionsumfang und die Leistung der durchgereichten GPU mit anderen Systemen genutzt werden können.

— ergänze: sunshine ohne angeschosenen monitir nutzen :

um sunshine ohne angeshcloseen monitir nutzen zu können muss windows ein dummy montor simuliert werden damit die graffikrte einen ausgabe montir findet. es gibt verscheien hardware dummy adaopter die in den dispaly ausgang der gafikakrttg gestek werden und dem system eine angeschlosenn montor simulieren. die bessre methode ist eine reine softwarelösung, die dem system eien dummy montor auf software basis simuliert.

https://github.com/VirtualDrivers/Virtual-Display-Driver/releases?

https://github.com/LizardByte/Sunshine

https://github.com/moonlight-stream/moonlight-qt/releases

https://www.thomas-krenn.com/de/wiki/Proxmox_PCIe_Passthrough_aktivieren

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Back To Top