web-dev-qa-db-fra.com

IronHide / BumbleBee avec une machine virtuelle VirtualBox. Est-ce que cela passera par l'accélération vidéo sur la carte physique?

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

8
mwjackson

Peut-être qu'une explication entre les graphiques d'un invité virtuel et le système d'exploitation hôte aiderait ici.

Tout d'abord les bases:

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

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é de l'utiliser. Ce "périphérique virtuel" est mappé sur le périphérique physique réel 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 attribué. . L'intérêt 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 à l'hôte lui-même.

Pour montrer cela en pratique, vous pouvez exécuter lsusb à la fois sur l'hôte et sur l'invité - sur mon système d'exploitation hôte, je dispose 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

Oneiric O/S sur mon invité, je peux voir les périphériques USB suivants - ils 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

Tous les systèmes d’invités, qu’ils soient sous Windows ou sous Linux, ne verront que ce périphérique invité virtuel.

Graphiques hôtes vs graphiques invités

C'est la même chose pour les graphiques.

Les graphiques de mon hôte 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é, oneiric 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’invité 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 dans 11.10 - jockey voit et recommande de l'installer) installe des modules supplémentaires du noyau (ou des pilotes de périphériques pour les invités Windows) afin de permettre au système d'exploitation invité d'accéder à vos graphiques de système d'exploitation hôte. Encore une fois, ce n’est pas une cartographie directe, mais permet de voir des graphiques accélérés en 3D.

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

Encore une fois, j’insiste sur le fait que le système d’invité invité ne voit pas votre carte graphique réelle; elle passe simplement l’appel OpenGL (ou DirectX) de l’invité directement au matériel hôte à traiter.

enter image description here

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

Puisque vous avez mentionné que vous utilisez un système d’invité invité Windows, la case à cocher 2D s’applique à vous puisqu’un passage similaire de programmation des appels à l’interface est effectué .

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

Etant donné que la capacité OpenGL (ou DirectX) des graphismes commutables supérieurs est supérieure au jeu de puces intégré, vous obtiendrez des performances graphiques relativement améliorées avec les applications gourmandes en graphiques Guest O/S. Toutefois, cette amélioration n’est pas aussi spectaculaire que l’exécution native de la même application sur l’hôte, car elle fonctionne toujours dans les limites imposées par le périphérique graphique d’invité virtuel de 128 Mo.

source

9
fossfreedom

Une réponse ci-dessus https://askubuntu.com/a/85138/38052 explique comment tout ce que le système d'exploitation invité voit est une sorte d'abstraction. Alors que cela était tout à fait vrai, je pense que les choses changent et que cela n’est peut-être plus tout à fait vrai.

Certains processeurs plus récents prennent également en charge la virtualisation I/O 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 Wikipédia sur la virtualisation x86:

La virtualisation I/O MMU d'Intel (AMD-Vi et VT-d) Article principal: IOMMU

Une unité de gestion de mémoire d'entrée/sortie (IOMMU) permet aux machines virtuelles invitées d'utiliser directement des périphériques, tels qu'Ethernet, des cartes graphiques accélérées et des contrôleurs de disque dur, via DMA et d'interrompre le mappage. Ceci est parfois appelé PCI passthrough. AMD et Intel ont tous deux 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 quelques problèmes. D'une part, dans les ordinateurs portables Optimus, Intel IGP restitue toujours la sortie finale à l'écran. Je ne vois pas très bien comment le système d'exploitation invité et le système d'exploitation hôte vont tous deux piloter l'IGP. Une idé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 vois pas comment on s'y prendrait pour le faire.

5
sarang

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

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

Optimus est toujours plus compliqué. Je teste cela sur un ASUS UX501. J'ai réussi à faire passer la puce NVidia à l'invité Windows, qui apparaît dans le gestionnaire de périphériques sous le nom de "Contrôleur vidéo 3D". Mais je n'ai pas pu installer de pilotes Windows pour le prendre en charge. Il semble que la présence de graphiques Intel est un 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 simplement un accélérateur pour la puce Intel intégrée. Ils ne semblent pas fonctionner comme deux appareils distincts indépendamment.

1
Mathew Hart