Hardware PCI passthrough auf Proxmox Automatismus versagt

LieberNetterFlo

Rear Admiral
Registriert
Feb. 2006
Beiträge
5.825
Hi zusammen

Warnung: Sehr spezifisches Problem!

ich habe auf meinem zweiten Rechner Proxmox installiert, dort will ich an eine VM die zwei LAN Schnittstellen eines PCIe Dual Port Ethernet Adapters weiterreichen (Hardware passthrough)

Ich hab eigentlich die ganz gute Anleitung hier befolgt: https://pve.proxmox.com/wiki/PCI(e)_Passthrough

das hab ich gemacht:

die Kernel Kommandozeile erweitert in /etc/default/grub
intel_iommu=on intremap=no_x2apic_optout

Kernel Module in /etc/modules eingetragen, damit diese geladen werden
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

eine Konfig für die Kernel Module erstellt /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:105e

grub config und initramfs aktualisiert
update-grub
update-initramfs -u -k all

Reboot und Log überprüft: dmesg | grep -e DMAR -e IOMMU
[ 0.008457] ACPI: DMAR 0x00000000C466ABC8 0000C8 (v01 INTEL SKL 00000001 INTL 00000001)
[ 0.102394] DMAR: IOMMU enabled
[ 0.207896] DMAR: Host address width 39
[ 0.207897] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.207901] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 7e3ff0505e
[ 0.207902] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.207904] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.207905] DMAR: RMRR base: 0x000000c43e0000 end: 0x000000c43fffff
[ 0.207905] DMAR: RMRR base: 0x000000cbb9d000 end: 0x000000cbde6fff
[ 0.207906] DMAR: RMRR base: 0x000000cd000000 end: 0x000000cf7fffff
[ 0.207907] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.207908] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.207908] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.208610] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.784847] DMAR: No ATSR found
[ 0.784876] DMAR: dmar0: Using Queued invalidation
[ 0.784878] DMAR: dmar1: Using Queued invalidation
[ 0.789156] DMAR: Intel(R) Virtualization Technology for Directed I/O

folgende zwei Geräte will ich durchreichen:
06:00.0 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)
Subsystem: Intel Corporation PRO/1000 PT Dual Port Server Adapter [8086:115e]
Kernel driver in use: e1000e
Kernel modules: e1000e
06:00.1 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)
Subsystem: Intel Corporation PRO/1000 PT Dual Port Server Adapter [8086:115e]
Kernel driver in use: e1000e
Kernel modules: e1000e

die sind auch, wie benötigt, in einzelnen Gruppen
/sys/kernel/iommu_groups/17/devices/0000:06:00.1
/sys/kernel/iommu_groups/7/devices/0000:00:1b.2
/sys/kernel/iommu_groups/15/devices/0000:04:00.0
/sys/kernel/iommu_groups/5/devices/0000:00:17.0
/sys/kernel/iommu_groups/13/devices/0000:00:1f.2
/sys/kernel/iommu_groups/13/devices/0000:00:1f.0
/sys/kernel/iommu_groups/13/devices/0000:00:1f.4
/sys/kernel/iommu_groups/3/devices/0000:00:14.2
/sys/kernel/iommu_groups/3/devices/0000:00:14.0
/sys/kernel/iommu_groups/11/devices/0000:00:1d.1
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/18/devices/0000:08:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1c.0
/sys/kernel/iommu_groups/16/devices/0000:06:00.0
/sys/kernel/iommu_groups/6/devices/0000:00:1b.0
/sys/kernel/iommu_groups/6/devices/0000:00:1b.3
/sys/kernel/iommu_groups/6/devices/0000:00:1b.1
/sys/kernel/iommu_groups/14/devices/0000:00:1f.6
/sys/kernel/iommu_groups/4/devices/0000:00:16.0
/sys/kernel/iommu_groups/4/devices/0000:00:16.3
/sys/kernel/iommu_groups/12/devices/0000:00:1d.3
/sys/kernel/iommu_groups/12/devices/0000:00:1d.6
/sys/kernel/iommu_groups/12/devices/0000:00:1d.4
/sys/kernel/iommu_groups/12/devices/0000:00:1d.2
/sys/kernel/iommu_groups/12/devices/0000:00:1d.7
/sys/kernel/iommu_groups/12/devices/0000:00:1d.5
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/10/devices/0000:00:1d.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/19/devices/0000:0a:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.4

interrupt remapping sollte auch funktionieren
dmesg | grep ecap
[ 0.211318] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 7e3ff0505e
[ 0.211321] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da

Das Problem ist nun, der Kernel nutzt andtatt dem vfio-pci weiterhin den e1000e Treiber/Modul :(

wenn ich folgende schritte manuell ausführe, dann kann ich die Karte in der VM nutze (effektiv entbinde ich den Treiber und binde den vfio-pci an die Karte)
echo "8086 105e" > /sys/bus/pci/drivers/vfio-pci/new_id
echo "0000:06:00.0" > /sys/bus/pci/devices/0000:06:00.0/driver/unbind
echo "0000:06:00.1" > /sys/bus/pci/devices/0000:06:00.1/driver/unbind
echo "0000:06:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
echo "0000:06:00.1" > /sys/bus/pci/drivers/vfio-pci/bind

was ich auch noch probiert habe, ist den vfio-pci Treiber über einen Kernel Parameter in /etc/default/grub erzwungen zu laden, noch bevor der e1000e geladen wird, mit:
rd.driver.pre=vfio-pci vfio-pci.ids=8086:105e
Hilft leider auch nicht :(

Hat jemand eine Idee was ich noch machen könnte?
 
Den e1000e blacklisten, wenn sowieso ein anderer Treiber benötigt/benutzt werden soll?
Ansonsten auch im Proxmox Forum posten.
 
ich hab eine Onboard LAN für das Proxmox Management (Web)Interface die auch den e1000e nutzt, mit einem generellen blacklisting würde ich mich aussperren :(

(außer du weißt wie man den Treiber nur für bestimmte Vendor und Device IDs blacklistet)
 
@BlackPanther87 genau! Und genau das mache ich auch schon, an anderen stellen da Proxmox auf Debian basiert, aber genau das selbe vorgehen. Und das Log sagt auch:
[ 12.431148] VFIO - User Level meta-driver version: 0.3
[ 12.442260] vfio_pci: add [8086:105e[ffffffff:ffffffff]] class 0x000000/00000000
nur wenn ich nach dem boot schau, dann hat der e1000e (wieder?) das Gerät übernommen

wie auf der Arch Seite steht "stub driver or a VFIO driver", bei mir is es der vfio Treiber, oder solls werden, wenns mal geht ;)
 
danke für den Link ... ich hab auf Verdacht mal mit den Parametern umgespielt und bäm nun gehts tatsächlich .... der "Trick" an der ganzen Sache ist, dass der vfio-pci Treiber nicht von Anfang an übernimmt, sondern erst später Oo

danke euch! Manchmal steht man wie ein Ochs vorm Berg und braucht nur nen kleinen Stubs ;)
 
Soweit ich dein Vorhaben verstanden habe, soll ja die VM den Treiber übernehmen, oder?
Also ist dem Proxmox ja erstmal vollkommen Wurst welchen er beim Reboot lädt. Wichtig ist was die VM für einen Treiber verwendet.
 
ja, die VM übernimmt dann die Ansteuerung und muss auch den richtigen Treiber bereitstellen ... wichtig ist dass die Hardware auf dem Host, also dem Proxmox Server, dann von dem "Dummy" Treiber vfio-pci angesteuert wird, dieser erlaubt die Weitergabe der HW an virtuelle Maschinen. Sollte auf dem Host weiterhin der e1000e aktiv sein ist ein Durchreichen nicht möglich.
 
Zurück
Oben