Wie kann ich PCI-Passthrough mit QEMU konfigurieren?
- Einleitung
- Systemvoraussetzungen und Kernel-Konfiguration
- Identifikation des PCI-Geräts
- Abkoppeln des Geräts vom Host-Treiber
- Konfiguration der VM in QEMU
- Netzwerk- und Display-Anforderungen
- Problemlösungen und Sicherheitshinweise
- Zusammenfassung
Einleitung
PCI-Passthrough ermöglicht es, physische PCI-Geräte direkt an eine virtuelle Maschine (VM) weiterzugeben, sodass die VM nahezu nativen Zugriff auf die Hardware erhält. Dies ist besonders nützlich für Anwendungen, die eine hohe Leistung oder spezifische Hardwarezugriffe erfordern, wie z.B. Grafikkarten, Netzwerkkarten oder spezielle Beschleuniger. Die Konfiguration mit QEMU/KVM erfordert einige spezifische Schritte, um sicherzustellen, dass das Gerät korrekt isoliert und der VM zugewiesen wird.
Systemvoraussetzungen und Kernel-Konfiguration
Zunächst ist es wichtig sicherzustellen, dass der Host-Computer VT-d (für Intel-Prozessoren) oder AMD-Vi/IOMMU (für AMD-Prozessoren) unterstützt und diese Funktionen im BIOS/UEFI aktiviert sind. Ohne IOMMU-Unterstützung kann kein PCI-Passthrough genutzt werden.
Im Linux-Kernel muss die IOMMU-Unterstützung aktiviert sein. Prüfen Sie mit dmesg | grep -e DMAR -e IOMMU, ob Ihr System IOMMU erfolgreich aktiviert hat. Falls nicht, müssen Sie den Bootloader anpassen (z.B. GRUB), indem Sie in der Kernel-Commandline Parameter wie intel_iommu=on oder amd_iommu=on hinzufügen.
Beispiel für GRUB-Konfiguration (meist in /etc/default/grub):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"Danach gilt es, die Konfiguration mit sudo update-grub anzuwenden und das System neu zu starten.
Identifikation des PCI-Geräts
Um das gewünschte PCI-Gerät zu identifizieren, verwenden Sie den Befehl lspci -nn, der eine Liste aller PCI-Geräte mitsamt ihrer Geräte-IDs ausgibt. Notieren Sie sich die Geräte-ID (im Format xxxx:xxxx) sowie die Bus-, Geräte- und Funktionsnummer (z.B. 00:1f.2).
Diese Infos sind notwendig, um das Gerät später an die VM zu binden.
Abkoppeln des Geräts vom Host-Treiber
Damit das Gerät nicht vom Host-System verwendet wird, müssen Sie es von dessen Treiber lösen. Es gibt zwei gängige Methoden: Entweder blockieren Sie den Treiber beim Booten per Kernel-Parameter oder binden Sie das Gerät manuell an den VFIO-Treiber um.
Der VFIO-Treiber (Virtual Function I/O) ist das empfohlene Framework für PCI-Passthrough und sorgt für eine sichere und performante Durchleitung.
Um das Gerät an VFIO zu binden, verwenden Sie z.B. den Befehl:
echo "xxxx xxxx" > /sys/bus/pci/devices/0000:XX:XX.X/driver/unbindecho "xxxx xxxx" > /sys/bus/pci/drivers/vfio-pci/new_idErsetzen Sie xxxx xxxx hier mit der Geräte-ID und 0000:XX:XX.X mit der Busadresse des Geräts.
Konfiguration der VM in QEMU
Beim Starten der VM mit QEMU müssen Sie das PCI-Gerät explizit an die VM durchreichen. Die grundlegende Option lautet -device vfio-pci,host=0000:XX:XX.X oder alternativ -device pci-assign,host=0000:XX:XX.X (abhängig von der QEMU-Version).
Ein typisches Beispielbefehl könnte folgendermaßen aussehen:
qemu-system-x86_64 \ -enable-kvm \ -m 8G \ -cpu host,kvm=on \ -device vfio-pci,host=0000:01:00.0 \ -drive file=vm-image.qcow2,format=qcow2 \ -net nic -net userVergewissern Sie sich, dass Sie -enable-kvm nutzen, um die Hardwarevirtualisierung zu aktivieren. Passen Sie dabei RAM, CPU-Optionen und Platten zur VM an Ihre Bedürfnisse an.
Netzwerk- und Display-Anforderungen
Wenn Sie eine Grafikkarte per PCI-Passthrough durchreichen, sollten Sie außerdem überlegen, ob Sie die Standard-Display-Ausgabe von QEMU abschalten oder anderweitig konfigurieren, damit Konflikte vermieden werden. Ebenso ist es sinnvoll, eine Netzwerkverbindung entweder via virtio oder separatem durchgereichten Netzwerkkarten zu realisieren.
Problemlösungen und Sicherheitshinweise
PCI-Passthrough kann komplex sein und erfordert oft spezifische Anpassungen der IOMMU-Gruppen. Manche Geräte können nicht isoliert werden und müssen in einer IOMMU-Gruppe zusammenbleiben, was das Durchreichen erschwert oder verhindert.
Tools wie find /sys/kernel/iommu_groups/ -type l helfen dabei, die Gruppierung der Geräte zu prüfen.
Darüber hinaus sollten Sie beachten, dass der Host während der Nutzung des durchgereichten Geräts keine Kontrolle über dieses hat. Ein Absturz oder Fehlfunktion im Gastbetrieb kann somit auch Auswirkungen auf den Host haben.
Zusammenfassung
PCI-Passthrough mit QEMU umfasst die Aktivierung von IOMMU im BIOS und Kernel, das Identifizieren und Abkoppeln des gewünschten PCI-Geräts vom Host-Treiber, das Binden an den VFIO-Treiber sowie die passende Konfiguration der VM beim Start. Durch sorgfältige Vorbereitung und Prüfung der IOMMU-Gruppen lassen sich Geräte effizient und performant an virtuelle Maschinen durchreichen.
