Utilizzare la GPU NVidia da VirtualBox?


29

Come posso fare in modo che il guest VirtualBox usi la grafica NVidia?

Configurazione dell'host:

  • Windows 7 x64

  • NVidia Optimus

  • Nel pannello di controllo NVIDIA , ho selezionato esplicitamente il processore NVIDIA ad alte prestazioni per:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • Quando VirtualBox è in esecuzione, il software NVidia non lo elenca come applicazione che utilizza la GPU NVidia. Pertanto, presumo che VirtualBox non utilizzi effettivamente la GPU Nvidia.

Ospite:

  • Windows 7 x64 (ovvero uguale all'host)

  • Aggiunte agli ospiti installate

  • Accelerazione 3D abilitata nelle impostazioni di VirtualBox: Display / Video / Abilita accelerazione 3D

  • Cosa Rhinoceros , un'applicazione compatibile con OpenGL, segnala come una scheda video:

    Humper
    Chromium
    OpenGL version: 2.1 Chromium 1.9
    Render version: 2.0
    Shading Language: 1.40 - Intel Build 9.17.10.3517
    Driver Date: NA
    Driver Version: NA
    Maximum Texture size: 8192 x 8192
    Z-Buffer depth: 32bits
    Maximum Viewport size: 8192 x 8192
    Total Video Memory: 64 MB
    

    A me sembra che la macchina virtuale usi l'accelerazione hardware 3D dell'host, ma sfortunatamente quella Intel.


2
Le macchine virtuali non ottengono l'accesso diretto all'hardware, ma ottengono una GPU virtuale. . . domanda correlata: superuser.com/questions/395245/…
ernie

6
@ernie VirtualBox può offrire agli ospiti l'accesso diretto all'API OpenGL della GPU dell'host. Per quanto ne so, funziona sulla mia macchina. Solo VirtualBox utilizza la GPU Intel anziché la GPU NVidia. Citazione dal manuale di VirtualBox : "Con questa funzione, se un'applicazione all'interno della macchina virtuale utilizza funzionalità 3D tramite le interfacce di programmazione OpenGL o Direct3D 8/9, invece di emularle nel software (che sarebbe lento), VirtualBox tenterà di utilizzare l'hardware 3D del tuo host ".
febbraio

@feklee Il titolo della domanda è fuorviante: si desidera utilizzare la GPU nVidia per VBox. 'From' è anche possibile ma significa molto diverso: Hardware-Passthrough, ovvero. accedere alla GPU dell'host direttamente dal VBox.
larkey,


Scopri "video passthrough di virtualbox".
e-info128,

Risposte:


20

Mi rendo conto che sono trascorsi alcuni anni, ma volevo rispondere dal momento che questo post si presenta piuttosto in alto quando vai su Google per "virtualbox 3d multiple GPU". Nel tempo che è passato, le cose sono diventate molto più semplici e migliori.

Le persone che si imbattono in questo thread probabilmente atterreranno qui perché hanno un laptop o un PC che ha due GPU, che è abbastanza comune in questi giorni - specialmente sui laptop da gioco. La GPU Intel integrata è utilizzata per il rendering di finestre e applicazioni generali, ma le applicazioni che utilizzano la funzionalità GPU 3D dovrebbero farlo tramite la GPU Nvidia dalle prestazioni più elevate.

Oggi stavo costruendo una VM Ubuntu sul mio laptop per fare un po 'di sviluppo multipiattaforma, e tutto andava bene tranne la VM guest era estremamente lenta, e non c'erano spiegazioni perché CPU, memoria, disco mostravano un basso utilizzo.

Non ci volle molto per capire che erano le prestazioni video a causare il problema. Il lancio di applicazioni, l'ottimizzazione / riduzione al minimo di Windows - tutto ciò che diamo per scontato nel 2019 ma che necessita di accelerazione 3D per funzionare a qualsiasi velocità ragionevole - utilizzava GPU 0.

È stato facile determinarlo perché Windows 10 ora ha la possibilità di vedere l'utilizzo della GPU usando "task manager", quindi la scheda "performance". E ho potuto vedere mentre spostavo Windows, ingrandito, ridotto a icona, che veniva fatto tramite GPU sull'host. Quella GPU sull'host è la GPU Intel HD integrata e volevo usare la NVidia GTX-1050ti, che era GPU1.

Dopo aver cercato in giro, non ho trovato da nessuna parte dove si potesse specificare quale GPU usare. Ma questo thread, e alcuni altri, mi hanno ricordato che su questo tipo di configurazioni devi andare nel pannello di controllo di NVidia, quindi "gestire le impostazioni 3d", quindi la scheda "Impostazioni del programma".

Probabilmente non troverai "Virtualbox" nell'elenco. Ma puoi premere il pulsante "Aggiungi" e aggiungere virtualbox.exe. Potrebbe essere necessario eseguire il drill-down dell'unità / percorso in cui si trova l'installazione della virtualbox. Dopo averlo aggiunto, nelle impostazioni seguenti assicurarsi che la voce 2. "Seleziona il processore grafico preferito per questo programma" sia impostata sulla GPU che si desidera utilizzare, che nel mio caso era "Processore NVIDIA ad alte prestazioni" .

Non impostarlo su auto e certamente non impostarlo su integrato. Ovviamente, sono necessarie le impostazioni della VM impostate con la casella di accelerazione 3D selezionata e sono necessarie le aggiunte guest installate sull'host. Ma una volta configurate le impostazioni 3d del video host come descritto sopra, arrestare la VM guest, uscire dalla virtual box e quindi riavviare virtualbox e VM.

Se usi Task Manager | performacne e osservi il processo "Virtualbox Manager" e guardi quale GPU viene utilizzata quando navighi sull'interfaccia utente della VM guest, dovresti vederlo ora usando la GPU migliore. Vedi l'immagine incollata di seguito.

Detto questo, non aspettarti di essere in grado di eseguire giochi in una VM guest. Il passaggio di accelerazione 3D attraverso non è ancora così lontano. Ma puoi aspettarti di avere un sistema operativo e un'interfaccia utente moderni nel tuo guest e avere un'esperienza accettabile. Uno sarebbe in grado di giocare a giochi più vecchi nella VM guest, come qualsiasi cosa basata su directX9. Sfortunatamente, poiché la capacità di virtualizzare gli eveolve GPU, la tecnologia di gioco 3d si evolve più rapidamente.

Immagine dello schermo


2
Oggi ho fatto una piccola ricerca sulle funzionalità di accelerazione 3D di VirtualBox e VMWare e, a partire da gennaio 2019, se l'accelerazione GPU nella VM guest è importante per te, scegliere VMWare è la soluzione migliore, soprattutto se il sistema operativo guest è Windows. Supporto di VirtualBox Le funzionalità di accelerazione della GPU sono un po 'meno sviluppate, in quanto è possibile assegnare alla VM guest un massimo di 128 MB di RAM video e in VMWare è possibile allocare fino a 2 GB di memoria video. VMWare supporta DirectX 10 e Virtualbox supporta DirectX9. Come ho detto nel post, directx 9 è piuttosto datato.
Thomas Carlisle,

1
"" Seleziona il processore grafico preferito per questo programma "è impostato sulla GPU che vuoi che usi" Non vedo l'opzione sopra. Vedo Ambinetn, Ansiotropic Filtering ... ecc., Ma niente su "selezionare il processore grapics preferito"
moondra

Hai bisogno del passthrough PCI anche se non l'ho ancora fatto funzionare su Optimus, tuttavia penso che con alcuni hack sia possibile
kensai

Sono riuscito a fare un trucco simile per forzare l'abilitazione della scheda nvidea per virtualbox ma nessuno dei 3 controller grafici disponibili forniti da Virtualbox è stato attivato correttamente con il mio sistema operativo guest Neon KDE. Ho avuto enormi problemi con l'interfaccia utente, quindi usare nvidea nel mio caso non è un opion. Grazie alla proposta di @ThomasCarlisle, proverò a giocare con VMware.
Arkemlar

17

Dare all'ospite pieno accesso alla GPU probabilmente non è possibile. Se una macchina virtuale avesse accesso diretto alla tua GPU mentre il tuo host la stava usando, Bad Things TM accadrebbe perché la condivisione della memoria tra due computer effettivamente diversi non è una cosa; puntatori e indirizzi e quant'altro sarebbe molto diverso tra loro. (Nessuna scheda disponibile per il consumatore supporta la manutenzione di due computer contemporaneamente.)

Ci sono, tuttavia, alcune cose che puoi provare. Innanzitutto, imposta il tuo processore grafico preferito su quello buono nel Pannello di controllo NVidia ( Impostazioni 3DGestisci impostazioni 3DProcessore grafico preferito ). Ciò potrebbe far andare VirtualBox con la scheda NVidia per OpenGL.

Se il problema persiste, prova a installare Guest Aggiunte in modalità provvisoria sul guest.

Infine, sugli host Linux , puoi provare a passare la GPU alla macchina virtuale, ma questo funzionerà solo per le schede PCI e non sono riuscito a scoprire se il tuo è PCI, e anche così, hai buone possibilità di strappare la GPU dall'host o causare altri problemi. Per prima cosa trova l'indirizzo PCI (bus, dispositivo e funzione) per la buona scheda. Imposta il chipset della tua VM su ICH9; questo non ha rotto immediatamente nulla quando l'ho provato. Quindi utilizzare l'utilità VBoxManage per collegare la scheda:

vboxmanage modifyvm "Your VM Name" --pciattach BB:DD.F@bb:dd.f

Sostituire Your VM Namecome appropriato. BBè il numero di bus della GPU sull'host; DDè il dispositivo; Fè la funzione. Dopo il @, inserire lo slot PCI che sarà sul guest. Per esempio:

vboxmanage modifyvm "Windows 7 x64" --pciattach 01:00.0@03.01.0

In generale, è più probabile che il passthrough GPU sia possibile su un host Linux. Vedi Come configurare una macchina da gioco con passthrough GPU .


2
La premessa che il collegamento di una GPU a una VM è una "cosa negativa" non è corretta; c'è una grande comunità di persone che vogliono farlo per creare VM di gioco su hypervisor bare metal. Se uno volesse farlo in Linux, richiederebbe la blacklist della GPU PCIe in modo che il kernel passi solo alla grafica del chipset; questo impedisce i problemi di "memoria condivisa". Impedire a Windows di prelevare la scheda è probabilmente il problema più difficile da risolvere per questa domanda e probabilmente richiederebbe la disabilitazione del dispositivo o la disinstallazione di optimus e del driver nvidia.
Tim G

@TimG Buon punto, ho chiarito leggermente il mio post. Grazie!
Ben N

@BenN Ottima risposta, ma ho bisogno di un punto da chiarire. Hai provato tu stesso su un host Windows? Il manuale dice che questo è disponibile solo su host Linux ( virtualbox.org/manual/ch09.html#pcipassthrough ) e io stesso non ho avuto fortuna a farlo funzionare con un host Windows.
Baris Demiray,

@BarisDemiray Se ricordo correttamente, il comando non ha segnalato alcun errore quando l'ho provato, ma non credo di aver verificato che la VM fosse in grado di utilizzare il dispositivo. È stato molto tempo fa, però, scusa.
Ben N

Ciao @BenN, grazie mille per il tempo dedicato a rispondere. Questo è esattamente quello che è successo quando ho provato, nessun errore nella riga di comando e nessuna scheda grafica nella VM.
Baris Demiray,
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.