Ich habe eine AMD A4-5300 CPU mit einem Motherboard, das IOMMU unterstützt, und ich versuche, IOMMU auf meinem Gentoo Hardened 4.3.3-r4-Kernel zu aktivieren, mit der Absicht, eine Grafikkarte auf einer KVM-VM zu verwenden. Lautdiese Anleitung hiersoll ich meinen Kernel mit einigen bereitgestellten Optionen neu kompilieren („Unterstützung für DMA-Neuzuordnungsgeräte“, „DMA-Neuzuordnungsgeräte aktivieren“ und „PCI-Stub-Treiber“). Allerdings fehlen „Unterstützung für DMA-Neuzuordnungsgeräte“ und „DMA-Neuzuordnungsgeräte aktivieren“ in meiner Kernelkonfiguration.
Ich habe dann in der Konfiguration nach „remap“ gesucht und versucht, eine Reihe von Optionen zu aktivieren, nämlich CONFIG_IRQ_REMAP, CONFIG_DMAR_TABLE, CONFIG_IOMMU_SUPPORT, CONFIG_SWIOTLB und CONFIG_PCI_IOV. Dann habe ich meinen Kernel mit diesen aktivierten Optionen neu kompiliert, mein System mit amd_iommu=fullflush iommu=force
der Kernel-Befehlszeile gestartet und gemäß der oben genannten Anleitung überprüft, ob IOMMU auf meinem System läuft, indem ich in meinen Kernel-Nachrichten nach „AMD-Vi“ gesucht habe:
dmesg | grep AMD-Vi
In meinem Kernel-Protokoll wird nichts zu AMD-Vi angezeigt.
Wenn ich versuche, eine VM auf virt-manager mit einem angeschlossenen PCI-Gerät zu starten, erhalte ich außerdem die Meldung„Fehler beim Starten der Domäne: nicht unterstützte Konfiguration: Host unterstützt kein Passthrough von Host-PCI-Geräten“.
So ziemlich alles, was ich finde, ist für Fedora, Ubuntu und Debian, wo IOMMU anscheinend sofort funktioniert. Ich glaube nicht, dass es daran liegt, dass mein Motherboard und meine CPU es nicht unterstützen, denn mein BIOS hat eine Option dafür und weil ich mich erinnere, dass ich vor ein paar Jahren eine VirtualBox-VM mit IOMMU unter Debian ausführen konnte (obwohl ich dem nicht nachgegangen bin, weil ich damals nie gedacht hätte, dass ich zwei Grafikkarten benötige, um eine GPU auf einer VM über IOMMU zu verwenden).
Folgendes habe ich bereits versucht, aber es hat nicht funktioniert:
- Verwenden des Standardkernels anstelle des gehärteten.
- AktivierenGerätetreiber >> IOMMU-Hardware-Support,AMD IOMMU-Unterstützung,Unterstützung für Intel IOMMU durch DMA-Remapping-Geräte,Unterstützung für Interrupt-NeuzuordnungUndBusoptionen (PCI usw.) >> PCI Stub.
- Verwende den neuesten Kernel, aktuell gerade auf 4.4.8-hardened-r1 aktualisiert.
Dies ist die Befehlszeile, die ich zum Starten meines Kernels verwende, wobei der Einfachheit halber jeder Parameter in einer separaten Zeile steht:
root=/dev/ram0
crypt_root=/dev/disk/by-uuid/c1ce6456-4c6a-4a64-8027-5ec4fdc0f344
dolvm
real_root=/dev/mapper/cryptgentoo-raiz
rootfstype=jfs
real_init=/sbin/init
root_keydev=/dev/disk/by-partuuid/086194de-e476-4abb-82da-9744e6fb0257
root_key=luks-key.gpg
keymap=la
amd_iommu=on
iommu=on
Fehlt mir immer noch eine Kernel-Konfigurationsoption?
Aktualisieren:Aus Geistesabwesenheit habe ich versehentlich ausgegeben ps -ef | grep -i iommu
, und sehen Sie, was ich gerade gefunden habe …
rockshooter ~ # ps -ef | grep iommu
root 66 2 0 02:57 ? 00:00:00 [amd_iommu_v2]
Wenn ich einen Kernel-Thread sehe, besteht möglicherweise die Möglichkeit, dass ich IOMMU zum Laufen bekomme. Mein Kernel sagt nur nichts dazu. Das ist nur eine wilde Vermutung ... aber ich werde es trotzdem versuchen.
Antwort1
IOMMU-Hauptoptionen
Versuchen Device Drivers >> IOMMU Hardware Support
:
AMD IOMMU
Aktivieren Sie dann AMD IOMMU support
.
DMA-Neuzuordnung
AktivierenSupport for Intel IOMMU using DMA Remapping Devices
Optional: IRQ-Neuzuordnung
AktivierenSupport for Interrupt Remapping
Optional: Version 2-Unterstützung aktivieren
AMD IOMMU Version 2 driver
PCI-Option
Bus options (PCI etc.) >> PCI Stub
Niemals grep
die Konfigurationsdatei, verwenden Sie immer menuconfig
und den /
Schlüssel, um nach den erforderlichen Optionen zu suchen. Es gibt drei Probleme mit der Anleitung, die Sie verlinkt haben:
- Es ist auf Fedora/Redhat-Benutzer zugeschnitten.
- Aufgrund von Nr. 1 ist die Kernelversion anders, daher befinden sich die Optionen an einer anderen Stelle.
- Der Kernel von Gentoo ist neuer als der im Handbuch verwendete Kernel.
Aktualisieren
Mein Motherboard ist zu alt, um PCI-Passthrough zu unterstützen, aber ich wollte Ihnen zeigen, dass die Optionen jetzt richtig aktiviert sind. Verwenden Sie genau die Optionen, die ich Ihnen angewiesen habe:
IOMMU-Hauptoptionen
AGP: Checking aperture...
[ 0.000000] AGP: No AGP bridge found
[ 0.000000] AGP: Node 0: aperture [bus addr 0xc4000000-0xc5ffffff] (32MB)
[ 0.000000] Aperture pointing to e820 RAM. Ignoring.
[ 0.000000] AGP: Your BIOS doesn't leave an aperture memory hole
[ 0.000000] AGP: Please enable the IOMMU option in the BIOS setup
[ 0.000000] AGP: This costs you 64MB of RAM
[ 0.000000] AGP: Mapping aperture over RAM [mem 0xc4000000-0xc7ffffff] (65536KB)
...
[ 0.959270] PCI-DMA: Disabling AGP.
[ 0.959337] PCI-DMA: aperture base @ c4000000 size 65536 KB
[ 0.959338] PCI-DMA: using GART IOMMU.
[ 0.959340] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
...
[ 1.375277] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[ 1.375277] AMD IOMMUv2 functionality not available on this system
Antwort2
Endlich, nach vielem Jammern, Klagen und Kopfzerbrechen, habe ich herausgefunden, was los war.
Wie sich herausstellt,IOMMU hat die ganze Zeit funktioniert, die Kernel-Protokolle haben es nur nicht angezeigt.Aber der IOMMU-Treiber war da, er funktionierte und ich fand es zufällig heraus, als ich fälschlicherweise ps -ef
Folgendes dmesg
eintippte:
rockshooter ~ # ps -ef | grep -i iommu
root 66 2 0 04:19 ? 00:00:00 [amd_iommu_v2]
Als ich sah, dass der Kernel-Thread lief, dachte ich, vielleicht funktioniert mein IOMMU tatsächlich? Also führte ich dieselben Konfigurationsschritte aus, die ich zuvor für Debian ausgeführt hatte, und siehe da, eine Stunde später war ich auf meiner virtuellen Maschine, die an meine Grafikkarte angeschlossen war, und spielte einige Spiele.
Bitte speichern Sie diesen Thread für zukünftige Referenzzwecke, da ich gute drei Wochen gebraucht habe, um das herauszufinden. Ich habe dem anderen Poster dennoch wohlverdiente +50 Reputationspunkte dafür gegeben, dass er sich die Mühe gemacht hat, dieses Problem einzurichten und zu testen.