Blacklist uma GPU Nvidia para repasse qemu / kvm

4

Estou tentando executar o Windows em uma máquina virtual e, ao mesmo tempo, ofereço à VM um repasse direto para a GPU para obter melhor desempenho.

Eu tenho uma GPU Intel integrada (vou usar esta para o host) e uma Nvidia GTX980 (eu quero esta para a VM). Eu uso Elementary OS 0.3.2 Freya 64 bit.

Eu acompanhei este guia, mas agora estou preso no passo 2. Eu não consigo obter o Nvidia gpu para ser colocado na lista negra.

Para começar, faço lspci -nn | grep NVIDIA

Isso resulta na seguinte saída

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:13c0] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbb] (rev a1)

Em seguida, adicionei esta linha ao arquivo /etc/initramfs-tools/modules .

pci_stub ids=10de:13c0,10de:0fbb

E eu recarreguei usando update-initramfs -u e depois reiniciei.

Após a reinicialização quando eu executar dmesg | grep pci-stub , recebo a seguinte saída:

[    2.029626] pci-stub: add 10DE:13C0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[    2.029630] pci-stub: add 10DE:0FBB sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[    2.029637] pci-stub 0000:01:00.1: claimed by stub

Como você pode ver, nem o áudio nem o vídeo são reivindicados por stub.

Eu também tentei adicionar essa opção diretamente ao arquivo grub em etc/default/grub , então a linha GRUB_CMDLINE_LINUX_DEFAULT tem esta aparência:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on pci-stub.ids=10de:13c0,10de:0fbb"

Mas isso também resultou na placa Nvidia não ser colocada na lista negra.

Alguém tem alguma idéia do que pode estar causando isso?

    
por Mathyn 10.01.2016 / 11:49

5 respostas

1

Estou configurando o qemu-kvm passthrough também, e tive o mesmo problema que você. Eu estou usando minha placa de vídeo integrada intel como minha GPU primária, então eu abri as configurações nvidia e desabilitei gráficos híbridos, para que a placa nvidia não seja usada: (relacionado à foto)

Depois disso eu não tive nenhum problema ligando o cartão ao vfio-pci.

É possível que, de alguma forma, os módulos nvidia causem problemas ao iniciar o qemu, ou que você não tenha a opção de desativar os gráficos híbridos. Se este for o caso, você também pode tentar o que eu também fiz, e desabilitar manualmente os módulos nvidia usando um script como este no modo de console (CTRL + ALT + F1):

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

Isso interrompe o gerenciador de exibição (no meu caso lightdm), desativa os módulos da nvidia em ordem e reinicia o gerenciador de exibição posteriormente. Certifique-se de lançar isso no modo de console, já que executá-lo na área de trabalho provavelmente interromperá o script após a primeira linha.

Os módulos da nvidia serão automaticamente carregados novamente quando você reiniciar, mas você também pode carregá-los novamente manualmente com:

modprobe nvidia nvidia_modeset nvidia_drm nvidia_uvm

Espero que isso ajude.

    
por Xanty 19.07.2016 / 10:00
0

Você tentou este guia link :) É bem mais novo:)

    
por tomsk 17.03.2017 / 20:15
0

Seu áudio foi reivindicado por stub

[    2.029637] pci-stub 0000:01:00.1: claimed by stub

O vídeo não é. Eu tenho o mesmo problema, eu tenho na lista negra Nvidia e / ou Nouveau. Eu estou usando o servidor Ubuntu 15.10, então não exatamente o mesmo, mas eu tenho o mesmo problema. Eu pesquisei a interweb por semanas e nada.

editar Finalmente consertei, achei aqui: link

Por isso, coloquei na lista negra os módulos Nvidia e Nouveau e reiniciei. Espero que ajude

edite novamente:

Minhas etapas atuais que tomei para ligar as placas pci ao pci-stub no arco com o kernel 4.10.1-1.

Eu editei / etc / default / grub para se parecer com isso GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu = em pci-stub.ids = 1002: 6798,1002: 679a, 1002: aaa0,1106: 3483"

Então eu crio o novo arquivo de configuração do grub

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

Em seguida, reinicie.

No /etc/mkinitcpio.conf Eu adicionei pci-stub aos módulos para que se pareça com: MÓDULOS="pci-stub"

execute

$ sudo mkinitcpio -P

para reconstruir todas as suas imagens initramfs. Então reinicie.

Então, este comando apenas para ter certeza de que eles foram reivindicados pelo pci-grub

$ dmesg | grep pci-stub

    
por Dan 24.01.2016 / 18:56
0

Eu tive problemas parecidos com você (Lubuntu 16.04). Isso ocorre devido a drivers / módulos que ligam os dispositivos a eles antes que o pci-stub seja capaz de fazer isso. Você tem pelo menos duas opções aqui:

O primeiro e mais fácil seria colocar na lista negra os módulos que reivindicam o dispositivo. Digite lspci -knn | grep VGA -A 5 para ver todos os seus dispositivos VGA pci e seu número de dispositivo e seus módulos do kernel.

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8c93]
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] GK208 HDMI/DP Audio Controller [1462:8c93]
--
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366]
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 High Definition Audio Controller [19da:1366]

Agora você precisa verificar qual driver está em uso. Por exemplo, nouveau pegou meu dispositivo VGA 02: 00.0 que eu quero usar para minha VM, então eu coloco essa lista em:

  

sudo nano /etc/modprobe.d/blacklist.conf blacklist nouveau

e você está pronto.

No meu caso, isso causaria um problema, pois tenho duas VGAs da nVidia instaladas (01: 00.0 e 02: 00.0) sendo ambas executadas com o mesmo driver. No meu caso, eu não coloco o motorista na lista negra.

Desvinculo manualmente o nouveau do meu cartão VGA 02: 00.0, pois queria usar esse cartão para meu VM-guest e o 01: 00.0 VGA para meu host Linux. Graças a este guia, descobri como fazer isso: link

Digite sudo tree /sys/bus/pci/drivers/nouveau . Exchange nouveau com qualquer módulo pegou seu dispositivo.

Você deve receber uma lista como esta:

/sys/bus/pci/drivers/nouveau
├── 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0
├── 0000:02:00.0 -> ../../../../devices/pci0000:00/0000:00:05.0/0000:02:00.0
├── bind
├── module -> ../../../../module/drm
├── new_id
├── remove_id
├── uevent
└── unbind

Vemos que o driver nouveau tem que vincular dispositivos a ele: 0000: 01: 00.0 e 0000: 02: 00.0

Para desvincular e vincular minha placa gráfica, primeiro preciso desativar o lightdm.service. Por isso eu abro o console fora do ambiente desktop com CTRL + ALT + F2 por exemplo. Faça o login como root e digite systemctl stop lightdm.service

Agora posso desvincular o módulo da placa gráfica:

echo -n "0000:02:00.0" > /sys/bus/pci/drivers/nouveau/unbind

e ligá-lo a qualquer módulo que eu quiser (pci-stub ou vfio-pci). Eu usei vfio-pci.

echo -n "0000:02:00.0" > /sys/bus/pci/drivers/vfio-pci/bind

Depois disso, você pode iniciar seu gerenciador de área de trabalho novamente: systemctl start lightdm.service

Se tudo funcionou, você deve encontrar o dispositivo vinculado ao módulo que você especificou pesquisando com lspci -knn | grep VGA -A 5 novamente.

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8c93]
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
    Subsystem: Micro-Star International Co., Ltd. [MSI] GK208 HDMI/DP Audio Controller [1462:8c93]
--
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366]
    Kernel driver in use: vfio-pci
    Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
    Subsystem: ZOTAC International (MCO) Ltd. GM204 High Definition Audio Controller [19da:1366]

Infelizmente, esta solução perde o efeito após a reinicialização. No entanto, não descobri como torná-lo persistente. Talvez mais alguém possa me dar uma dica. Algo parecido com um startcript seria possível, eu acho. Mas seria melhor poder vincular o dispositivo a um módulo específico sem precisar desvinculá-lo primeiro. Imagine que eu gostaria de usar o driver nvidia um dia. Nesse caso, desvincular-se do nouveau seria inútil, já que a placa gráfica seria ligada ao módulo nvidia.

    
por AlexOnLinux 03.11.2017 / 14:23
0

Desative nvidia / nuveau usando a configuração do grub.

Existe a possibilidade de passar o module_blacklist=<module1>[,<module2>] (documentação) diretiva para o kernel através da linha de comando grub2. Consegui desativar o driver nuveau e nvidia com a seguinte adição ao GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub (não se esqueça de emitir sudo update-grub ):

module_blacklist=nvidia,nvidia_uvm,nvidia_drm,nvidia_modeset,nouveau

Existe também a possibilidade de gerar automaticamente as entradas do grub com e sem esta opção para cada kernel: link (primeira resposta). Mas acabou por ser mais complicado do que o esperado. A configuração do ubuntu grub é muito complicada. Certifique-se de fazer um backup antes de mexer com ele.

Isso é especialmente útil se você quiser usar uma placa NVIDIA poderosa para jogos em uma máquina virtual usando VGA Passthrough, mas ainda assim ter a opção de usá-la para aprendizado profundo, como tensorflow . Apenas uma reinicialização necessária para alternar entre os dois.

    
por user334287 22.02.2018 / 13:32