it-swarm.com.de

VGA-Passthrough mit QEMU und KVM - Auf dem Bildschirm wird nichts angezeigt

In den letzten Tagen habe ich versucht, eine virtuelle Windows-Maschine mit VGA-Passthrough einzurichten, wobei ich dieses Handbuch als Hauptreferenz verwende: https://www.pugetsystems.com/labs/articles/Multiheaded-NVIDIA- Gaming-using-Ubuntu-14-04-KVM-585 /

Mein PC verwendet ein Intel i7-4790 mit einer integrierten Intel HD 4600, die ich als primäre Karte verwende, und eine NVIDIA GTX 960, die ich durchlassen möchte.

Ich habe die NVIDIA-Treiber installiert und es geschafft, die NVIDIA-Karte problemlos an den VFIO-PCI-Controller zu binden, nachdem ich Hybridgrafiken in den NVIDIA-Einstellungen deaktiviert hatte.

Ich habe versucht, die nvidia-Treiber auf die schwarze Liste zu setzen und mit pci-stub die GPU zu "stehlen", um mögliche Fehler zu vermeiden, aber es hat nicht funktioniert. Daher habe ich die nvidia-Module nach dem Start des Betriebssystems manuell entladen Skript (im Konsolenmodus):

#!/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

Ich habe überprüft, ob dies funktioniert, indem ich das Gerät (gpu) entfernt und überprüft habe, ob die Karte beim erneuten Scannen von vfio-pci anstelle von nvidia-Treibern beansprucht wurde.

Nachdem ich alle Treiber eingerichtet hatte, startete ich das VM mit diesem Skript:

#!/bin/bash

Sudo qemu-system-x86_64 -enable-kvm -M q35 -m 4096 -cpu Host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-bios /usr/share/seabios/bios.bin -vga none \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on \
-device virtio-scsi-pci,id=scsi \
-drive file=/home/xanty/windows1.img,id=disk,format=raw,cache=none,if=none -device scsi-hd,drive=disk \
-drive file=/home/xanty/Descargas/windows7pro.iso,id=isocd,cache=none,if=none -device scsi-cd,drive=isocd \
-boot menu=on

exit 0

Und ich habe es endlich zum Laufen gebracht, und wenn ich die PCI-Informationen auf dem QEMU-Monitor überprüfe (Bild hier) , sieht alles gut aus, aber der zweite Monitor, den ich an den DVI-I-Port meiner NVIDIA-Karte angeschlossen habe, funktioniert nicht nichts zeigen. Der Monitor scheint kein Signal zu empfangen .

Ich brauche Hilfe, um herauszufinden, wie ich das lösen kann, oder finde zumindest eine praktikable Alternative zu dieser Methode.

Als zusätzliche Information verwende ich Ubuntu Studio 16.04, mein erster Monitor ist ein Samsung-Monitor, der an den Intel DVI-I-Anschluss angeschlossen ist, und mein zweiter Monitor ist ein BENQ mit einem VGA- und einem DVI-I-Anschluss, und ich habe ihn angeschlossen an den GTX 960 DVI-I-Anschluss (dieses Modell hat keinen VGA-Anschluss)

Ich freue mich über jede Hilfe, die Sie leisten können.

EDIT 1:

Normalerweise entferne ich das Gerät, bevor ich versuche, das VM zu starten, und nachdem ich die NVIDIA-Module entfernt habe, und scanne es erneut:

echo > 1 /sys/bus/pci/devices/0000:01:00.0/remove
echo > 1 /sys/bus/pci/devices/0000:01:00.1/remove
echo > 1 /sys/bus/pci/rescan

Wenn ich das tue, scheint das VM ohne größere Probleme zu laufen, aber wenn ich es nicht tue, friert der QEMU-Monitor ein, wenn ich versuche, es zu starten, und ich kann es nicht schließen oder den Prozess stoppen, es sei denn, ich töte -9 es. Das liegt an der Zeile:

-device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on \

Wenn ich den "x-vga = on" -Parameter entferne, funktioniert es immer noch einwandfrei.

BEARBEITEN 2: Nach einigen weiteren Tests und Recherchen zu diesem Problem stellte ich fest, dass der vfio-pci-Treiber die GPU nicht aktivierte, als ich kvm startete.

Nach dem Start von kvm gibt der Befehl "dmesg | grep -i vfio" die folgenden neuen Zeilen zurück:

[ 1572.975051] vfio_ecap_init: 0000:01:00.0 hiding ecap [email protected]
[ 1572.975063] vfio_ecap_init: 0000:01:00.0 hiding ecap [email protected]

Es sollte eine weitere Zeile ähnlich der folgenden geben:

[ 3182.192258] vfio-pci 0000:01:00.0: enabling device (0000 -> 0003)

Aber es fehlt.

EDIT3: Ich habe gerade ein Downgrade auf Ubuntu Studio 14.04 durchgeführt und konnte pci-stub endlich dazu bringen, die gpu vor den nvidia/nouveau-Treibern zu holen. Ich kann die GPU einfach und ohne Abstürze an vfio-pci-Treiber binden, und die Ausgabe nach dem Start von kvm sieht folgendermaßen aus:

[  130.988082] vfio-pci 0000:01:00.0: enabling device (0000 -> 0003)
[  130.988186] vfio_ecap_init: 0000:01:00.0 hiding ecap [email protected]
[  130.988196] vfio_ecap_init: 0000:01:00.0 hiding ecap [email protected]

Aber nach alledem erhält der Monitor immer noch kein Signal . Ich brauche wirklich etwas Hilfe. Meine einzige verbleibende Option ist, ein Downgrade meines Kernels von 4.2.0-27-lowlatency auf 4.1.x zu versuchen, und i ' Ich mache mir Sorgen, es wird mein Betriebssystem vermasseln.

3
Xanty

Gelöst.

Nach langem Nachforschen fielen mir zwei Hauptprobleme auf:

1- Es gab ein Problem mit den Treibern meiner integrierten Grafikkarte i915 und ich stellte fest, dass ich entweder meinen Kernel mit einem inoffiziellen Patch patchen oder meine virtuelle Maschine im UEFI-Modus installieren und einen BIOS-Start simulieren musste. Dafür musste ich ovmf installieren.

apt-get install ovmf

2- Die Windows NVIDIA-Treiber haben festgestellt, dass ich Windows auf KVM ausgeführt habe und meine GPU blockiert habe.

Am Ende, nach der Installation von ovmf, folgte ich diesem Tutorial, wie man es mit virt-manager und ovmf einrichtet: http://vfio.blogspot.com.es/2015/05/vfio-gpu-how -to-series-part-4-our-first.html

Außerdem wird erläutert, wie Sie die XML-Konfiguration des Computers bearbeiten, um kvm von den nvidia-Treibern zu verschleiern.

Ich habe auch ein lustiges Feature herausgefunden:

Wenn ich eine VGA-Startoption (VNC-Server) wähle, um den Computer in einem Fenster zu emulieren, erkennt das Fenster nach dem Start das Fenster als zweiten physischen Monitor . , so dass ich maus und tastatur erfassen kann, ohne die usb controller passieren zu müssen.

3
Xanty