Wie aktiviere ich KVM-Geräte-Passthrough unter Linux?

13

Ich habe ein MSI-GD65 Gaming-Motherboard und ein Intel i7 4790. VT-D ist im Abschnitt CPU-Funktionen des BIOS aktiviert.

Ich verwende Ubuntu 14.04.1 LTS und wenn ich versuche, ein Gerät abzutrennen, wird folgende Meldung angezeigt:

# virsh nodedev-remove pci_0000_00_1f_2

Fehler: Fehler beim Trennen des Geräts pci_0000_00_1f_2 Fehler: Vorgang nicht unterstützt: Auf diesem System wird derzeit weder die VFIO- noch die KVM-Gerätezuweisung unterstützt

Dmesg enthält einige Informationen zu IOMMU, aber ich kann nicht sagen, ob dies bedeutet, dass VT-D aktiviert ist

$ dmesg | grep -i iommu

[0.027450] dmar: IOMMU 0: reg_base_addr fed90000 ver 1: 0 cap c0000020660462 ecap f0101a
[0.027455] dmar: IOMMU 1: reg_base_addr fed91000 ver 1: 0 cap d2008020660462 ecap f010da
[0.0275x]

Kann mir jemand raten, was ich tun muss, um VT-D auf diesem System zu aktivieren und PCI-Geräte an KVM-Gäste weiterzuleiten?

Anonymouslemming
quelle
Haben Sie nach dem Aktivieren von VT und VT-d ein vollständiges Powercycle durchgeführt?
Dyasny

Antworten:

11

Die Lösung für dieses Problem besteht darin, IOMMU in Ihren GRUB-Startparametern zu aktivieren.

Sie können dies tun, indem Sie in / etc / default / grub Folgendes einstellen

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

Wenn Sie einen AMD-Prozessor verwenden, sollten Sie amd_iommu=onstattdessen die Startparameter anhängen

GRUB_CMDLINE_LINUX_DEFAULT = "leises Spritzen amd_iommu = on"

Führen Sie dann aus update-grubund starten Sie neu

Dieser Link hat mir sehr geholfen: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

Siehe auch: https://pve.proxmox.com/wiki/Pci_passthrough

Dies entging mir etwas, als ich glaubte, dass iommu eine AMD-Alternative zu VT-D sei.

Anonymouslemming
quelle
Und wenn dies nicht funktioniert, unterstützt Ihre CPU möglicherweise nicht VT-D oder AMD-VI (die Frage macht deutlich - ich
poste
5

Hinzufügen zu Anonymouslemmings Antwort: Es scheint einen Fehler in Ubuntu (18.04 für mich) zu geben, der dazu führt, dass die Einstellung für GRUB_CMDLINE_LINUX_DEFAULT in / etc / default / grub ignoriert wird.

Dies kann durch Auskommentieren von GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub.d/50-curtin-settings.cfg behoben werden

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567

Mads Y.
quelle
1

Sie scheinen die Hardwareanforderungen zu haben, weil ein anderes Modul es verwendet (IOAPIC). In diesem Fall müssen Sie einfach das Softwareende einrichten.

Anscheinend müssen Sie sicherstellen, dass alle Voraussetzungen installiert sind, um das Entfernen des entsprechenden Geräts zu unterstützen. Es hört sich so an, als hätten Sie sie nicht installiert oder sie sind nicht eingerichtet.

Sie müssen die entsprechenden Bibliotheken und Kernelmodule installiert und initialisiert haben, bevor Sie versuchen, sie in einem solchen Fall zu verwenden. Dies sind verschiedene "Host" -Systemdienstprogramme und Kernelmodule für Ihr KVM-Setup.

Sie müssen den Abschnitt des Handbuchs lesen, in dem beschrieben wird, wie Sie die entsprechende KVM-Lösung ordnungsgemäß einrichten, und diese Schritte ausführen, bevor Sie versuchen, nur die Dienstprogramme auszuführen. Sie werden nicht einfach beim ersten Start eingerichtet, nur weil die erforderlichen Pakete installiert sind.

Bitte beachten Sie, dass das betreffende Gerät, wenn es in das Motherboard eingebettet ist, technisch gesehen möglicherweise kein PCI-Gerät ist, sondern ein PCI-zugeordnetes Gerät. Diese Geräte werden tatsächlich auf andere Weise angeschlossen, aber mithilfe ihres BIOS dem PCI-BIOS-Bereich zugeordnet. Sie können mit der Geräteentfernung kompatibel sein oder nicht, abhängig von verschiedenen Aspekten, wie sie an das System angeschlossen sind.

Darüber hinaus können Sie Untergeräte möglicherweise nicht trennen, ohne übergeordnete Geräte zu trennen, wenn ihre Treiber voneinander abhängig sind. Sie können Geräte nur mit absoluter Sicherheit trennen, deren übergeordnetes Gerät der PCI-Controller, die PCI-Bridge oder ein anderer unterstützter Bus-Controller oder eine Bridge ist

Robert Wm Ruedisueli
quelle
Danke für die Auskunft. Ich denke, meine Frage hätte "Wo finde ich Dokumentation dazu in KVM?" Enthalten, um genauer zu sein.
Anonymouslemming
0

Ich bin auf centos7

Ich hatte diesen Fehler, der mich hierher führte, aber mein Problem bestand nicht darin, das (in meinem Fall) zu aktualisieren vim /etc/sysconfig/grubund das intel_iommu=onZeilenende für hinzuzufügenGRUB_CMDLINE_LINUX

Ich musste diesen Befehl ausführen

grub2-mkconfig -o /boot/grub2/grub.cfg

dann neu starten

Hinweis: Ich habe jedoch auch grub2-mkconfig mit einem Neustart vor dem obigen Befehl ausgeführt, und das hat nichts für mich getan, was ich gesehen habe.

Referenz: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

Kommentar 11 und 12

gstlouis
quelle