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
VFIO Treiber
Isolierung
Direkter Zugriff
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:
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 reboot
Schritt 3: IOMMU-Gruppen verifizieren
Nach dem Neustart, prüfe deine IOMMU-Gruppen um sicherzustellen, dass Geräte richtig isoliert sind:
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:
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 update-initramfs -u # Ubuntu/Debian
Schritt 5: Virtualisierungssoftware installieren
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 usermod -aG libvirt $USER
Schritt 6: VM in Virt-Manager erstellen
- Virt-Manager öffnen und "Neue virtuelle Maschine erstellen" klicken
- "Lokales Installationsmedium" wählen und Windows-ISO auswählen
- Mindestens 8GB RAM und 4 CPU-Kerne zuweisen
- Wichtig: "Konfiguration vor Installation anpassen" auswählen
- 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)
- Bei CPUs "Host-CPU-Konfiguration kopieren" ankreuzen
- Standard-Videoadapter entfernen (Spice/QXL)
- "Hardware hinzufügen" → "PCI-Host-Gerät" → Deine GPU auswählen
- 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-passthroughin der VM-XML (nichthost-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 aufwriteback
❌ 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.