Passagem VGA com QEMU e KVM - Nada na tela

3

Nestes últimos dias, tenho tentado configurar uma máquina virtual Windows com passagem VGA, usando este guia como minha referência principal:

Meu pc usa um intel i7-4790 com uma placa integrada Intel HD 4600, que eu uso como placa principal, e uma NVIDIA GTX 960 que é a que eu quero passar por aqui.

Eu instalei os drivers NVIDIA, e eu consegui ligar a placa nvidia ao controlador vfio-pci sem nenhum problema, depois de desabilitar os gráficos híbridos nas configurações da nvidia.

Eu tentei colocar os drivers nvidia na lista negra e usar o pci-stub para "roubar" a GPU deles, para evitar possíveis erros, mas não funcionou, então eu descarrego manualmente os módulos nvidia depois que o sistema operacional é iniciado , usando este script (no modo de console):

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

Verifiquei se isso funcionava removendo o dispositivo (gpu) e verificando se o cartão estava sendo reivindicado pelo vfio-pci em vez dos drivers da nvidia quando fiz uma nova varredura.

Depois de configurar todos os drivers, iniciei a VM com este script:

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

E finalmente consegui executá-lo, e ao verificar as informações do pci no monitor do qemu (foto aqui) , tudo parece bem, mas o segundo monitor que tenho ligado à porta DVI-I da minha placa nvidia não mostra nada. O monitor parece não receber nenhum sinal .

Eu preciso de ajuda para descobrir como resolver isso, ou pelo menos encontrar uma alternativa viável para esse método.

Como informações adicionais, estou usando o Ubuntu Studio 16.04, meu primeiro monitor é um monitor Samsung conectado à porta Intel DVI-I, e meu segundo monitor é um BENQ com uma porta VGA e uma DVI-I, e eu tê-lo conectado à porta GTX 960 DVI-I (este modelo não tem porta VGA)

Eu realmente aprecio qualquer ajuda que você possa fornecer.

EDIT 1:

Normalmente, antes de tentar iniciar o vm, e depois de remover os módulos nvidia, eu removo o dispositivo e o verifico novamente:

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

Se eu fizer isso, a VM parece rodar sem maiores problemas, mas quando eu não faço isso, o monitor qemu congela quando eu tento iniciá-lo, e não consigo fechá-lo ou parar o processo a menos que eu "mate -9 "isso. Isso é por causa da linha:

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

Se eu remover o parâmetro "x-vga = on", ele ainda funcionará bem.

EDIT 2: Depois de alguns testes e pesquisas sobre esse assunto, descobri que o driver vfio-pci não estava habilitando o gpu quando eu iniciei o kvm.

Depois de iniciar o kvm, o comando "dmesg | grep -i vfio" retorna estas novas linhas:

[ 1572.975051] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x1e@0x258
[ 1572.975063] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900

Deveria haver outra linha semelhante a esta:

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

Mas está faltando.

EDIT3: Eu fiz o downgrade para o Ubuntu Studio 14.04, e finalmente consegui fazer o pci-stub pegar o gpu antes dos drivers nvidia / nouveau. Eu posso ligar o gpu aos drivers vfio-pci facilmente e sem travamentos, e a saída após o lançamento do kvm se parece com isso:

[  130.988082] vfio-pci 0000:01:00.0: enabling device (0000 -> 0003)
[  130.988186] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x1e@0x258
[  130.988196] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900

Mas depois de tudo isso, o monitor ainda não recebe nenhum sinal . Eu realmente preciso de ajuda. Minha única opção é tentar fazer o downgrade do meu kernel de 4.2.0-27-lowlatency para 4.1.x , e estou preocupado que isso estrague meu sistema operacional.

    
por Xanty 19.07.2016 / 03:16

1 resposta

3

RESOLVIDO.

Depois de muita pesquisa, notei dois problemas principais:

1- Houve um problema com os drivers i915 da minha placa gráfica integrada, e descobri que tive que corrigir meu kernel com uma correção não oficial, ou instalar minha máquina virtual no modo UEFI e simular uma inicialização da bios. Para isso eu tive que instalar o ovmf.

apt-get install ovmf

2- Os drivers do windows nvidia estavam detectando que eu estava rodando windows em kvm e bloqueando meu gpu.

No final, depois de instalar o ovmf, segui este tutorial sobre como configurá-lo usando virt-manager e ovmf: link

Também explica como editar a configuração xml da máquina para ofuscar o kvm dos drivers nvidia.

Eu também descobri um recurso engraçado:

Se eu selecionar uma opção de inicialização vga (servidor VNC) para emular a máquina em uma janela, assim que o Windows for iniciado, ele detectará a janela como um segundo monitor físico , permitindo que eu capture mouse e teclado sem a necessidade de passar pelos controladores usb.

    
por Xanty 22.07.2016 / 20:59