VGA-Passthrough mit kvm / qemu auf einem optimus-fähigen Laptop

10854
erp

Ich habe ein Laptop Asus N550jv mit der folgenden Ausgabe von lspci -nn | grep "VGA|3D":

00:02.0 VGA compatible controller [0300]: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller [8086:0416] (rev 06) 01:00.0 3D controller [0302]: NVIDIA Corporation GK107M [GeForce GT 750M] [10de:0fe4] (rev ff) 

Ich möchte ein Windows 8.1 VM mit VGA-Passthrough ausführen, so dass ich nicht Dualboot. Ich habe gelesen, dass Sie eine Karte mit einem dedizierten Ausgabeport benötigen, aber ich habe nicht herausgefunden, warum und es gibt einige Beiträge in Foren, die darauf hinweisen, dass es möglicherweise noch funktioniert.

Ich versuche, die VM mit diesem Befehl auszuführen:

qemu-system-x86_64 -enable-kvm -M q35 -m 4096 -cpu host \ -smp 4,sockets=1,cores=4,threads=2 \ -bios /usr/share/ovmf/OVMF.fd \ -usb -usbdevice tablet \ -soundhw hda \ -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 \ -drive file=/home/duke/windows.img,id=disk,format=raw -device ide-hd,bus=ide.0,drive=disk \ -drive file=/home/duke/Downloads/windows.iso,id=isocd -device ide-cd,bus=ide.1,drive=isocd \ -vga vmware \ -boot menu=on 

Ich möchte VGA-Passthrough verwenden, aber ich bekomme immer Fehler über X-VGA:

qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: vfio: Device does not support requested feature x-vga qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: vfio: failed to get device 0000:01:00.0 qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: Device initialization failed. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: Device 'vfio-pci' could not be initialized 

Ich habe im arch vga-passthrough Thread diese Informationen gefunden :

Dies bedeutet, dass entweder a) Ihr Kernel CONFIG_VFIO_PCI_VGA nicht unterstützt oder b) das Gerät kein VGA-Gerät ist. Um a) zu testen:

$ grep CONFIG_VFIO_PCI_VGA / boot / config-uname -r

Um b) zu testen:

$ lspci -s 2: 00.0 | grep VGA

Wenn Sie über Intel-Hostgrafiken verfügen, benötigen Sie noch den i915-Patch für Ihren Kernel. Wenn Sie Radeon-Hostgrafiken verwenden, benötigen Sie den anderen VGA-Arbiter-Patch. Auf beide wurde auf den letzten Seiten, IIRC, verwiesen.

ich bekomme CONFIG_VFIO_PCI_VGA=yfür (a). in meinem Fall (b) ist lspci -s 1:00.0 | grep VGAund es gibt nichts aus, da meine NVIDIA-Karte als "3D-Controller" aufgeführt ist, also habe ich Fragen:

  1. wird der i915 patch oder ovmf meine nvidia-karte unterstützen, die als 3d-controller aufgeführt ist?

    • Wenn nicht, gibt es eine Möglichkeit, die nivida-Karte als vga-kompatibel zu erkennen?
  2. läuft Ovmf so einfach wie das Einstellen -bios /usr/share/ovmf/OVMF.fd?

  3. Warum ist -vga=noneeine VGA-Zuordnung erforderlich?

    • Wenn -vga=nonewirklich erforderlich ist, gibt es eine andere Möglichkeit, den Bildschirm tatsächlich zu sehen? könnte ich zum Beispiel die nvidia-karte zum hdmi-port umleiten oder die nvidia-karte den laptop-bildschirm vollständig übernehmen?

Ich bekomme auch Fehler für Alsa / Pulse, ein paar von ihnen werden ausgespuckt, die im Allgemeinen folgen

alsa: Could not initialize ADCk alsa: Failed to open `default': alsa: Reason: Connection refused Home directory not accessible: Permission denied ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused 

Ich weiß, dass root keinen Zugriff auf den Pulse auf Benutzerebene hat, aber ich möchte den Puls nicht auf Systemebene ausführen. Gibt es eine Möglichkeit für pulseaudio zu arbeiten, ohne es im Systemmodus starten zu müssen? Wenn nicht, habe ich sowieso Probleme, den Systemmodus zu aktivieren. Es gibt eine Erklärung hier und pulseaudio --systemarbeitet, aber ich alle Clients auf den Impuls - Server keine Verbindung herstellen kann, halte ich immer Fehler wie ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied.

6

3 Antworten auf die Frage

7
wvdschel

Der Grund, warum Sie einen dedizierten Videoausgang benötigen, ist, dass das Host-Betriebssystem derzeit nicht auf den Ausgangsframebuffer der dem Gast-Betriebssystem zugewiesenen Karte zugreifen kann.

VT-d hindert den Host daran, direkt auf den Grafikspeicher zuzugreifen.

Normalerweise macht ein modifizierter Treiber (Nvidia Optimus oder Bumblebee unter Linux) die Ergebnisse eines Fensters, das auf der Nvidia-Karte ausgeführt wird, als Textur für die Intel-Grafik verfügbar, die es dann in Ihre Desktopumgebung einfügt.

Dies erfordert, dass die Treiber beider Grafikkarten geändert werden und der Speicher gemeinsam genutzt / freigegeben wird, was zwischen Host- und Gastbetriebssystem nicht möglich ist, soweit ich es gefunden habe.

Mit einem dedizierten Ausgabeport kann die der virtuellen Maschine zugewiesene Karte dieses mumbo-jumbo der Virtualisierung nicht bewusst sein, und es können normale Treiber verwendet werden, die die Ausgabe auf einem physischen Ausgabeport anzeigen, genau wie bei der Ausführung auf einem leeren Computer Metall.

Ein dedizierter Ausgabeport ist, soweit ich ihn in der Wildnis erlebt habe, nur auf Desktops oder Lenovo ThinkPads mit Dual-Grafik verfügbar (wobei letztere einige der Ausgabeports direkt mit dem Nvidia verbinden und den Bumblebee-Support unter Linux durcheinanderbringen im Prozess).

Danke, das macht Sinn. schade aber erp vor 8 Jahren 0
Wäre es nicht relativ einfach, eine gefälschte Monitorausgabe für die NVIDIA-Karte zu erstellen, damit die VM ordnungsgemäß ausgeführt wird, und das Video dann an das Hostbetriebssystem weiterleitet, indem es mit ffmpeg oder ähnlichem (etwas wie Steam's zu Hause) gestreamt wird Streaming) Cestarian vor 8 Jahren 0
Vielleicht bin ich zu spät dran, ich besitze einen ASUS N550JK (das ist das Nachfolgemodell des N550JV, nur 750M gegenüber 850M). Die nVidia-Karte ist tatsächlich mit einem dedizierten Ausgangsport, dem DisplayPort, verbunden. Die Intel-Karte ist mit dem HDMI-Anschluss und dem internen LVDS-Display verbunden. (Dies ist auch der Grund, warum der DisplayPort nicht unter Linux funktioniert, es sei denn, Sie starten einen 2nd X-Server mit der nVidia-Karte.) yjwong vor 8 Jahren 0
@yjwong, ich kann den Displayport ohne einen zweiten X-Server verwenden, also denke ich, dass sie anders verdrahtet sind. erp vor 7 Jahren 0
2
AlwaysLearning

Ich könnte mich irren, aber funktioniert KVM derzeit nicht nur mit diskreten Grafikkarten (die GT 750M ist eine Optimus-Karte)?

REF: http://www.linux-kvm.org/wiki/images/b/b3/01x09b-VFIOandYou-small.pdf

Ich hatte den Eindruck, dass optimus-fähige Karten _einig diskret sind: http://en.wikipedia.org/wiki/Nvidia_Optimus, sofern ich mich nicht irre ... erp vor 9 Jahren 0
Links ist defekt Robert Munteanu vor 8 Jahren 1
0
Michael Hampton

Eine Sache, die Sie nicht erwähnt haben, ist:

Gehen Sie in Ihr BIOS und aktivieren Sie die VT-d- Option. VT-d ist erforderlich, um ein PCI-Gerät an eine virtuelle Maschine weiterzuleiten .

http://kmpic.asus.com/images/2014/12/29/6bd4ef8d-62a3-4b0c-9674-5a2b0fa53c79.jpg

(Und selbst wenn das Problem dadurch nicht gelöst wird, sollten Sie es aktiviert lassen, da es Teil der Lösung ist.)

Danke, ich habe vergessen zu erwähnen, aber ich habe auch diesen Teil gemacht. erp vor 9 Jahren 0