vga-passthrough con kvm / qemu su laptop con funzionalità Optimus


6

ho un laptop asus n550jv con il seguente output da 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)

Voglio eseguire Windows 8.1 VM con vga-passthrough, quindi non devo dualboot. ho letto che hai bisogno di una scheda con una porta di output dedicata ma non ho capito perché e ci sono stati alcuni post sui forum che indicano che potrebbe funzionare ancora.

sto cercando di eseguire il vm con questo comando:

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

voglio usare vga-passthrough ma continuo a ricevere errori su 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

ho trovato sull'arco vga-passthrough thread queste informazioni :

Ciò significa che a) il kernel non supporta CONFIG_VFIO_PCI_VGA oppure b) il dispositivo non è un dispositivo VGA. Per testare a):

$ grep CONFIG_VFIO_PCI_VGA / boot / config-uname -r

Per testare b):

$ lspci -s 2: 00.0 | grep VGA

Se hai la grafica host Intel, hai ancora bisogno della patch i915 per il tuo kernel. Se si ospita la grafica di Radeon, è necessaria l'altra patch dell'arbitro VGA. Entrambi sono stati citati nelle ultime pagine, IIRC.

ottengo CONFIG_VFIO_PCI_VGA=yper (a). nel mio caso (b) è lspci -s 1:00.0 | grep VGAe non emette nulla poiché la mia scheda nvidia è elencata come "controller 3d", quindi ho delle domande:

  1. la patch i915 o ovmf supporteranno la mia scheda nvidia elencata come controller 3d?

    • in caso contrario, c'è un modo per far riconoscere la scheda nivida come compatibile con vga?
  2. eseguire ovmf è semplice come impostare -bios /usr/share/ovmf/OVMF.fd?

  3. perché è -vga=nonerichiesto per l'assegnazione vga?

    • se -vga=noneè davvero necessario, allora c'è un altro modo per vedere effettivamente lo schermo? ad esempio, posso reindirizzare la scheda nvidia alla porta hdmi o fare in modo che la scheda nvidia acquisisca completamente lo schermo del laptop?

ottengo anche errori per alsa / pulse, alcuni di loro vengono sputati che generalmente seguono

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

lo so perché root non ha accesso all'impulso a livello di utente ma non voglio eseguire l'impulso a livello di sistema, c'è un modo per far funzionare pulseaudio senza doverlo avviare in modalità di sistema? in caso contrario, ho problemi ad abilitare la modalità di sistema comunque. C'è una spiegazione qui e pulseaudio --systemfunziona, ma non riesco a connettere alcun client al server di impulsi, continuo a ricevere errori come ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied.

Risposte:


7

Il motivo per cui è necessaria un'uscita video dedicata è che al momento il sistema operativo host non può accedere al framebuffer di uscita della scheda assegnata al sistema operativo guest.

VT-d impedisce all'host di accedere / mappare direttamente la memoria grafica.

Normalmente, un driver modificato (Nvidia Optimus o Bumblebee su Linux) espone i risultati di una finestra in esecuzione sulla scheda Nvidia come trama alla grafica Intel, che poi la fonde con l'ambiente desktop.

Ciò richiede che i driver di entrambe le schede grafiche vengano modificati e che comunichino / condividano la memoria, cosa impossibile tra il sistema operativo host e quello ospite, per quanto sono riuscito a trovare.

Con una porta di output dedicata, la scheda assegnata alla macchina virtuale può essere inconsapevolmente ignara di questo mumbo-jumbo di virtualizzazione e possono essere utilizzati driver normali che visualizzano l'output su una porta di output fisica, proprio come farebbe quando si esegue su bare metallo.

Una porta di output dedicata, per quanto li ho incontrati in natura, è disponibile solo su desktop o ThinkPad Lenovo con doppia grafica (quest'ultima delle quali collega alcune delle porte di output direttamente a Nvidia, rovinando il supporto di Bumblebee su Linux nel processo).


grazie, ha senso.
peccato

Non sarebbe relativamente semplice creare un falso output di monitoraggio per la scheda nvidia in modo che la VM funzionasse correttamente e quindi inoltrare il video al sistema operativo host riproducendolo in streaming con ffmpeg o qualcosa di simile (qualcosa come Steam in casa streaming)
Cestarian

Potrebbe essere in ritardo al gioco, possiedo un ASUS N550JK (che è il modello successivo all'N550JV, l'unica differenza è 750M contro 850M). La scheda nVidia è infatti cablata a una porta di uscita dedicata, vale a dire DisplayPort. La scheda Intel è collegata alla porta HDMI e al display LVDS interno. (Questo è anche il motivo per cui DisplayPort non funziona su Linux, a meno che non si avvii un secondo server X utilizzando la scheda nVidia).
yjwong,

@Yjwong, sono in grado di utilizzare il displayport senza un secondo server X quindi immagino che siano cablati in modo diverso ..
Erp,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.