[GELÖST] AMD IOMMU für PCI-Passthrough mit KVM

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
matman
Beiträge: 744
Registriert: 03.07.2008 10:50:07
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Hamburg
Kontaktdaten:

[GELÖST] AMD IOMMU für PCI-Passthrough mit KVM

Beitrag von matman » 23.05.2011 23:37:39

Hallo, ich habe hier ein echt verflixtes Problem mit PCI-Passthrough und KVM. Installiert ist Squeeze, der Standardkernel funktioniert für mein Vorhaben offensichtlich nicht. Alle möglichen Versuche schlugen fehl bis ich dann bemerkte, dass CONFIG_DMAR_DEFAULT_ON in dem Debian-Kernel deaktiviert ist, laut einem HowTo auf den KVM-Seiten aber für PCI-Passthrough benötigt wird. Also habe ich nun den Vanilla-Kernel 2.6.33.9 besorgt, schaffe es aber einfach nicht, PCI-Passthrough zu aktivieren. Und auch IOMMU scheint nicht richtig zu funktionieren; jedenfalls wird bei 'kvm -enable-kvm -cpu ?' nicht die Host-CPU aufgelistet, sondern lediglich die emulierten CPU's.

Mein Mainboard, das Asrock 890FX Deluxe3 unterstützt IOMMU, auch das BIOS sollte das, es ist die derzeit aktuellste Version 1.9 auf dem Board. Soweit ich informiert bin kann auch meine CPU (AMD Phenom II X4 945) IOMMU und im BIOS habe ich IOMMU ebenfalls aktiviert. Trotzdem habe ich in /var/log/dmesg folgenden Eintrag:

Code: Alles auswählen

Checking aperture...
No AGP bridge found
Node 0: aperture @ 20000000 size 32 MB
Aperture pointing to e820 RAM. Ignoring.
Your BIOS doesn't leave a aperture memory hole
Please enable the IOMMU option in the BIOS setup
This costs you 64 MB of RAM
Ferner findet man das hier in dmesg:

Code: Alles auswählen

dmesg | grep AMD-Vi
AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
AMD-Vi: Lazy IO/TLB flushing enabled
Also teilweise ist IOMMU aktiv, aber irgendwie fehlt da wohl noch etwas. Orientiert an dem KVM-Howto (Siehe den Link weiter oben) vermisse ich beispielsweise den Eintrag 'AMD-Vi: Initialized for Passthrough Mode'.

Nun hatte ich in einem anderen Forum gelesen, dass man wohl auf den KVM-Seiten vergessen hatte zu erwähnen, das PCI-Passthrough nur mit Kernel 2.6.30.x funktioniert. Allerdings war die Info auch nicht mehr so ganz aktuell, sodass ich nicht beurteilen kann, was mit den neueren Kernelversionen ist. Aber ich habe auf jeden Fall auch einmal mit Kernel 2.6.30.10 experimentiert. Dazu einfach mit make oldconfig die Konfiguration vom Kernel 2.6.33.9 übernommen und immerhin ergaben sich einige IOMMU-Funktionen mehr. Folgende Geschichte ist die selbe:

Code: Alles auswählen

Checking aperture...
No AGP bridge found
Node 0: aperture @ 20000000 size 32 MB
Aperture pointing to e820 RAM. Ignoring.
Your BIOS doesn't leave a aperture memory hole
Please enable the IOMMU option in the BIOS setup
This costs you 64 MB of RAM
Aber dann:

Code: Alles auswählen

AMD IOMMU: Enabling IOMMU at 0000:00:00.2 cap 0x40
AMD IOMMU: aperture size is 64 MB
AMD IOMMU: device isolation enabled
AMD IOMMU: Lazy IO/TLB flushing enabled
AMD IOMMU: Event logged [IO_PAGE_FAULT device=00:13.2 domain=0x0000 address=0x00000000c7ff1380 flags=0x0050]
AMD IOMMU: Using protection domain 4 for device 0000:00:02.0
AMD IOMMU: Using protection domain 5 for device 0000:00:05.0
AMD IOMMU: Using protection domain 6 for device 0000:00:06.0
AMD IOMMU: Using protection domain 7 for device 0000:00:09.0
AMD IOMMU: Using protection domain 8 for device 0000:00:0a.0
AMD IOMMU: Using protection domain 9 for device 0000:00:11.0
AMD IOMMU: Using protection domain 11 for device 0000:00:12.2
AMD IOMMU: Using protection domain 13 for device 0000:00:13.2
AMD IOMMU: Using protection domain 20 for device 0000:00:16.2
AMD IOMMU: Using protection domain 10 for device 0000:00:12.0
AMD IOMMU: Using protection domain 12 for device 0000:00:13.0
AMD IOMMU: Using protection domain 18 for device 0000:00:14.5
AMD IOMMU: Using protection domain 19 for device 0000:00:16.0
AMD IOMMU: Using protection domain 14 for device 0000:00:14.0
AMD IOMMU: Using protection domain 17 for device 0000:06:06.2
Allerdings funktioniert PCI-Passthrough immer noch nicht. Und immer noch kein Hinweis a la AMD-Vi Initialized for Passthrough Mode. Von daher vermute ich, dass im Kernel noch irgendwas wichtiges aktiviert werden muss. Hat jemand eine Idee, was das sein könnte?

Hier noch die Konfiguration vom Kernel 2.6.33.9: http://nopaste.debianforum.de/35575

Und der Vollständigkeit halber Kernel 2.6.30.10: http://nopaste.debianforum.de/35576

Ich würde es allerdings vorziehen, Kernel 2.6.33.9 zu verwenden, wenn dieser denn funktionieren sollte.
Zuletzt geändert von matman am 24.05.2011 12:38:34, insgesamt 1-mal geändert.
System: Bullseye
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525

Benutzeravatar
matman
Beiträge: 744
Registriert: 03.07.2008 10:50:07
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Hamburg
Kontaktdaten:

Re: AMD IOMMU für PCI-Passthrough mit KVM

Beitrag von matman » 24.05.2011 12:38:05

Wider Erwarten handelt es sich doch nicht um ein Kernel-Problem. Da ich noch keine Antwort erhalten habe könnte ich auch löschen, aber ich habe mir gedacht, dass der eine oder andere Kernel-Bastler vielleicht auf das selbe Problem stoßen könnte und ebenfalls ein Problem im Kernel vermutet. Deshalb lasse ich das mal so hier stehen.

Die Ursache für das Fehlverhalten von KVM war ein Bug im Paket qemu-kvm_0.12.5+dfsg-5+squeeze1, mit dem weder CPU-Virtualisierung noch PCI-Passthrough funktioniert. Näheres dazu siehe hier: http://debianforum.de/forum/viewtopic.p ... 71#p828671
System: Bullseye
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525

Antworten