Blacklist eine Nvidia-GPU für qemu / kvm Passthrough

4

Ich versuche, Windows in einer virtuellen Maschine auszuführen, während ich der VM eine direkte Passthrough-Funktion für die bessere Leistung gebe.

Ich habe eine integrierte Intel GPU (ich werde diese für den Host verwenden) und eine Nvidia GTX980 (ich möchte diese für die VM). Ich benutze Elementary OS 0.3.2 Freya 64 Bit.

Ich habe dies verfolgt Anleitung, aber bin jetzt bei Schritt 2 stecken. Ich kann nicht die Nvidia GPU auf die schwarze Liste gesetzt werden.

Um zu beginnen, mache ich lspci -nn | grep NVIDIA

Dies ergibt die folgende Ausgabe

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:13c0] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbb] (rev a1)

Als nächstes habe ich diese Zeile zur Datei /etc/initramfs-tools/modules hinzugefügt.

pci_stub ids=10de:13c0,10de:0fbb

Und ich habe dann mit update-initramfs -u neu geladen und danach neu gestartet.

Nach dem Neustart, wenn ich dmesg | grep pci-stub starte, bekomme ich folgende Ausgabe:

[    2.029626] pci-stub: add 10DE:13C0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[    2.029630] pci-stub: add 10DE:0FBB sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[    2.029637] pci-stub 0000:01:00.1: claimed by stub

Wie Sie sehen können, werden weder Audio noch Video durch Stub beansprucht.

Ich habe auch versucht, diese Option direkt in die Grub-Datei in etc/default/grub einzufügen, so dass die Zeile GRUB_CMDLINE_LINUX_DEFAULT wie folgt aussieht:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on pci-stub.ids=10de:13c0,10de:0fbb"

Aber das führte auch dazu, dass die Nvidia-Karte nicht auf die schwarze Liste gesetzt wurde.

Hat jemand eine Idee, was das verursacht?

    
Mathyn 10.01.2016, 11:49

5 Antworten

1

Ich richte auch qemu-kvm Passthrough ein, und ich hatte das gleiche Problem wie du. Ich verwende meine integrierte Intel-Grafikkarte als meine primäre GPU, also habe ich die nvidia-Einstellungen geöffnet und die Hybrid-Grafik deaktiviert, so dass die nvidia-Karte nicht verwendet wird: (Bild bezogen)

Danach hatte ich kein Problem, die Karte an vfio-pci zu binden.

Es ist möglich, dass die nvidia-Module Probleme beim Starten von qemu verursachen oder dass Sie die Hybridgrafik nicht deaktivieren können. Wenn dies der Fall ist, können Sie auch versuchen, was ich getan habe, und die nvidia-Module mit einem Skript wie diesem im Konsolenmodus (STRG + ALT + F1) manuell deaktivieren:

#!/bin/bash
sudo service lightdm stop
sudo rmmod nvidia_uvm
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
sudo service lightdm start

Dies stoppt den Display-Manager (in meinem Fall lightdm), deaktiviert die nvidia-Module in der richtigen Reihenfolge und startet den Display-Manager danach neu. Stellen Sie sicher, dass Sie dies im Konsolenmodus starten. Wenn Sie dies vom Desktop ausführen, wird das Skript wahrscheinlich nach der ersten Zeile unterbrochen.

Die nvidia-Module werden beim Neustart automatisch geladen, Sie können sie aber auch manuell erneut laden mit:

modprobe nvidia nvidia_modeset nvidia_drm nvidia_uvm

Hoffe, das hilft.

    
Xanty 19.07.2016 10:00
0

Haben Sie diesen Leitfaden link ? :) Es ist ziemlich neuere:)

    
tomsk 17.03.2017 20:15
0

Ihr Audio wurde von Stub beansprucht

[    2.029637] pci-stub 0000:01:00.1: claimed by stub

Das Video ist nicht. Ich habe das gleiche Problem, ich habe Nvidia und / oder Nouveau auf die schwarze Liste gesetzt. Ich benutze Ubuntu Server 15.10 also nicht genau das gleiche aber ich habe das selbe Problem. Ich habe das Interweb jetzt seit Wochen durchsucht und nichts.

bearbeiten Endlich gefixt, ich habe es hier gefunden: link

Also habe ich die Nvidia und Nouveau Module auf die schwarze Liste gesetzt und neu gestartet. Hoffe es hilft

erneut bearbeiten:

Meine aktuellen Schritte, die ich gemacht habe, um die PCI-Karten an pci-stub on arch mit Kernel 4.10.1-1 zu binden.

Ich habe / etc / default / grub so bearbeitet, dass es so aussieht GRUB_CMDLINE_LINUX_DEFAULT="leise intel_iommu = auf pci-stub.ids = 1002: 6798,1002: 679a, 1002: aaa0,1106: 3483"

Dann erstelle ich die neue grub-Konfigurationsdatei

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

Dann neu starten.

In /etc/mkinitcpio.conf Ich habe pci-stub zu Modulen hinzugefügt, so dass es so aussieht: MODULES="pci-stub"

dann ausführen

$ sudo mkinitcpio -P

um alle Ihre initramfs Images neu zu erstellen. Dann neu starten.

Dann diesen Befehl nur um sicherzustellen, dass sie von pci-grub

beansprucht wurden

$ dmesg | grep pci-stub

    
Dan 24.01.2016 18:56
0

Ich bin auf ähnliche Probleme wie Sie gestoßen (Lubuntu 16.04). Dies liegt daran, dass Treiber / Module die Geräte an sie binden, bevor pci-stub dies tun kann. Sie haben mindestens zwei Optionen hier:

Das erste und einfachste wäre, die Module, die das Gerät beanspruchen, auf die schwarze Liste zu setzen. Geben Sie lspci -knn | grep VGA -A 5 ein, um alle Ihre VGA-PCI-Geräte und ihre Gerätenummer und ihre Kernel-Module anzuzeigen.

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8c93]
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] GK208 HDMI/DP Audio Controller [1462:8c93]
--
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366]
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 High Definition Audio Controller [19da:1366]

Jetzt müssen Sie prüfen, welcher Treiber verwendet wird. Zum Beispiel griff mein Nouveau mein VGA-Gerät 02: 00.0, das ich für meine VM verwenden möchte, so dass ich diese in:

  

sudo nano /etc/modprobe.d/blacklist.conf blacklist nouveau

und du bist fertig.

In meinem Fall würde dies ein Problem verursachen, da ich zwei nVidia VGAs installiert habe (01: 00.0 und 02: 00.0), die beide mit demselben Treiber laufen. In meinem Fall werde ich den Treiber nicht in die Blacklist aufnehmen.

Ich entpacke nouveau manuell von meiner 02: 00.0 VGA-Karte, da ich sie benutzen wollte diese Karte für meinen VM-Gast und die 01: 00.0 VGA für meinen Linux-Host. Dank dieses Leitfadens habe ich herausgefunden, wie das geht: link

Geben Sie sudo tree /sys/bus/pci/drivers/nouveau ein. Tauschen Sie Nouveau mit jedem beliebigen Modul aus, das Ihr Gerät erfasst hat.

Sie sollten eine Liste wie folgt erhalten:

/sys/bus/pci/drivers/nouveau
├── 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0
├── 0000:02:00.0 -> ../../../../devices/pci0000:00/0000:00:05.0/0000:02:00.0
├── bind
├── module -> ../../../../module/drm
├── new_id
├── remove_id
├── uevent
└── unbind

Wir sehen, dass der Treiber Nouveau dazu verpflichtet ist: 0000: 01: 00.0 und 0000: 02: 00.0

Um meine Grafikkarte zu lösen und zu binden, muss ich zuerst lightdm.service ausschalten. Daher öffne ich die Konsole außerhalb der Desktop-Umgebung mit STRG + ALT + F2 zum Beispiel. Melden Sie sich als root an und geben Sie systemctl stop lightdm.service

ein

Jetzt kann ich das Modul von der Grafikkarte lösen:

echo -n "0000:02:00.0" > /sys/bus/pci/drivers/nouveau/unbind

und binden Sie es an jedes beliebige Modul (pci-stub oder vfio-pci). Ich habe vfio-pci benutzt.

echo -n "0000:02:00.0" > /sys/bus/pci/drivers/vfio-pci/bind

Danach können Sie Ihren Desktopmanager erneut starten: systemctl start lightdm.service

Wenn alles funktioniert hat, sollten Sie Ihr Gerät als gebunden an das von Ihnen angegebene Modul finden, indem Sie erneut lspci -knn | grep VGA -A 5 aufrufen.

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8c93]
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] GK208 HDMI/DP Audio Controller [1462:8c93]
--
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366]
    Kernel driver in use: vfio-pci
    Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 High Definition Audio Controller [19da:1366]

Leider verliert diese Problemumgehung nach dem Neustart ihre Wirkung. Doch ich habe nicht herausgefunden, wie man es persistent macht. Vielleicht kann mir sonst noch jemand einen Hinweis geben. So etwas wie ein Startscript wäre möglich, denke ich. Es wäre jedoch besser, das Gerät an ein bestimmtes Modul binden zu können, ohne es zuvor lösen zu müssen. Stellen Sie sich vor, ich möchte eines Tages den nvidia-Treiber verwenden. In diesem Fall wäre die Entbindung von Nouveau nutzlos, da die Grafikkarte an das nvidia-Modul gebunden wäre.

    
AlexOnLinux 03.11.2017 14:23
0

Deaktivieren Sie nvidia / nueveau mit grub config.

Es besteht die Möglichkeit, die module_blacklist=<module1>[,<module2>] (Dokumentation) zu übergeben. Anweisung an den Kernel über die grub2-Befehlszeile. Ich konnte den nuveau und nvidia Treiber mit dem folgenden Zusatz zum GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub deaktivieren (vergiss nicht sudo update-grub auszugeben):

module_blacklist=nvidia,nvidia_uvm,nvidia_drm,nvidia_modeset,nouveau

Es besteht auch die Möglichkeit, grub-Einträge mit und ohne diese Option für jeden Kernel automatisch zu generieren: link (erste Antwort). Aber es erwies sich als umständlicher als erwartet. Die ubuntu grub config ist sehr kompliziert. Stellen Sie sicher, dass Sie eine Sicherungskopie erstellen, bevor Sie damit experimentieren.

Dies ist besonders hilfreich, wenn Sie eine leistungsstarke NVIDIA-Karte für das Spielen in einer virtuellen Maschine mit VGA-Passthrough verwenden möchten, aber die Möglichkeit haben, diese für tiefgreifendes Lernen zu verwenden, z. B. tensorflow . Nur ein Neustart erforderlich, um zwischen diesen beiden zu wechseln.

    
user334287 22.02.2018 13:32

Tags und Links