Wie kompiliere ich meinen Gentoo-Kernel für AMD IOMMU?

Wie kompiliere ich meinen Gentoo-Kernel für AMD IOMMU?

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=forceder 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:

  1. Verwenden des Standardkernels anstelle des gehärteten.
  2. 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.
  3. 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:

IOMMU-Optionen

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

Busoptionen

Bus options (PCI etc.) >> PCI Stub


Niemals grepdie Konfigurationsdatei, verwenden Sie immer menuconfigund den /Schlüssel, um nach den erforderlichen Optionen zu suchen. Es gibt drei Probleme mit der Anleitung, die Sie verlinkt haben:

  1. Es ist auf Fedora/Redhat-Benutzer zugeschnitten.
  2. Aufgrund von Nr. 1 ist die Kernelversion anders, daher befinden sich die Optionen an einer anderen Stelle.
  3. 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 -efFolgendes dmesgeintippte:

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.

verwandte Informationen