Träumst du davon, die volle Leistung deiner Grafikkarte in einer virtuellen Maschine (VM) zu nutzen, sei es für anspruchsvolle Spiele, professionelle Anwendungen oder spezielle Software, die nur unter Windows läuft? Dann bist du hier genau richtig! Das Konzept des GPU Passthrough, auch bekannt als VGA Passthrough, ermöglicht es dir, eine dedizierte Grafikkarte direkt an eine VM durchzureichen. Das Ergebnis? Nahezu native Leistung, die den Unterschied zwischen einer ruckelnden VM und einem butterweichen Gaming-Erlebnis ausmacht.
In dieser umfassenden Anleitung tauchen wir tief in die Welt des Virt-Manager GPU Passthrough unter Debian/Ubuntu ein. Wir nutzen das mächtige Duo aus KVM/QEMU und Virt-Manager, um deine Traum-VM Wirklichkeit werden zu lassen. Dieser Artikel ist das Destillat aus jahrelanger Community-Erfahrung, Fehlersuche und Optimierung. Bereite dich darauf vor, die Grenzen deines Linux-Hosts zu sprengen und deiner virtuellen Maschine Flügel zu verleihen!
Warum GPU Passthrough? Die Vorteile auf einen Blick
- Nahezu native Leistung: Deine VM kann die volle Leistung der Grafikkarte nutzen, als wäre sie direkt im physischen System verbaut.
- Gaming: Spiele, die auf Linux nicht nativ laufen oder besser unter Windows performen, können mit voller Grafikpower gespielt werden.
- Professionelle Anwendungen: Software für Videobearbeitung, CAD oder 3D-Rendering, die GPU-Beschleunigung benötigt, läuft reibungslos.
- Treiberkompatibilität: Zugriff auf Windows-spezifische Grafikkartentreiber.
- Flexibilität: Nutze dein Linux-System weiter für Produktivität, während du bei Bedarf eine leistungsstarke Windows-VM startest.
Voraussetzungen schaffen: Was du benötigst
Bevor wir loslegen, ist es wichtig, dass dein System die grundlegenden Anforderungen erfüllt. Das GPU Passthrough ist kein Hexenwerk, aber es erfordert bestimmte Hardware- und Software-Voraussetzungen.
Hardware-Checkliste:
- CPU mit IOMMU-Unterstützung: Für Intel-Prozessoren ist dies VT-d, für AMD-Prozessoren AMD-Vi. Ohne dies ist Passthrough nicht möglich.
- Mainboard mit IOMMU-Unterstützung: Das Mainboard muss IOMMU nicht nur unterstützen, sondern auch im BIOS/UEFI aktiviert haben.
- Zwei Grafikkarten (empfohlen):
- Eine GPU für deinen Linux-Host.
- Eine dedizierte GPU für die VM (die durchgereicht wird).
Es ist prinzipiell auch möglich, eine einzelne Grafikkarte durchzureichen, aber dies erfordert einen „Host-Switch” nach dem Start der VM und ist komplexer. Für Anfänger empfehlen wir zwei GPUs.
- Ausreichend RAM: Plane mindestens 16 GB RAM ein, da der Host und die VM jeweils ihren Anteil benötigen.
- Genügend Speicherplatz: Für die VM und das Host-System.
Software-Checkliste:
- Debian/Ubuntu: Eine aktuelle, stabile Version.
- QEMU/KVM: Die Virtualisierungsplattform.
- Libvirt: Die Schnittstelle zur Verwaltung von KVM-VMs.
- Virt-Manager: Eine grafische Oberfläche zur Verwaltung von Libvirt.
- Grundlegende Linux-Kenntnisse: Du solltest dich auf der Kommandozeile wohlfühlen.
Schritt 1: BIOS/UEFI-Einstellungen überprüfen und aktivieren
Der erste und oft übersehene Schritt ist die korrekte Konfiguration deines System-BIOS/UEFI. Starte deinen Rechner neu und rufe das BIOS/UEFI auf (meist durch Drücken von Entf, F2 oder F10 während des Bootvorgangs).
Suche nach folgenden Einstellungen und aktiviere sie:
- Intel VT-d oder AMD-Vi (IOMMU). Die genaue Bezeichnung kann variieren (z.B. „Virtualization Technology”, „IOV Support”, „SR-IOV”).
- Deaktiviere Secure Boot. Dies kann bei manchen Konfigurationen Probleme verursachen.
- Stelle sicher, dass die primäre Anzeige auf die GPU eingestellt ist, die dein Host nutzen soll, falls du zwei Grafikkarten hast.
Speichere die Änderungen und starte das System neu.
Schritt 2: Linux-Host vorbereiten (Kernel-Parameter & Pakete)
Jetzt geht es an die Vorbereitung deines Debian/Ubuntu-Systems.
2.1 IOMMU-Kernel-Parameter hinzufügen
Öffne ein Terminal und bearbeite die GRUB-Konfiguration:
sudo nano /etc/default/grub
Finde die Zeile, die mit GRUB_CMDLINE_LINUX_DEFAULT
beginnt, und füge am Ende der Anführungszeichen (vor dem letzten "
) folgende Parameter hinzu:
- Für Intel CPUs:
intel_iommu=on iommu=pt
- Für AMD CPUs:
amd_iommu=on iommu=pt
Die Zeile könnte dann so aussehen (Beispiel Intel):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"
Speichere und schließe die Datei (Strg+O, Enter, Strg+X). Aktualisiere GRUB und starte neu:
sudo update-grub
sudo reboot
2.2 IOMMU-Gruppen prüfen
Nach dem Neustart ist es wichtig zu verifizieren, dass IOMMU aktiv ist und deine GPUs in eigenen IOMMU-Gruppen liegen. Öffne ein Terminal:
dmesg | grep -i iommu
for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d##*/}; dev="/sys/devices/pci0000:00/$n"; printf 'IOMMU Group %s: %sn' "${d%/*##*/}" "$(lspci -nns "$n")"; done | sort -V
Jedes Gerät, das du an die VM durchreichen möchtest (insbesondere deine dedizierte GPU und deren Audio-Controller), sollte idealerweise in einer eigenen IOMMU-Gruppe sein oder zumindest in einer Gruppe, die nur die Komponenten enthält, die du *alle* durchreichen möchtest. Ist dies nicht der Fall, benötigst du möglicherweise einen PCIe ACS Override Patch. Dies ist jedoch ein fortgeschrittenes Thema und sollte nur bei Bedarf angegangen werden.
2.3 Notwendige Pakete installieren
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager ovmf
sudo adduser $(whoami) libvirt
sudo adduser $(whoami) kvm
Melde dich ab und wieder an (oder starte neu), damit die Gruppenmitgliedschaft wirksam wird. ovmf
ist wichtig für UEFI-basierte VMs, was für Windows 10/11 und GPU Passthrough empfohlen wird.
Schritt 3: Die Grafikkarte dem Host entziehen (Isolating the GPU)
Deine zukünftige VM-GPU muss für das Host-System unsichtbar gemacht werden, damit der vfio-pci
-Treiber sie übernehmen kann.
3.1 Identifizieren der GPU-Geräte
Finde die PCI-IDs deiner dedizierten Grafikkarte. Oft hat eine moderne Grafikkarte mehrere Komponenten (VGA-Controller, Audio-Controller, manchmal USB-Controller), die alle durchgereicht werden müssen. Suche nach den „VGA compatible controller” und „Audio device” für deine Gaming-GPU:
lspci -nnk
Notiere dir die PCI-IDs im Format XXXX:XXXX
(z.B. 10de:1f06
und 10de:10f9
für eine NVIDIA RTX-Karte).
3.2 Host-Treiber blacklisten
Wir verhindern, dass Linux seine eigenen Grafikkartentreiber für die Passthrough-GPU lädt. Erstelle eine Blacklist-Datei:
sudo nano /etc/modprobe.d/blacklist-nvidia-passthrough.conf
Füge folgende Zeilen ein (passe die Treiber an deine GPU an – z.B. nouveau
für NVIDIA, amdgpu
für AMD, nvidia
falls der proprietäre Treiber geladen wurde):
blacklist nouveau
blacklist nvidiafb
blacklist rivafb
blacklist amdgpu
blacklist radeon
options vfio-pci ids=DEINE_GPU_VGA_ID,DEINE_GPU_AUDIO_ID disable_vga=1
Ersetze DEINE_GPU_VGA_ID
und DEINE_GPU_AUDIO_ID
durch die von dir gefundenen PCI-IDs, durch Kommas getrennt. Beispiel: options vfio-pci ids=10de:1f06,10de:10f9 disable_vga=1
Speichere die Datei.
3.3 VFIO-Modul laden
Stelle sicher, dass das vfio-pci
-Modul beim Booten geladen wird:
sudo nano /etc/modules
Füge diese Zeilen am Ende der Datei hinzu:
vfio_pci
vfio
vfio_iommu_type1
Speichere und schließe die Datei.
3.4 Initramfs aktualisieren und neu starten
Damit die Änderungen wirksam werden, musst du das Initramfs aktualisieren und das System neu starten:
sudo update-initramfs -u -k all
sudo reboot
3.5 Verifikation nach dem Neustart
Prüfe, ob der vfio-pci
-Treiber deine Grafikkarte übernommen hat:
lspci -nnk | grep -i vga -A 3
Unter deiner Passthrough-GPU sollte jetzt Kernel driver in use: vfio-pci
stehen. Glückwunsch, der schwierigste Teil ist geschafft!
Schritt 4: Virtuelle Maschine in Virt-Manager erstellen
Öffne Virt-Manager (virt-manager
im Terminal oder über das Anwendungsmenü). Erstelle eine neue VM:
- Klicke auf „Neue virtuelle Maschine erstellen”.
- Wähle „Lokale Installationsmedien (ISO-Image)” und wähle dein Windows-ISO aus.
- Wähle „VM anpassen vor der Installation” aus.
- Stelle die Architektur auf
x86_64
und den Firmware-Typ aufUEFI x86_64: /usr/share/OVMF/OVMF_CODE.fd
ein. - Gib ausreichend CPU-Kerne und RAM an. Empfehlung: Mindestens 4 Kerne und 8 GB RAM für Gaming.
- Erstelle eine ausreichend große virtuelle Festplatte.
- Überprüfe die Netzwerkeinstellungen (Bridge-Netzwerk ist ideal für volle Konnektivität).
- WICHTIG: Füge die Grafikkarte hier noch NICHT hinzu. Wir machen das später.
Schließe den Assistenten ab.
Schritt 5: Die GPU zur VM hinzufügen und XML anpassen
Jetzt kommt der finale Schritt, um deine GPU der VM zu übergeben.
5.1 GPU hinzufügen
- Wähle deine neu erstellte VM in Virt-Manager aus und stelle sicher, dass sie heruntergefahren ist.
- Klicke auf das „Glühbirnen”-Symbol, um die Hardware-Details anzuzeigen.
- Klicke unten links auf „Hardware hinzufügen”.
- Wähle „PCI Hostgerät”.
- Suche die PCI-IDs deiner GPU und wähle beide aus (VGA- und Audio-Controller). Klicke auf „Fertigstellen”.
- Optional: Wenn du einen USB-Controller durchreichen möchtest (für Maus/Tastatur direkt an die VM), kannst du diesen ebenfalls hier hinzufügen.
5.2 XML-Bearbeitung für optimale Leistung und Stabilität
Dies ist der kritischste Schritt für Stabilität und Performance, insbesondere bei NVIDIA-Karten (Stichwort Code 43 Fehler).
- Wähle in den Hardware-Details deiner VM oben links „XML” aus, um die Konfiguration der VM zu bearbeiten.
- Hypervisor-Eigenschaften: Füge unterhalb des
<domain type='kvm'>
-Tags folgende Zeilen ein:<features> <acpi/> <apic/> <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vpindex state='on'/> <synic state='on'/> <stimer state='on'/> <reset state='on'/> <vendor_id state='on' value='whatever'/> <frequencies state='on'/> </hyperv> <kvm> <hidden state='on'/> </kvm> <smm state='on'/> </features>
Der
<kvm><hidden state='on'/></kvm>
-Tag täuscht der VM vor, dass sie nicht virtualisiert ist, was oft den berüchtigten NVIDIA Code 43 Fehler verhindert.Der
<hyperv>
-Block verbessert die Performance durch Hyper-V-Enlightenment. - CPU-Konfiguration: Suche den
<cpu>
-Tag. Für die beste Leistung wirdhost-passthrough
empfohlen, da es die genauen CPU-Features deines Host-Prozessors an die VM weiterleitet. Ersetze den vorhandenen<cpu>
-Block (oder füge ihn ein) durch:<cpu mode='host-passthrough' check='partial'> <topology sockets='1' dies='1' cores='DEINE_KERNZAHL' threads='DEINE_THREADZAHL'/> <feature policy='require' name='topoext'/> </cpu>
Passe
DEINE_KERNZAHL
undDEINE_THREADZAHL
entsprechend der von dir für die VM zugewiesenen Cores/Threads an. - Grafikkarte entfernen: Lösche den gesamten
<video>
-Block, der die emulierte Virt-Manager-Grafikkarte definiert (z.B. QXL oder VGA). Deine durchgereichte GPU wird diese Funktion übernehmen. - VirtIO Treiber: Stelle sicher, dass für die Festplatte und das Netzwerk die VirtIO-Treiber verwendet werden. Diese bieten eine wesentlich bessere Leistung als emulierte Geräte. Wenn du die VM erstellt hast, solltest du beim Anlegen der Festplatte „SATA” oder „IDE” gegen „VirtIO” tauschen.
- Speichere die XML-Konfiguration.
Schritt 6: Windows in der VM einrichten
Jetzt kannst du die VM starten. Anfangs wirst du die Konsole über Virt-Manager (VNC) nutzen müssen, da die Treiber für deine dedizierte GPU in Windows noch nicht installiert sind.
- Starte die VM.
- Installiere Windows.
- Installiere die VirtIO-Treiber: Lade das aktuelle VirtIO-ISO von Fedora (
virtio-win.iso
) herunter und füge es als SATA-CDROM-Laufwerk in der VM-Hardware hinzu. Installiere die Treiber für Netzwerk, Speicher und ggf. Ballon. - Installiere die Grafikkartentreiber: Lade die neuesten Treiber von der Website deines Grafikkartenherstellers (NVIDIA oder AMD) herunter und installiere sie in der VM. Nach der Installation sollte das Bild auf dem Monitor erscheinen, der an deine Passthrough-GPU angeschlossen ist.
- Deaktiviere unter Windows „Schnellstart”. Dies kann Probleme mit dem Passthrough verursachen.
Wenn alles geklappt hat, solltest du nun ein vollwertiges Windows mit deiner dedizierten Grafikkarte in einer VM haben!
Troubleshooting und Best Practices
GPU Passthrough kann knifflig sein. Hier sind einige häufige Probleme und deren Lösungen:
- NVIDIA Code 43 Fehler: Dies ist der häufigste Fehler und deutet darauf hin, dass die GPU erkannt hat, dass sie sich in einer VM befindet. Die
<kvm><hidden state='on'/></kvm>
-Einstellung in der XML ist die erste Anlaufstelle. Auch der<vendor_id>
-Spoofing im Hyper-V-Block kann helfen. - Kein Bild auf dem Monitor:
- Stelle sicher, dass der Monitor an die *Passthrough*-Grafikkarte angeschlossen ist.
- Überprüfe, ob die Grafikkartentreiber in Windows installiert sind.
- Prüfe die IOMMU-Gruppen und die Zuweisung des
vfio-pci
-Treibers.
- Audio über GPU: Oft hat die GPU einen eigenen Audio-Controller (z.B. HDMI-Audio). Stelle sicher, dass dieser ebenfalls durchgereicht und in Windows als Ausgabegerät gewählt wird.
- Leistungsprobleme:
- Nutze
host-passthrough
für die CPU-Konfiguration. - Deaktiviere Speicher-Ballooning in den VM-Einstellungen (falls aktiviert).
- Experimentiere mit Hugepages für bessere Speicherdurchsatzleistung.
- Stelle sicher, dass du genügend CPU-Kerne und RAM zugewiesen hast.
- Nutze
- USB-Passthrough: Um Maus und Tastatur direkt an die VM zu binden, kannst du einen gesamten USB-Controller durchreichen oder einzelne USB-Geräte dynamisch über Virt-Manager zuweisen.
- Snapshots: Vorsicht beim Erstellen von Snapshots mit Passthrough-Geräten. Diese sind nicht immer zuverlässig und können zu Problemen führen.
- PCIe ACS Override Patch: Falls deine GPU nicht in einer isolierten IOMMU-Gruppe liegt (Geräte sind gemeinsam in einer Gruppe, die du nicht komplett durchreichen möchtest), musst du möglicherweise deinen Kernel patchen, um ACS Override zu aktivieren. Dies ist ein fortgeschrittenes Thema und sollte nur in Betracht gezogen werden, wenn alle anderen Optionen fehlschlagen.
Fazit: Dein Gaming-Rig unter Linux ist Realität!
Glückwunsch! Du hast erfolgreich das komplexe, aber lohnende Abenteuer des GPU Passthrough gemeistert. Deine Virt-Manager Gaming-VM unter Debian/Ubuntu ist nun eine Realität, die dir die Flexibilität eines Linux-Hosts mit der kompromisslosen Leistung einer dedizierten Windows-Maschine bietet. Die Community hat unzählige Stunden investiert, um diese Technologie zu perfektionieren, und nun bist du Teil dieses Wissensschatzes.
Das Einrichten eines GPU Passthrough-Setups kann eine Herausforderung sein, aber die Belohnung ist ein System, das sowohl leistungsfähig als auch vielseitig ist. Experimentiere mit den Einstellungen, optimiere deine VM und genieße das Beste aus beiden Welten. Viel Spaß beim Zocken oder Arbeiten in deiner Hochleistungs-VM!