Utiliser NVidia GPU de VirtualBox?

29

Comment faire pour que l'invité VirtualBox utilise les graphiques NVidia?

Configuration de l'hôte:

  • Windows 7 x64

  • NVidia Optimus

  • Dans le panneau de configuration NVIDIA , j'ai explicitement sélectionné un processeur NVIDIA hautes performances pour:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • Lorsque VirtualBox est en cours d'exécution, le logiciel NVidia ne le répertorie pas en tant qu'application utilisant le GPU NVidia. Par conséquent, je suppose que VirtualBox n'utilise en effet pas le GPU Nvidia.

Client:

  • Windows 7 x64 (c'est-à-dire identique à l'hôte)

  • Ajouts d'invités installés

  • Accélération 3D activée dans les paramètres VirtualBox: Affichage / Vidéo / Activer l'accélération 3D

  • Ce que Rhinoceros , une application compatible OpenGL rapporte comme adaptateur vidéo:

    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
    

    Pour moi, il semble que la machine virtuelle utilise l'accélération matérielle 3D de l'hôte, mais malheureusement celle d'Intel.

feklee
la source
2
Les machines virtuelles ne bénéficient pas d'un accès matériel direct - elles obtiennent un GPU virtuel. . . question connexe: superuser.com/questions/395245/…
ernie
6
@ernie VirtualBox peut donner aux invités un accès direct à l'API OpenGL du GPU de l'hôte. Autant que je sache, cela fonctionne sur ma machine. Seul VirtualBox utilise le GPU Intel au lieu du GPU NVidia. Citation du manuel VirtualBox : "Avec cette fonctionnalité, si une application à l'intérieur de votre machine virtuelle utilise des fonctionnalités 3D via les interfaces de programmation OpenGL ou Direct3D 8/9, au lieu de les émuler dans un logiciel (ce qui serait lent), VirtualBox tentera d'utiliser le matériel 3D de votre hôte. "
feklee
@feklee Le titre de la question est trompeur: vous voulez utiliser le GPU nVidia pour VBox. 'From' est également possible mais signifie quelque chose de différent: Hardware-Passthrough, ie. accéder directement au GPU de l'hôte depuis la VBox.
larkey
askubuntu.com/questions/139320/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Renseignez-vous sur la "vidéo passthrough de virtualbox".
e-info128

Réponses:

20

Je me rends compte que quelques années se sont écoulées, mais je voulais répondre, car ce message apparaît assez haut lorsque vous recherchez "virtualbox 3d multiple GPU" sur Google. Dans le temps qui s'est écoulé, les choses sont devenues beaucoup plus simples et meilleures.

Les gens qui tombent sur ce fil vont probablement atterrir ici parce qu'ils ont un ordinateur portable ou un PC doté de deux GPU, ce qui est assez courant de nos jours - en particulier sur les ordinateurs portables de jeu. Le processeur graphique Intel intégré est utilisé pour le rendu des fenêtres et des applications générales, mais les applications qui utilisent la fonctionnalité GPU 3D devraient le faire via le processeur graphique Nvidia plus performant.

Aujourd'hui, je construisais une machine virtuelle Ubuntu sur mon ordinateur portable pour faire du développement multiplateforme, et tout allait bien sauf que la machine virtuelle invitée était extrêmement lente, et il n'y avait aucune explication à cela car le processeur, la mémoire et le disque montraient tous une faible utilisation.

Il n'a pas fallu longtemps pour comprendre que c'était la performance vidéo qui causait le problème. Le lancement d'applications, la maximisation / réduction des fenêtres - tout ce que nous tenons pour acquis en 2019 mais qui nécessite une accélération 3D pour fonctionner à une vitesse raisonnable - utilisait le GPU 0.

Il était facile de le déterminer car Windows 10 a désormais la possibilité de voir l'utilisation du GPU à l'aide du "gestionnaire de tâches", puis de l'onglet "performances". Et je pouvais voir que je déplaçais les fenêtres, maximisées, minimisées, ce qui se faisait via GPU sur l'hôte. Ce GPU sur l'hôte est le GPU Intel HD intégré, et je voulais utiliser le NVidia GTX-1050ti, qui était GPU1.

Après avoir cherché, je n'ai pas vraiment trouvé où vous pouviez spécifier le GPU à utiliser. Mais ce fil, et quelques autres, m'a rappelé que sur ce type de configuration, vous devez aller dans le panneau de configuration NVidia, puis "gérer les paramètres 3D", puis l'onglet "Paramètres du programme".

Vous ne trouverez probablement pas "Virtualbox" dans la liste. Mais vous pouvez appuyer sur le bouton "Ajouter" et ajouter virtualbox.exe. Vous devrez peut-être explorer le lecteur / chemin d'accès à votre installation de virtualbox. Une fois que vous l'avez ajouté, dans les paramètres ci-dessous, assurez-vous que l'élément 2. "Sélectionnez le processeur graphique préféré pour ce programme" est défini sur le GPU que vous souhaitez qu'il utilise, qui dans mon cas était "Processeur NVIDIA haute performance" .

Ne le définissez pas sur auto et ne le définissez certainement pas sur intégré. Bien sûr, vous avez besoin des paramètres VM définis avec la case d'accélération 3D cochée, et vous avez besoin des ajouts invités installés sur l'hôte. Mais une fois que vous avez défini les paramètres 3d de la vidéo hôte comme décrit ci-dessus, arrêtez la machine virtuelle invitée, quittez la boîte virtuelle, puis relancez la boîte virtuelle et la machine virtuelle.

Si vous utilisez le gestionnaire de tâches | performacne et regardez le processus "gestionnaire de boîte virtuelle" et regardez quel GPU est utilisé lorsque vous naviguez dans l'interface utilisateur de la machine virtuelle invitée, vous devriez le voir en utilisant le meilleur GPU maintenant. Voir l'image collée ci-dessous.

Cela dit, ne vous attendez pas à pouvoir exécuter des jeux sur une machine virtuelle invitée. Le passage d'accélération 3D à travers n'est toujours pas aussi loin. Mais vous pouvez vous attendre à avoir un système d'exploitation et une interface utilisateur modernes chez vos invités, et avoir une expérience acceptable. On pourrait jouer à des jeux plus anciens dans la machine virtuelle invitée, comme tout ce qui est basé sur directX9. Malheureusement, comme la possibilité de virtualiser les GPU évolue, la technologie de jeu 3D évolue plus rapidement.

Capture d'écran

Thomas Carlisle
la source
2
J'ai fait quelques recherches aujourd'hui sur les capacités d'accélération 3D de VirtualBox et VMWare, et depuis janvier 2019, si l'accélération GPU dans la machine virtuelle invitée est importante pour vous, alors choisir VMWare est votre meilleur pari - surtout si votre système d'exploitation invité est Windows. Les capacités d'accélération GPU de VirtualBox sont un peu moins développées, car vous ne pouvez donner à la machine virtuelle invitée qu'un maximum de 128 Mo de RAM vidéo, et dans VMWare permet d'allouer jusqu'à 2 Go à la mémoire vidéo. VMWare prend en charge DirectX 10 et Virtualbox prend en charge DirectX9. Comme je l'ai dit dans le post, Directx 9 est assez daté.
Thomas Carlisle
1
"" Sélectionnez le processeur graphique préféré pour ce programme "est défini sur le GPU que vous souhaitez qu'il utilise" Je ne vois pas l'option ci-dessus. Je vois Ambinetn, le filtrage Ansiotropic ... etc mais rien sur "sélectionner le processeur de grapics préféré"
moondra
Vous avez besoin du passthrough PCI bien que je ne l'ai pas encore fait fonctionner sur Optimus, je pense toujours qu'avec certains hacks c'est possible
kensai
J'ai réussi à faire une astuce similaire pour forcer l'activation de la carte nvidea pour virtualbox mais aucun des 3 contrôleurs graphiques disponibles fournis par Virtualbox ne s'est correctement connecté à mon système d'exploitation invité Neon KDE. J'ai eu des problèmes d'interface utilisateur massifs, donc utiliser nvidea dans mon cas n'est pas une opion. Grâce à la proposition de @ThomasCarlisle, je vais essayer de jouer avec VMware.
Arkemlar
17

Donner à l'invité un accès GPU complet n'est probablement pas possible. Si une machine virtuelle avait un accès direct à votre GPU pendant que votre hôte l'utilisait, Bad Things TM se produirait car le partage de mémoire entre deux ordinateurs effectivement différents n'est pas une chose; pointeurs et adresses et ainsi de suite serait très différent entre eux. (Aucune carte disponible pour le consommateur ne prend en charge deux ordinateurs à la fois.)

Il y a cependant certaines choses que vous pouvez essayer. Tout d'abord, définissez votre processeur graphique préféré sur le bon dans le panneau de configuration NVidia ( Paramètres 3DGérer les paramètres 3DProcesseur graphique préféré ). Cela pourrait rendre VirtualBox compatible avec la carte NVidia pour OpenGL.

Si cela ne vous aide pas, essayez d' installer les compléments d'invité en mode sans échec sur l'invité.

Enfin, sur les hôtes Linux , vous pouvez essayer de passer le GPU à la machine virtuelle, mais cela ne fonctionnera que pour les cartes PCI et je n'ai pas pu déterminer si la vôtre est PCI, et même ainsi, vous avez de bonnes chances de déchirer le GPU de l'hôte ou causer d'autres problèmes. Trouvez d'abord l'adresse PCI (bus, périphérique et fonction) pour la bonne carte. Réglez le chipset de votre VM sur ICH9; cela n'a rien cassé immédiatement quand je l'ai essayé. Utilisez ensuite l'utilitaire VBoxManage pour attacher la carte:

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

Remplacez Your VM Namele cas échéant. BBest le numéro de bus de votre GPU sur l'hôte; DDest l'appareil; Fest la fonction. Après le @, entrez l'emplacement PCI qu'il sera sur l'invité. Par exemple:

vboxmanage modifyvm "Windows 7 x64" --pciattach 01:[email protected]

En général, le passthrough GPU est plus susceptible d'être possible sur un hôte Linux. Voir Comment configurer une machine de jeu avec le passthrough GPU .

Ben N
la source
2
L'hypothèse selon laquelle attacher un GPU à une machine virtuelle est une «mauvaise chose» est incorrecte; il existe une grande communauté de personnes qui souhaitent le faire pour créer des machines virtuelles de jeu sur des hyperviseurs nus. Si l'on voulait faire cela sous Linux, cela nécessiterait la mise sur liste noire du GPU PCIe afin que le noyau ne se rende que sur les graphiques du chipset; cela évite les problèmes de "mémoire partagée". Empêcher Windows de récupérer la carte est probablement le problème le plus difficile à résoudre pour cette question, et cela nécessiterait probablement de désactiver le périphérique ou de désinstaller optimus et le pilote nvidia.
Tim G
@TimG Bon point, j'ai clarifié légèrement mon message. Merci!
Ben N
@BenN Excellente réponse, mais j'ai besoin d'un point à clarifier. Avez-vous essayé cela vous-même sur un hôte Windows? Le manuel dit que cela n'est disponible que sur les hôtes Linux ( virtualbox.org/manual/ch09.html#pcipassthrough ) et je n'ai moi-même pas eu de chance de le faire fonctionner avec un hôte Windows.
Baris Demiray
@BarisDemiray Si je me souviens bien, la commande n'a signalé aucune erreur lorsque je l'ai essayée, mais je ne pense pas avoir testé que la machine virtuelle était capable d'utiliser l'appareil. C'était il y a longtemps, désolé.
Ben N
Salut @BenN, merci beaucoup d'avoir pris le temps de répondre. C'est exactement ce qui s'est produit lorsque j'ai essayé, aucune erreur sur la ligne de commande et aucune carte graphique dans la machine virtuelle.
Baris Demiray