Comment faire en sorte que l'invité VirtualBox utilise les graphiques NVidia?
Configuration de l'hôte:
Windows 7 x64
NVidia Optimus
Dans Panneau de configuration NVIDIA , j’ai explicitement sélectionné 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 (identique à l'hôte)
Ajouts d'invités installés
Accélération 3D activée dans les paramètres de VirtualBox: Affichage/Vidéo/Activer l'accélération 3D
What Rhinoceros , une application compatible OpenGL indique comme une carte 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.
Je me rends compte que quelques années ont passé, mais je voulais répondre car ce message est assez élevé lorsque vous recherchez Google pour "Virtualbox 3D Multiple GPU". Dans le temps qui s'est écoulé, les choses se sont beaucoup simplifiées et améliorées.
Les gens qui tombent sur ce fil vont probablement atterrir ici car ils ont un ordinateur portable ou un ordinateur 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 utilisant la fonctionnalité 3D du GPU doivent le faire via le GPU Nvidia, plus performant.
Aujourd'hui, je construisais un Ubuntu VM sur mon ordinateur portable pour effectuer un développement multiplate-forme, et tout allait bien à l'exception de l'invité VM qui était extrêmement lent et qui n'expliquait rien. parce que le processeur, la mémoire, le disque montraient tous une faible utilisation.
Il n'a pas fallu longtemps pour comprendre que c'était la performance vidéo qui posait problème. Le lancement d'applications, l'optimisation/minimisation des fenêtres - tout ce que nous prenons pour acquis en 2019 mais qui nécessite une accélération 3D pour fonctionner à une vitesse raisonnable - utilisait le GPU 0.
Cela était facile à déterminer, car Windows 10 permet désormais de visualiser l'utilisation du processeur graphique à l'aide du "gestionnaire de tâches", puis de l'onglet "Performances". Et je pouvais voir que lorsque je déplaçais des fenêtres, maximisait, minimisait, cela se faisait via GPU sur l'hôte. Ce GPU sur l'hôte est le processeur graphique intégré HD Intel, et je voulais utiliser le NVidia GTX-1050ti, qui était le GPU1.
Après avoir cherché autour de moi, je n'ai trouvé vraiment nulle part où vous pouviez spécifier quel GPU utiliser. Mais ce fil, ainsi que d’autres, m’ont rappelé que sur ce type de configuration, il fallait aller dans le panneau de configuration de 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 de 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 utiliser, qui dans mon cas était "Processeur NVIDIA hautes performances". .
Ne le définissez pas sur auto et certainement pas sur intégré. Bien entendu, vous devez définir les paramètres VM avec la case à cocher Accélération 3D, ainsi que les ajouts d'invités installés sur l'hôte. Mais une fois que vous avez défini les paramètres 3d de l'hôte vidéo comme décrit ci-dessus, arrêtez la machine virtuelle invitée, quittez la boîte virtuelle, puis relancez virtualbox et la machine virtuelle.
Si vous utilisez le gestionnaire de tâches | performacne, examinez le processus du "gestionnaire de virtualbox" et observez le type de GPU utilisé lorsque vous naviguez dans l'interface utilisateur de la machine virtuelle invitée, vous devriez le voir maintenant avec le meilleur GPU. Voir l'image collée ci-dessous.
Cela dit, ne vous attendez pas à pouvoir exécuter des jeux sur une machine virtuelle invitée. L'accélération 3D n'est toujours pas aussi avancée. Mais vous pouvez vous attendre à avoir un système d’exploitation et une interface utilisateur modernes chez vos invités et à vivre une expérience acceptable. On pourrait jouer à des jeux plus anciens dans la machine virtuelle invitée, comme n'importe quoi basé sur directX9. Malheureusement, à mesure que la capacité de virtualiser le GPU se développe, la technologie de jeu en 3D évolue plus rapidement.
Donner à l’invité un accès complet au GPU n’est probablement pas possible. Si une machine virtuelle avait un accès direct à votre GPU pendant que votre hôte l’utilisait, Bad ThingsTM se produirait parce que partager la mémoire entre deux ordinateurs réellement différents n’est pas une chose; pointeurs et adresses et ainsi de suite serait très différent entre eux. (Aucune carte grand public disponible ne prend en charge l’entretien simultané de deux ordinateurs.)
Il y a cependant certaines choses que vous pouvez essayer. Commencez par définir votre processeur graphique préféré sur celui qui convient dans le panneau de configuration de NVidia ( Paramètres 3D → Gestion des paramètres 3D → Processeur graphique préféré ). Cela pourrait rendre VirtualBox compatible avec la carte NVidia pour OpenGL.
Si cela ne vous aide pas, essayez en installant des ajouts d’invités en mode sans échec sur l’invité.
Enfin, sur les hôtes Linux , vous pouvez essayer de transmettre le GPU à la machine virtuelle, mais cela ne fonctionnera que pour les cartes PCI et je n’ai pas été en mesure de déterminer si le vôtre est du PCI, et pourtant, vous avez de bonnes chances d’arracher le GPU à l’hôte ou de causer d’autres problèmes. Recherchez d’abord l’adresse PCI (bus, périphérique et fonction) de la bonne carte. Réglez le chipset de votre VM sur ICH9; cela n'a rien cassé immédiatement quand je l'ai essayé. Ensuite, utilisez l'utilitaire VBoxManage pour attacher la carte:
vboxmanage modifyvm "Your VM Name" --pciattach BB:DD.F@bb:dd.f
Remplacez Your VM Name
si nécessaire. BB
est le numéro de bus de votre GPU sur l'hôte; DD
est le périphérique; F
est la fonction. Après le @
, entrez l'emplacement PCI qui sera sur l'invité. Par exemple:
vboxmanage modifyvm "Windows 7 x64" --pciattach 01:[email protected]
En général, le relais GPU est plus susceptible d'être possible sur un hôte Linux. Voir Comment configurer une machine de jeu avec passerelle GPU .