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.