Kurze Frage:
Wie kann ich die intel_iommu
Einstellung im Linux-Kernel aktivieren? Ich führe einen Debian-Host mit dem Bootloader grub2 aus. Die Dokumentation, die ich gesehen habe, sagt zu bearbeiten /boot/grub/menu.lst
, was nur für Grub 1.x relevant zu sein scheint, da ich diese Datei nicht habe.
Ich habe das Verständnis (und die letzte Option, die mir in den Sinn kommt), dass durch Ändern dieser Startoption möglicherweise die folgende Fehlermeldung in entfernt wird /var/log/kern.log
vboxpci: No IOMMU domain (attach)
Lange Frage:
Ermöglichen eines Gastbetriebssystems direkten Zugriff auf die Grafikkarte
Kürzlich wurde mir klar, dass es möglich ist, ein PCI-Express-Gerät an Gastbetriebssysteme zu übergeben, die in Virtualbox ausgeführt werden. Cool, dachte ich mir! Ich habe zwei NVIDIA Quadro FX-Grafikkarten (mit vorhandener SLI-Bridge-Verbindung, die hoffentlich keine Probleme bereiten) und möchte die zweite Grafikkarte dem Gastbetriebssystem widmen, damit ich die OpenGL-Funktionen verwenden kann Photoshop et al.
NVIDIA vermarktet diese " SLI Multi-OS " -Konfiguration, die ich eigentlich schon seit Ewigkeiten einrichten wollte, aber ich möchte nicht übermäßig viel Geld für die Virtualisierungssoftware (Parallels Workstation Extreme) ausgeben, wenn ich schon war Ich benutze VirtualBox schon seit Jahren sehr gerne.
Host-System
Ich führe Linux-3.5.0-19 aus den Debian-Repositories auf einer recht hochwertigen Workstation aus (Asus P6T7 WS Supercomputer Mobo mit Intel ICH10R-Chipsatz und Xeon W3680-CPU) und möchte die IOMMU-Unterstützung im Kernel einschalten am besten ohne es selbst kompilieren zu müssen.
BIOS
In den BIOS-Einstellungen habe ich die VT-x- und VT-d-Unterstützung aktiviert. Ich konnte jedoch nichts sehen, was speziell IOMMU erwähnte.
Anschließen des PCI-Geräts
Das war angenehm überraschend einfach! Die offizielle Dokumentation zu VirtualBox finden Sie hier . Was ich getan habe, was ich weniger eindeutig fand, war zu öffnen nvidia-settings
, die sekundäre Grafikkarte auszuwählen und die Bus-ID zu notieren ("PCI: 5: 0: 0" in meinem Fall). Dann von der Kommandozeile des Hosts: -
VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0
(Als ich das erste Mal ausgeführt habe, ist ein Fehler aufgetreten, weil VirtualBox einen PIIX-Chipsatz emuliert hat. Es heißt, dass PCI-Pass-Through nur mit ICH9-Chipsätzen funktioniert. Ich habe den Chipsatz in den Einstellungen des VirtualBox VM-Systems auf ICH9 geändert und den Gast eingeschaltet Nach einem Neustart funktionierte alles einwandfrei, so dass ich den Gast herunterfuhr und den Befehl erneut ausführte.)
Es gab keine Ausgabe, und ich wurde fast sofort zur Befehlszeile zurückgebracht.
Verwenden der Host-GPU vom Gast
Bevor ich den Gast einschaltete, startete ich zuerst den Host-Rechner von virtualbox-dkms neu, falls etwas Undokumentiertes im Kernel passieren musste. Da ich den vorherigen Befehl ohne sudo
Berechtigungen ausgeführt habe, bezweifle ich, dass Änderungen vorgenommen wurden.
Als ich den Gast das nächste Mal gestartet habe, hat Windows Update seine Arbeit aufgenommen und die richtigen NVIDIA-Treiber automatisch erkannt und installiert. Alles sieht soweit gut aus. Bevor ich das Gerät benutzen konnte, musste ich den Gast neu starten ...
Problem
Nachdem die Grafikkartentreiber auf dem Gast installiert und das PCI-Gerät angeschlossen sind, kann ich nicht auf den Windows-Desktop zugreifen. Ich rufe den Windows-Anmeldebildschirm auf und nach dem Anmelden friert der Bildschirm ein. Ich sage nur "Willkommen", daneben befindet sich ein blauer Kreis, der sich drehen soll, aber nicht.
In /var/log/kern.log
sind die zuletzt gedruckten Nachrichten: -
vboxpci: vboxPciOsDevInit: dev=500
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061bea0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
device eth0 entered promiscuous mode
power state: 0
vboxpci: No IOMMU domain (attach)
Irgendeine Idee, wie man das behebt?
AKTUALISIEREN:
Ich habe den Kernel jetzt mit gebootet intel_iommu=on
, aber die Dinge funktionieren immer noch nicht vollständig. Nach dem Neustart des Hosts startet der Gast, meldet sich in Ordnung an und alles scheint so zu sein, wie es war, bevor irgendetwas davon gestartet wurde. Meine 2. Grafikkarte gibt nichts aus.
Im Geräte-Manager befindet sich neben dem Quadro FX-Gerät ein Ausrufezeichen und in den Geräteeigenschaften wird der Fehlercode 12 mit der Meldung "Dieses Gerät kann nicht genügend freie Ressourcen finden" angezeigt. Weitere Beschreibung auf technet.microsoft.com .
Im Host-Kernel-Log sieht es vielversprechend aus:
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061baa0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
created IOMMU domain ffff88058377c9a0
device eth0 entered promiscuous mode
power state: 0
vboxpci: iommu_attach_device() success
Wenn ich das Gastbetriebssystem ein zweites Mal starte, ohne den Host neu zu starten, friert die Anzeige in der Phase "Willkommen" erneut ein. Damit ist die Anmeldephase definitiv beendet, da ich Windows-Verknüpfungen verwenden könnte, um den Computer herunterzufahren, ohne ein Herunterfahren zu erzwingen.
Jetzt habe ich keine Ideen mehr ... Irgendwelche Vorschläge, um das zum Laufen zu bringen? Weitere Informationen, die ich bereitstellen kann?
UPDATE2:
dmesg
enthält einige weitere interessante Fehler, aber ich weiß nicht, was ich dagegen tun kann:
IOMMU 0 0xfbfff000: using Queued invalidation
IOMMU 1 0xfbffe000: using Queued invalidation
------------[ cut here ]------------
WARNING: at /build/buildd/linux-3.5.0/drivers/iommu/intel-iommu.c:4254 init_dmars+0x39b/0x74f()
Hardware name: System Product Name
Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.
BIOS vendor: American Megatrends Inc.; Ver: 0811 ; Product Version: System Version
...
Your BIOS is broken; RMRR ends before it starts!
quelle
intel_iommu=soft
. Sie können versuchen, vorbeiintel_iommu=on
.CONFIG_CMDLINE_LINUX=intel_iommu=on
in/etc/default/grub
. Jetzt bootet der Gast, erkennt aber die Grafikkarte nicht ...intel_iommu=soft
scheint keine gültige Kerneloption zu sein, und als ich sie verwendete, kehrte sie zu zurückintel_iommu=on
. Von www.kernel.org können Sie habeniommu=soft
, aber ich kann keine Dokumentation dafür finden. Wissen Sie, was es ist tut?iommu=soft
. Es deaktiviert die Hardware-IOMMU (die auf meinem System zahlreiche DMA-Fehler verursacht) und verwendet stattdessen eine Software-IOMMU. Hier ist ein Link zu einem alten Thread: Vorschlag, iommu = soft für alle Kernelpakete zu verwendenintel_iommu=igfx_off
...Antworten:
Ich habe VGA-Passthrough für eine NVIDIA GTX 760 mit KVM als Hypervisor mit vfio-vga erhalten. Ich habe es noch nie mit Virtualbox versucht. Es war ein Schmerz, aber funktioniert gut, nachdem die Konfiguration richtig gemacht wurde. KVM ist genauso praktisch wie Virtualbox für schnelle VMs von Ihrem Desktop aus, und Sie könnten es als eine weitere Option in Betracht ziehen.
Dieser Thread enthält unzählige Informationen zu vielen verschiedenen Konfigurationen und Schritten zur Fehlerbehebung und war sehr hilfreich: https://bbs.archlinux.org/viewtopic.php?id=162768
quelle
Wenn Ihr Nvidia-Treiber angibt, dass nicht genügend freie Ressourcen gefunden wurden, deaktivieren Sie den emulierten "Standard-VGA-Adapter" im Geräte-Manager. Starten Sie den Gast neu. Möglicherweise geschieht Folgendes in der angegebenen Reihenfolge:
1) Ihr VM-POST / -Start erfolgt auf dem emulierten VGA-Adapter. 2) Der emulierte VGA-Adapter wird kurz vor dem Aufrufen des Anmeldebildschirms leer. 3) Der Nvidia-Treiber wird geladen und zeigt die Passthrough-GPU an. Der Anmeldebildschirm wird auf der Nvidia-Karte angezeigt.
Mit etwas Glück könnten Sie feststellen, dass die Dinge von da an gut funktionieren. Das ist mehr oder weniger genau das, was bei meinem ähnlichen Setup mit Xen passiert. Bitte melden Sie die Ergebnisse. :)
quelle
Es hört sich so an, als hätten Sie zwei verschiedene Probleme. Ein Neustart mit VGA Pass-Through kann ein echter Bär sein. In Xen wird das VGA-Gerät häufig als Wechseldatenträger angezeigt, und einige Benutzer hatten vor dem Neustart mehr Glück, das Gerät auszuwerfen.
Der Code 12-Fehler kann möglicherweise behoben werden, indem das virtuelle Videogerät einfach im Windows-Geräte-Manager deaktiviert wird.
quelle
Versuchen Sie, eine der folgenden Einstellungen vorzunehmen
/etc/grub
:iommu=memmaper
iommu=soft
vga=normal
vesa=0
Ich habe ein neues AMD 64-Bit-System und festgestellt, dass Linux Probleme mit den Nvidia- und DMA-Einstellungen hat, die durch die iommu-Einstellungen im BIOS verursacht werden. Diese Einstellungen in grub haben das Problem für mich behoben.
Lesen Sie dies für weitere Details .
quelle
Getestet auf HP DC7900 mit der Meldung "IOMMU gefunden":
integriertes Video deaktivieren
quelle