Fernwartung Download starten

PCIe Passthrough in Proxmox: Netzwerkkarten und HBAs durchreichen

ProxmoxVirtualisierungNetzwerkHardware
PCIe Passthrough in Proxmox: Netzwerkkarten und HBAs durchreichen

Virtualisierte Netzwerkkarten liefern für die meisten Workloads ausreichende Performance. Doch wenn eine VM bare-metal-nahe Netzwerk-Durchsatzraten benötigt — etwa als OPNsense-Firewall, als Storage-Gateway mit iSCSI oder als Packet-Processing-Appliance — ist PCIe Passthrough die Lösung. Dabei wird eine physische PCI-Express-Karte direkt an eine VM durchgereicht, ohne den Umweg über die virtuelle Netzwerkbrücke.

Voraussetzungen

Hardware-Anforderungen

PCIe Passthrough setzt IOMMU-Unterstützung voraus — eine CPU- und Chipsatz-Funktion, die physische Geräte in isolierte Gruppen unterteilt:

  • Intel: VT-d (Virtualization Technology for Directed I/O)
  • AMD: AMD-Vi (AMD I/O Virtualization Technology)

Nicht jede Mainboard-CPU-Kombination unterstützt IOMMU vollständig. Server-Hardware (Xeon, EPYC) bietet in der Regel die beste Kompatibilität. Consumer-Boards haben teilweise unbrauchbare IOMMU-Gruppen, in denen zu viele Geräte zusammengefasst sind.

BIOS/UEFI-Einstellungen

Aktivieren Sie im BIOS:

  1. Intel VT-d oder AMD IOMMU (je nach CPU)
  2. Above 4G Decoding (für GPUs relevant, bei NICs meist nicht nötig)
  3. ACS Override (falls vorhanden — verbessert die IOMMU-Gruppentrennung)

IOMMU im Kernel aktivieren

Kernel-Parameter setzen

Bearbeiten Sie die GRUB-Konfiguration:

# Für Intel-CPUs
nano /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

# Für AMD-CPUs
# GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

Der Parameter iommu=pt (Passthrough-Modus) sorgt dafür, dass nur Geräte, die tatsächlich durchgereicht werden, den IOMMU-Overhead erfahren. Alle anderen Geräte arbeiten wie gewohnt.

Wenn Proxmox mit systemd-boot installiert wurde:

# Datei bearbeiten
nano /etc/kernel/cmdline
# Inhalt: root=ZFS=rpool/ROOT/pve-1 boot=zfs quiet intel_iommu=on iommu=pt

# Boot-Konfiguration aktualisieren
proxmox-boot-tool refresh

VFIO-Module laden

Erstellen Sie eine Konfigurationsdatei für die benötigten Kernel-Module:

cat <<EOF > /etc/modules-load.d/vfio.conf
vfio
vfio_iommu_type1
vfio_pci
EOF

Aktualisieren Sie den Initramfs und starten Sie neu:

update-initramfs -u -k all
reboot

IOMMU-Aktivierung prüfen

Nach dem Neustart verifizieren Sie die Aktivierung:

dmesg | grep -e DMAR -e IOMMU
# Erwartete Ausgabe enthält:
# DMAR: IOMMU enabled
# DMAR: Intel(R) Virtualization Technology for Directed I/O

IOMMU Groups analysieren

Jedes PCI-Gerät gehört zu einer IOMMU-Gruppe. Beim Passthrough wird die gesamte Gruppe an die VM übergeben — nicht nur ein einzelnes Gerät. Deshalb ist es entscheidend, dass die gewünschte Netzwerkkarte in einer eigenen oder kleinen Gruppe liegt.

#!/bin/bash
# IOMMU Groups anzeigen
for d in /sys/kernel/iommu_groups/*/devices/*; do
    n=${d#*/iommu_groups/*}
    n=${n%%/*}
    printf "IOMMU Group %s: " "$n"
    lspci -nns "${d##*/}"
done | sort -t: -k1 -n

Typische Ausgabe für eine dedizierte Intel-Netzwerkkarte:

IOMMU Group 14: 03:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
IOMMU Group 14: 03:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)

Wenn die Netzwerkkarte in einer Gruppe mit dem Root-Port oder anderen essentiellen Geräten liegt, benötigen Sie einen ACS Override Patch oder müssen auf eine andere PCIe-Slot-Konfiguration ausweichen.

Gerät für vfio-pci reservieren

Damit Proxmox das Gerät nicht mit dem Standard-Treiber belegt, muss es explizit für vfio-pci reserviert werden:

# PCI-IDs der Netzwerkkarte ermitteln
lspci -nn | grep -i ethernet
# Ausgabe: 03:00.0 Ethernet controller [0200]: Intel Corporation I350 [8086:1521]

# vfio-pci für diese Vendor:Device-ID konfigurieren
echo "options vfio-pci ids=8086:1521" > /etc/modprobe.d/vfio.conf

Bei mehreren identischen Karten (gleiche Vendor:Device-ID) werden alle Karten mit dieser ID an vfio-pci gebunden. Falls Sie nur eine bestimmte Karte durchreichen möchten, verwenden Sie stattdessen die PCI-Adresse:

# Spezifisches Gerät per Adresse binden
echo "options vfio-pci ids=8086:1521" > /etc/modprobe.d/vfio.conf

# Standard-Treiber blacklisten (falls nötig)
echo "blacklist igb" >> /etc/modprobe.d/blacklist.conf

Initramfs aktualisieren und neustarten:

update-initramfs -u -k all
reboot

Binding verifizieren

lspci -nnk -s 03:00.0
# Kernel driver in use: vfio-pci

Wenn vfio-pci als Treiber angezeigt wird, ist das Gerät korrekt reserviert.

Passthrough in der VM konfigurieren

Über die Weboberfläche

  1. Öffnen Sie die VM-Konfiguration in Proxmox VE
  2. Hardware > Add > PCI Device
  3. Wählen Sie das gewünschte Gerät aus der Liste
  4. Aktivieren Sie All Functions (bei Multi-Port-Karten)
  5. Aktivieren Sie PCI-Express (für PCIe-Geräte, nicht für Legacy-PCI)
  6. Setzen Sie den Machine Type auf q35 (unter Options > Machine)

Über die Konfigurationsdatei

# /etc/pve/qemu-server/<VMID>.conf
machine: q35
hostpci0: 03:00,pcie=1

Für Multi-Port-Karten mit mehreren Funktionen:

hostpci0: 03:00.0;03:00.1,pcie=1

BIOS-Typ und Machine Type

PCIe Passthrough erfordert den q35-Chipsatz. Der ältere i440fx-Chipsatz unterstützt kein natives PCIe. Wählen Sie außerdem OVMF (UEFI) statt SeaBIOS als Firmware — OVMF bietet bessere PCIe-Kompatibilität.

SR-IOV: Virtuelle Funktionen statt vollem Passthrough

Single Root I/O Virtualization (SR-IOV) teilt eine physische Netzwerkkarte in mehrere Virtual Functions (VFs), die jeweils an unterschiedliche VMs durchgereicht werden können. Im Gegensatz zu vollem Passthrough bleibt die physische Funktion (PF) beim Host.

SR-IOV aktivieren

# Prüfen, ob die Karte SR-IOV unterstützt
lspci -vvv -s 03:00.0 | grep -i "sr-iov"

# Virtual Functions aktivieren (Beispiel: Intel X710)
echo 4 > /sys/class/net/ens1f0/device/sriov_numvfs

# Persistent machen
cat <<EOF > /etc/udev/rules.d/10-sriov.rules
ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:03:00.0", \
  ATTR{device/sriov_numvfs}="4"
EOF

Nach der Aktivierung erscheinen die VFs als eigene PCI-Geräte:

lspci | grep -i virtual
# 03:02.0 Ethernet controller: Intel Corporation X710 Virtual Function
# 03:02.1 Ethernet controller: Intel Corporation X710 Virtual Function

Jede VF kann wie ein normales PCI-Gerät an eine VM durchgereicht werden — mit eigenem MAC, VLAN und QoS-Profil.

Vorteile von SR-IOV

MerkmalVolles PassthroughSR-IOV
VMs pro Karte1Bis zu 64 VFs
Host-ZugriffNeinJa (PF bleibt beim Host)
Live-MigrationNeinEingeschränkt (Bond-Failover)
PerformanceNativeNahezu native
Hardware-AnforderungBeliebige PCIe-KarteSR-IOV-fähige Karte

HBAs durchreichen (Storage Controller)

Für TrueNAS- oder ZFS-VMs ist das Durchreichen eines HBA (Host Bus Adapter) im IT-Modus essentiell. ZFS benötigt direkten Zugriff auf die Festplatten — ein Hardware-RAID-Controller dazwischen verhindert die ZFS-eigene Datenintegrität.

# HBA identifizieren
lspci -nn | grep -i "SAS\|SCSI\|LSI"
# 01:00.0 Serial Attached SCSI controller [0107]: Broadcom / LSI SAS3008 [1000:0097]

# Für vfio-pci reservieren
echo "options vfio-pci ids=1000:0097" >> /etc/modprobe.d/vfio.conf
update-initramfs -u -k all
reboot

Troubleshooting

VM startet nicht

Fehler: vfio: failed to set up container

  • Prüfen Sie, ob IOMMU korrekt aktiviert ist (dmesg | grep IOMMU)
  • Stellen Sie sicher, dass alle Geräte der IOMMU-Gruppe an vfio-pci gebunden sind

Fehler: BAR resources not available

  • Aktivieren Sie Above 4G Decoding im BIOS
  • Verwenden Sie q35 als Machine Type

Instabile Netzwerk-Performance

  • Prüfen Sie die Interrupt-Zuordnung: cat /proc/interrupts | grep vfio
  • CPU-Pinning für die VM konfigurieren, um NUMA-Crossing zu vermeiden
  • Bei Intel-Karten: Interrupt-Moderation prüfen (ethtool -c <interface>)

IOMMU-Gruppe zu groß

Wenn mehrere Geräte in einer Gruppe zusammengefasst sind:

  1. Karte in einen anderen PCIe-Slot umstecken
  2. ACS Override Patch verwenden (Kernel-Parameter pcie_acs_override=downstream,multifunction)
  3. Server-Hardware mit besserem IOMMU-Support nutzen

Monitoring mit DATAZONE Control

DATAZONE Control überwacht VMs mit durchgereichten PCI-Geräten: Netzwerk-Durchsatz, Latenz und Fehlerzähler der physischen NICs fließen in das zentrale Dashboard. Bei SR-IOV-Setups werden sowohl die Physical Function als auch alle Virtual Functions einzeln getrackt — inklusive Alerting bei Link-Down oder steigenden Error-Countern.


Sie planen PCIe Passthrough für Ihre Proxmox-Umgebung? Kontaktieren Sie uns — wir beraten bei der Hardware-Auswahl und konfigurieren Passthrough und SR-IOV für maximale Performance.

Mehr zu diesen Themen:

IT-Beratung gewünscht?

Kontaktieren Sie uns für eine unverbindliche Beratung zu Proxmox, OPNsense, TrueNAS und mehr.

Jetzt Kontakt aufnehmen