[ Zum Inhalt springen ]
TUTORIALS / VIRTUALIZATION

GPU PASSTHROUGH VM

SCHWIERIGKEIT: EXPERTE AKTUALISIERT:
GPU Passthrough VM

EINFÜHRUNG

Eine virtuelle Maschine zu betreiben bedeutet normalerweise, Grafikleistung zu opfern. GPU Passthrough (VFIO) löst dieses Problem, indem es der VM direkten Zugriff auf eine physische GPU gibt – für nahezu native Leistung. Das ist der heilige Gral für Linux-Nutzer, die Windows-Spiele oder Adobe-Software ohne Dual-Boot nutzen wollen.

Mit richtiger Konfiguration erreichst du 95-99% der Bare-Metal-Leistung, kannst Anti-Cheat-Spiele spielen und behältst deine sichere Linux-Host-Umgebung.

VFIO GPU Passthrough Architektur

Linux Host
QEMU/KVM
VFIO Treiber
→
IOMMU
DMA Remapping
Isolierung
→
Windows VM
GPU Treiber
Direkter Zugriff
Host-GPU bleibt für Linux verfügbar, durchgereichte GPU erreicht nahe-native Leistung in VM

VORAUSSETZUNGEN

  • CPU mit VT-d (Intel) oder AMD-Vi (AMD) - Prüfe deine Prozessor-Specs
  • Motherboard mit IOMMU-Support - Jedes moderne Board unterstützt das
  • Zwei GPUs ODER Single-GPU Passthrough - Dual-GPU ist einfacher für Anfänger
  • Linux Host - Arch Linux empfohlen (beste Dokumentation), Ubuntu/Fedora funktionieren auch
  • Mindestens 16GB RAM - Du musst 8GB+ der VM zuweisen

⚠️ WARNUNG

Falsche BIOS-Modifikationen können dein Motherboard bricken. Habe immer einen Backup-Plan und lies den kompletten Guide, bevor du anfängst.

SCHRITT-FÜR-SCHRITT ANLEITUNG

Schritt 1: IOMMU im BIOS/UEFI aktivieren

Starte ins BIOS (meist DEL oder F2 beim Booten). Navigiere zum Advanced- oder CPU-Konfigurationsbereich.

Suche und aktiviere:

  • Intel VT-d (Intel CPUs) oder AMD-Vi / IOMMU (AMD CPUs)
  • Intel Virtualization Technology / SVM Mode
  • Deaktiviere CSM/Legacy Boot (nur UEFI verwenden)

Schritt 2: IOMMU in Kernel-Parametern aktivieren

Bearbeite deine Bootloader-Config um IOMMU auf Kernel-Ebene zu aktivieren. Für GRUB, bearbeite /etc/default/grub:

# Für Intel CPUs:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

# Für AMD CPUs (IOMMU ist aktiv, sobald im BIOS eingeschaltet; "amd_iommu=on" ist keine gültige Option):
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt"

Dann GRUB aktualisieren und neustarten:

sudo grub-mkconfig -o /boot/grub/grub.cfg # Arch (Ubuntu: sudo update-grub)
sudo reboot

Schritt 3: IOMMU-Gruppen verifizieren

Nach dem Neustart, prüfe deine IOMMU-Gruppen um sicherzustellen, dass Geräte richtig isoliert sind:

#!/bin/bash
shopt -s nullglob
for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do
    echo "IOMMU Group ${g##*/}:"
    for d in $g/devices/*; do
        echo -e "\t$(lspci -nns ${d##*/})"
    done;
done;

Schritt 4: GPU mit VFIO isolieren

Finde die PCI-IDs deiner GPU mit lspci -nnk. Erstelle /etc/modprobe.d/vfio.conf:

# Ersetze mit den vendor:device IDs deiner GPU
options vfio-pci ids=10de:1b80,10de:10f0

# Lade vfio-pci vor Grafiktreibern
softdep nvidia pre: vfio-pci
softdep amdgpu pre: vfio-pci

Initramfs aktualisieren und neustarten:

sudo mkinitcpio -P # Arch Linux
sudo update-initramfs -u # Ubuntu/Debian

Schritt 5: Virtualisierungssoftware installieren

# Arch Linux
sudo pacman -S qemu-full libvirt virt-manager edk2-ovmf

# Ubuntu/Debian
sudo apt install qemu-kvm libvirt-daemon-system virt-manager ovmf

Libvirt aktivieren und starten:

sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER

Schritt 6: VM in Virt-Manager erstellen

  1. Virt-Manager öffnen und "Neue virtuelle Maschine erstellen" klicken
  2. "Lokales Installationsmedium" wählen und Windows-ISO auswählen
  3. Mindestens 8GB RAM und 4 CPU-Kerne zuweisen
  4. Wichtig: "Konfiguration vor Installation anpassen" auswählen
  5. In Übersicht, Firmware auf "UEFI x86_64: ...OVMF_CODE..." setzen (Pfad je nach Distro, z.B. /usr/share/OVMF/OVMF_CODE_4M.fd bei Ubuntu, /usr/share/edk2/x64/OVMF_CODE.4m.fd bei Arch)
  6. Bei CPUs "Host-CPU-Konfiguration kopieren" ankreuzen
  7. Standard-Videoadapter entfernen (Spice/QXL)
  8. "Hardware hinzufügen" → "PCI-Host-Gerät" → Deine GPU auswählen
  9. Erneut Hardware hinzufügen und GPU-Audio-Controller auswählen

FAZIT & TROUBLESHOOTING

Wenn erfolgreich, hast du jetzt eine Windows-VM, die 95-99% der Bare-Metal-Leistung erreicht. Du kannst viele Spiele spielen und CUDA-Beschleunigung nutzen — manche Anti-Cheats (z.B. Vanguard, FACEIT) blockieren VMs aber.

Häufige Probleme:

  • Code 43 Error: Aktuellen NVIDIA-Treiber nutzen (ab R465 ist GeForce-Passthrough offiziell erlaubt); nur sehr alte Treiber brauchen vendor_id, um die VM zu verstecken
  • Schwarzer Bildschirm: Andere OVMF-Firmware-Versionen probieren oder video=efifb:off zu Kernel-Params hinzufügen
  • VM startet nicht: IOMMU-Gruppen prüfen und sicherstellen, dass GPU nicht vom Host genutzt wird

FAQ / PROBLEMLÖSUNG

⚠️ Detaillierte Antworten zu den häufigsten Problemen

❌ Code 43 Fehler im Windows-Geräte-Manager für die durchgereichte GPU

NVIDIA-Treiber vor R465 (2021) verweigerten GeForce-Karten in einer VM; aktuelle Treiber unterstützen GeForce-Passthrough offiziell. Heute bedeutet Code 43 meist: GPU noch am Host gebunden, fehlendes/defektes vBIOS-ROM oder (AMD) der Reset-Bug. Für sehr alte Treiber gilt der klassische Fix: füge <vendor_id state="on" value="1234567890ab"/> in <hyperv> und <kvm><hidden state="on"/></kvm> in der <features>-Sektion der VM hinzu.

❌ Meine GPU ist mit dem USB-Controller in einer IOMMU-Gruppe

Häufig bei älteren AMD-Boards. Du brauchst einen ACS-Override-Patch im Kernel, oder du nutzt vfio-pci.ids= um die ganze Gruppe auf einmal zu binden. Langfristig: neueres Motherboard mit besserer IOMMU-Segmentierung.

❌ Audio über HDMI/DP der durchgereichten GPU funktioniert nicht

Du musst beide durchreichen: den VGA-Controller und den Audio-Controller (meist 01:00.1). In Windows dann HDMI-Audio als Standard-Wiedergabegerät setzen.

❌ Performance nur 80% statt 95-99% von Bare-Metal

Prüfe folgendes:

  • Hyper-V-Enlightenments aktivieren (<hyperv>-Block in der VM-XML: relaxed, vapic, spinlocks)
  • cpu host-passthrough in der VM-XML (nicht host-model)
  • CPU-Cores mit <vcpupin> an die VM pinnen
  • Hugepages nutzen: echo 4096 > /proc/sys/vm/nr_hugepages (4096 × 2 MiB = 8 GiB VM-RAM) plus <memoryBacking><hugepages/> in der XML
  • Disk-Driver auf virtio (single-driver) und Cache auf writeback
❌ Geht Single-GPU-Passthrough (ohne zweite GPU)?

Ja, aber komplexer. Der Host muss die GPU vor dem VM-Start freigeben: libvirt-Hook-Skripte stoppen den Display-Manager und lösen die GPU vom Host-Treiber, nach dem Herunterfahren bekommt der Host sie zurück (keine feste vfio-pci.ids-Bindung — sonst hat der Host kein Bild). Siehe die Single-GPU-Passthrough-Anleitung für das volle Verfahren.

❌ Anti-Cheat erkennt meine VM — was nun?

EAC und BattlEye laufen nativ unter Linux/Proton, wenn der Spieleentwickler es freischaltet — prüfe Heroic / ProtonDB und spiele lieber direkt auf dem Linux-Host. Vanguard (Valorant), FACEIT und viele EAC/BattlEye-Titel erkennen oder blockieren VM-Umgebungen. Es gibt keinen zuverlässigen Workaround jenseits der obigen Techniken.

❌ Mein CPU hat kein VT-d / AMD-Vi

GPU-Passthrough ist dann nicht möglich. Das IOMMU-Hardware-Feature ist zwingend erforderlich. Vielen älteren Intel-Consumer-CPUs (v.a. "K"-Modelle vor Skylake) fehlt VT-d; bei älteren AMD-Plattformen hängt es vom Chipsatz/Board ab (alle Ryzen-Plattformen haben AMD-Vi). Siehe die CPU-Virtualisierungs-Liste.

❓ Brauchst du Hilfe?

→ Arch Wiki: PCI passthrough via OVMF ist die kanonische Referenz. Das r/VFIO Subreddit ist extrem hilfreich.