Blacklist una gpu Nvidia per passthrough qemu / kvm

4

Sto provando a eseguire Windows in una macchina virtuale mentre offro alla VM un passthrough diretto alla GPU per prestazioni migliori.

Ho una GPU Intel intel (userò questa per l'host) e una Nvidia GTX980 (voglio questo per la VM). Io uso Elementary OS 0.3.2 Freya a 64 bit.

Ho seguito questo guida ma ora sono bloccato al punto 2. Non riesco a far entrare la gpu Nvidia nella lista nera.

Per iniziare, faccio lspci -nn | grep NVIDIA

Ciò produce il seguente output

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)

Successivamente ho aggiunto questa riga al file /etc/initramfs-tools/modules .

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

E poi ho ricaricato usando update-initramfs -u e poi riavviato.

Dopo il riavvio quando eseguo dmesg | grep pci-stub ottengo il seguente output:

[    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

Come puoi vedere né l'audio né il video sono rivendicati da stub.

Ho anche provato ad aggiungere questa opzione direttamente al file grub in etc/default/grub in modo che la riga GRUB_CMDLINE_LINUX_DEFAULT assomigli a questa:

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

Ma ciò ha anche portato la scheda Nvidia a non essere inserita nella blacklist.

Qualcuno ha idea di cosa potrebbe causare questo?

    
posta Mathyn 10.01.2016 - 11:49

5 risposte

1

Sto anche impostando il passthrough di qemu-kvm e ho avuto lo stesso problema di te. Sto usando la mia scheda grafica Intel integrata come mia gpu primaria, quindi ho aperto le impostazioni di nvidia e disabilitato la grafica ibrida, quindi la scheda nvidia non verrà utilizzata: (pic related)

Dopo non ho avuto problemi a legare la carta a vfio-pci.

È possibile che in qualche modo i moduli nvidia causino problemi all'avvio di qemu o che non sia possibile disattivare la grafica ibrida. In questo caso, puoi provare anche ciò che ho fatto e disabilitare manualmente i moduli nvidia utilizzando uno script come questo dalla modalità 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

Questo arresta il display manager (nel mio caso lightdm), disabilita i moduli nvidia in ordine e riavvia il display manager in seguito. Assicurati di avviarlo in modalità console, in quanto eseguirlo dal desktop molto probabilmente interromperà lo script dopo la prima riga.

I moduli nvidia si caricheranno di nuovo automaticamente al riavvio, ma puoi anche ricaricarli manualmente con:

modprobe nvidia nvidia_modeset nvidia_drm nvidia_uvm

Spero che questo aiuti.

    
risposta data Xanty 19.07.2016 - 10:00
0

Hai provato questa guida link ? :) È abbastanza recente:)

    
risposta data tomsk 17.03.2017 - 20:15
0

Il tuo audio è stato rivendicato da stub

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

Il video non è. Ho lo stesso problema, ho inserito nella lista nera Nvidia e / o Nouveau. Sto usando il server Ubuntu 15.10 quindi non esattamente lo stesso, ma ho lo stesso problema. Ho cercato l'interweb da settimane e niente.

modifica Finalmente risolto, l'ho trovato qui: link

Così ho inserito nella lista nera i moduli Nvidia e Nouveau e riavviato. Spero che aiuti

modifica di nuovo:

I miei passi correnti che ho preso per legare le schede pci a pci-stub su arch con il kernel 4.10.1-1.

Ho modificato / etc / default / grub per assomigliare a questo GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu = on pci-stub.ids = 1002: 6798,1002: 679a, 1002: aaa0,1106: 3483"

Quindi creo il nuovo file di configurazione di grub

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

Quindi riavvia.

In /etc/mkinitcpio.conf Ho aggiunto pci-stub ai moduli in modo che assomigli: MODULI="pci-stub"

quindi esegui

$ sudo mkinitcpio -P

per ricostruire tutte le tue immagini di initramfs. Quindi riavvia.

Quindi questo comando solo per assicurarsi che siano stati reclamati da pci-grub

$ dmesg | grep pci-stub

    
risposta data Dan 24.01.2016 - 18:56
0

Ho incontrato problemi simili come te (Lubuntu 16.04). Ciò è dovuto a driver / moduli che vincolano i dispositivi a loro prima che pci-stub sia in grado di farlo. Hai almeno due opzioni qui:

La prima e la più semplice sarebbe quella di inserire nella lista nera i moduli che richiedono il dispositivo. Digita lspci -knn | grep VGA -A 5 per vedere tutti i tuoi dispositivi pci VGA e il loro numero di dispositivo e i loro moduli del 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]

Ora è necessario verificare quale driver è in uso. Ad esempio, nouveau ha afferrato il mio dispositivo VGA 02: 00.0 che voglio usare per la mia VM, quindi ne inserisco uno nella lista nera:

% Bl0ck_qu0te%

e hai finito.

Nel mio caso ciò causerebbe un problema poiché ho installato due NVIDIA VGA (01: 00.0 e 02: 00.0) entrambi con lo stesso driver. Nel mio caso non inserisco la lista nera del driver.

Io svincolo manualmente nouveau dalla mia scheda VGA 02: 00.0, poiché volevo usare quella scheda per il mio VM-guest e il 01: 00.0 VGA per il mio host Linux. Grazie a questa guida ho scoperto come farlo: link

Digita sudo tree /sys/bus/pci/drivers/nouveau . Scambia con qualsiasi modulo afferrato il tuo dispositivo.

Dovresti ricevere un elenco come questo:

/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

Vediamo che driver nouveau ha dispositivi che si legano ad esso: 0000: 01: 00.0 e 0000: 02: 00.0

Per smantellare e legare la mia scheda grafica, prima devo disattivare lightdm.service. Per questo apro la console al di fuori dell'ambiente desktop con CTRL + ALT + F2 per esempio. Accedi come root e digita systemctl stop lightdm.service

Ora posso separare il modulo dalla scheda grafica:

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

e collegarlo a qualunque modulo io voglia (pci-stub o vfio-pci). Ho usato vfio-pci.

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

Dopodiché, puoi avviare nuovamente il tuo desktop manager: % Co_de%

Se tutto funziona, dovresti trovare il tuo dispositivo associato al modulo che hai specificato cercando di nuovo con systemctl start lightdm.service .

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]

Purtroppo questa soluzione alternativa perde effetto dopo il riavvio. Eppure non ho scoperto come renderlo persistente. Forse qualcun altro può darmi un suggerimento. Qualcosa come uno script iniziale sarebbe possibile, credo. Ma sarebbe meglio essere in grado di legare il dispositivo a un modulo specifico senza doverlo prima separare. Immagina che mi piacerebbe usare il driver nvidia un giorno. In tal caso, l'interruzione dal nouveau sarebbe inutile in quanto la scheda grafica sarebbe vincolata al modulo nvidia.

    
risposta data AlexOnLinux 03.11.2017 - 14:23
0

Disattiva nvidia / nuveau usando grub config.

C'è la possibilità di passare il module_blacklist=<module1>[,<module2>] (documentazione) direttiva al kernel tramite la riga di comando grub2. Sono stato in grado di disattivare il driver nuveau e nvidia con la seguente aggiunta al GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub (non dimenticare di rilasciare sudo update-grub ):

module_blacklist=nvidia,nvidia_uvm,nvidia_drm,nvidia_modeset,nouveau

C'è anche la possibilità di generare automaticamente voci di grub con e senza questa opzione per ogni kernel: link (prima risposta). Ma si è rivelato più ingombrante del previsto. La configurazione di Ubuntu Grub è molto complicata. Assicurati di fare un backup prima di armeggiare con esso.

Ciò è particolarmente utile se si desidera utilizzare una potente scheda NVIDIA per il gioco in una macchina virtuale utilizzando VGA Passthrough, ma avere l'opzione di utilizzarla per l'apprendimento approfondito, ad esempio tensorflow . È necessario solo un riavvio per passare da uno di questi due.

    
risposta data user334287 22.02.2018 - 13:32

Leggi altre domande sui tag