IronHide / BumbleBee avec une VM VirtualBox. Va-t-il passer par l'accélération vidéo à la carte physique?

8

Des idées si vous pouvez exécuter une machine virtuelle Windows via IronHide pour l'accélération de la carte graphique? Je voudrais jouer à des jeux / regarder bluray, etc. en utilisant ma carte vidéo.

mwjackson
la source
1
J'ai réussi à exécuter un windows vm avec bumblebee, mais sans effet visible, recherchez-vous quelque chose de plus spécifique?
david.libremone
1
Eh bien, je voudrais savoir si virtualbox passerait par l'accélération vidéo de la machine virtuelle Windows pour jouer à des jeux / regarder bluray, etc.
mwjackson
1
Je prévois de tester cela moi-même un jour, je vous ferai connaître les résultats si quelqu'un d'autre ne répond pas en premier - peut-être ajuster votre question pour être plus spécifique?
david.libremone
Je suis un peu confus avec ce que vous avez demandé, vous voulez que la VM utilise le GPU nvidia pour son accélération 3D? , comme l'accès direct au matériel graphique via la machine virtuelle?.
Uri Herrera
1
@jacko vous voudrez peut-être transposer cela sur forums.virtualbox.org
david.libremone

Réponses:

9

Peut-être qu'une explication entre les graphiques dans un invité virtuel et le véritable O / S hôte aiderait ici.

Tout d'abord les bases:

Tout dans un invité virtuel est une abstraction - ce qui signifie que chaque périphérique et pilote dans un système d'exploitation invité virtuel ne dépend pas du périphérique et du pilote hôte réel.

Pour vous donner un exemple simple. Une souris est considérée comme un périphérique spécifique - le noyau Linux voit ce périphérique et permet au système d'exploitation invité d'utiliser ce périphérique. Ce «périphérique virtuel» est mappé sur le véritable périphérique physique par l'outil de virtualisation - VirtualBox, VMWare, Xen etc. Ainsi, le système d'exploitation invité n'a jamais besoin de comprendre ce qu'est la souris physique, il ne voit que ce que l'outil de virtualisation lui a mappé. . La valeur de cette approche est que vous pouvez déplacer l'invité virtuel vers différents hôtes - il fonctionnera de la même manière car il n'y a pas de dépendance directe sur l'hôte lui-même.

Pour le montrer en pratique, vous pouvez exécuter lsusbà la fois sur l'hôte et sur l'invité - sur mon hôte O / SI, vous disposez des périphériques USB suivants:

Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0402:9665 ALi Corp. 
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Sur mon invité oniric O / SI peut voir les périphériques USB suivants - ceux-ci sont différents de l'hôte:

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet

Tout O / S invité, que ce soit Windows ou Linux, ne verra que ce périphérique invité virtuel.

Graphiques hôtes vs graphiques invités

Il en va de même pour les graphiques.

Mes graphiques hôtes sont:

 sudo lshw -class display
  *-display               
       description: VGA compatible controller
       product: Core Processor Integrated Graphics Controller
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 18
       width: 64 bits
       clock: 33MHz
       capabilities: msi pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:41 memory:90000000-903fffff memory:80000000-8fffffff ioport:3050(size=8)

Sur mon invité oniric O / S, il peut voir la carte graphique suivante - vous pouvez voir que ce n'est pas la même chose que l'hôte:

sudo lshw -class display
  *-display UNCLAIMED     
       description: VGA compatible controller
       product: VirtualBox Graphics Adapter
       vendor: InnoTek Systemberatung GmbH
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: vga_controller bus_master
       configuration: latency=64
       resources: memory:e0000000-e7ffffff

De même, un système d'exploitation invité Windows ne verra qu'un périphérique invité virtuel similaire.

Dans le monde trouble de VirtualBox, les ajouts d'invités que vous pouvez installer manuellement (ou en 11.10 - jockey voit et vous recommande de l'installer) installe des modules de noyau supplémentaires (ou des pilotes de périphérique pour les invités Windows) pour permettre à l'accès invité O / S amélioré de vos graphiques hôtes O / S. Encore une fois, ce n'est pas une cartographie directe - mais permet de visualiser des graphiques accélérés en 3D.

Si une application à l'intérieur de votre machine virtuelle utilise des fonctionnalités 3D via l'interface de programmation OpenGL (ou pour un invité Windows O / S - ses appels DirectX), au lieu de les émuler dans un logiciel (ce qui serait lent), VirtualBox tentera d'utiliser votre hôte Matériel 3D.

Encore une fois, je souligne que l'invité O / S ne voit pas votre carte graphique réelle, il passe simplement l'appel OpenGL (ou DirectX) de l'invité directement au matériel hôte à traiter.

entrez la description de l'image ici

Dans les paramètres VirtualBox, vous devez modifier la mémoire de la carte vidéo et les paramètres de la carte graphique 3D. Votre O / S invité verra alors une "carte accélérée 3D" avec 128 Mo de RAM. Peu importe si votre carte graphique hôte est meilleure que cela - votre système d'exploitation invité ne verra que cette carte graphique virtuelle abstraite "simple".

Puisque vous avez mentionné que vous utilisez un système d'exploitation invité Windows - la case à cocher 2D s'applique à vous car une transmission similaire des appels d'interface de programmation est effectuée.

Bumblebee / IronHide est un mécanisme de commutation graphique soit / ou - vous utilisez des graphiques intégrés ou des graphiques NVidia / ATI de plus grande capacité, mais pas les deux en même temps.

Étant donné que la capacité OpenGL (ou DirectX) des graphiques commutables supérieurs est supérieure à celle du jeu de puces intégré, vous verrez des performances graphiques relativement améliorées avec les applications graphiques intensives invité O / S. Cependant, cette amélioration n'est pas aussi spectaculaire que l'exécution de la même application en mode natif sur l'hôte, car elle fonctionne toujours dans les limites du périphérique graphique invité virtuel de 128 Mo.

la source

liberté libre
la source
Ajout: nous ne pouvons pas faire de bourdons (rendu sur carte nvidia) dans les machines virtuelles pour le moment, car VMware et VirtualBox nécessitent tous les deux que leurs binaires soient configurés pour fonctionner.
allquixotic
5

Une réponse ci-dessus https://askubuntu.com/a/85138/38052 explique comment tout ce que l'O / S invité voit est une sorte d'abstraction. Bien que cela soit complètement vrai, je pense que les choses changent et ce n'est peut-être plus tout à fait vrai.

Certains processeurs plus récents prennent également en charge la virtualisation d'E / S MMU. Les technologies sont appelées Intel VT-d pour la version Intel et AMD-Vi pour la version AMD. Pour citer l'article de wikipedia sur la virtualisation x86:

Virtualisation d'E / S MMU d'Intel (AMD-Vi et VT-d) Article principal: IOMMU

Une unité de gestion de la mémoire d'entrée / sortie (IOMMU) permet aux machines virtuelles invitées d'utiliser directement les périphériques, tels qu'Ethernet, les cartes graphiques accélérées et les contrôleurs de disque dur, via DMA et le remappage des interruptions. Ceci est parfois appelé passthrough PCI. AMD et Intel ont publié des spécifications:

AMD's I/O Virtualization Technology, "AMD-Vi", originally called "IOMMU".
Intel's "Virtualization Technology for Directed I/O" (VT-d).

Cela semble assez intéressant, mais je peux déjà prévoir certains problèmes. D'une part, dans les ordinateurs portables Optimus, Intel IGP restitue toujours la sortie finale à l'écran. Il n'est pas clair pour moi comment le système d'exploitation invité et le système d'exploitation hôte vont tous deux conduire l'IGP. Une pensée est que s'il est possible d'exécuter l'hôte sans aucun graphique pendant que les invités sont en cours d'exécution, cela pourrait fonctionner, mais je ne sais pas comment on pourrait réellement procéder.

Sarang
la source
1

OK, j'étais curieux, alors j'ai essayé.

QEMU, et maintenant VirtualBox, prennent en charge la transmission directe des périphériques PCI à la machine invitée. Cela signifie que si vous avez une deuxième carte graphique, vous pouvez la transmettre à un invité Windows sur un hôte Linux et obtenir des performances 3D complètes (jeux) dans un environnement Windows virtualisé. C'est le cas pour une plate-forme de bureau avec deux cartes graphiques. Le gestionnaire de périphériques afficherait "NVIDIA GTX ... peu importe" au lieu de dire "Virualbox Graphics Adapter".

Optimus est toujours plus compliqué. Je teste cela sur un ASUS UX501. J'ai pu passer la puce NVidia à l'invité Windows et cela apparaît dans le gestionnaire de périphériques comme "Contrôleur vidéo 3D". Mais je n'ai pas pu installer de pilote Windows pour le prendre en charge. Il semble que la présence des graphiques Intel soit une condition préalable.

Sarang avait raison de se méfier. Il semble que la puce nvidia ne soit pas un "adaptateur d'affichage" comme le ferait un moniteur, mais juste un accélérateur pour la puce Intel intégrée. Ils ne semblent pas fonctionner comme deux appareils distincts indépendamment.

Mathew Hart
la source