Cet article devrait fournir beaucoup d’informations selon les critères que vous recherchez. Cependant, il est spécifique à VMware.
Le cas général est que cela dépend vraiment d'un certain nombre de choses:
- VT-x / AMD-V est-il utilisé?
- L'EPT est-il utilisé?
- VT-d ou un certain type de IOV est-il utilisé?
Les questions ci-dessus sont des questions d' utilisation d'instructions matérielles . En fonction des instructions matérielles du processeur AMD / Intel utilisées pour la virtualisation, la structure de l'hyperviseur est généralement assez différente. Si aucune instruction matérielle n'est utilisée, la machine virtuelle est dite "totalement émulée" ou "en cours d'exécution dans le logiciel", qui est souvent le mode le plus lent. Cependant, même sans support matériel, la paravirtualisation (où le système d'exploitation invité sait qu'il s'exécute sur une machine virtuelle) peut considérablement accélérer même une couche d'émulation logicielle, en fournissant une interface de programmation claire entre l'invité et l'hôte.
Certaines machines virtuelles, telles que qemu sans kqemu ou kvm, peuvent s'exécuter entièrement dans l'anneau 3 , mais cela comporte plusieurs limitations, telles que les performances et le manque d'accès matériel de bas niveau. En général, même les hyperviseurs sans aucune accélération matérielle s'exécutent généralement dans l'anneau 0, c'est-à-dire dans le noyau de l'hôte en tant que pilote.
L'utilisation des anneaux 1 et 2 est assez rare, mais cela se produit, comme indiqué dans l'article d'Anandtech. De plus, les anneaux 1 et 2 sont couramment utilisés pour les hyperviseurs à métal nu tels que Xen. À ma connaissance, le noyau du système d'exploitation hôte "dom0" de Xen fonctionne entièrement dans l'anneau 1 et seul le "microkernel" de Xen s'exécute dans l'anneau 0. Si Linux était le dom0, il s'exécuterait dans l'anneau 1, et les invités (domU) seraient hypervisés par Xen dans le cycle 0 et utilisés dans le cycle 2.
Bien entendu, les "anneaux" du processeur ne sont pas le seul mécanisme de sécurité ou d’isolation, et les instructions matérielles fournissent une aide précieuse pour séparer en toute sécurité les ordinateurs virtuels sans avoir à tout faire dans le logiciel. Les détails, si vous les voulez, sont mieux obtenus en lisant le manuel de programmation du processeur Intel, en particulier sur le VT-x.
La virtualisation imbriquée n’est généralement pas possible, sauf dans le cas de VMware (c’est le seul hyperviseur que je connaisse qui puisse le faire). Pour ce faire, il émule les instructions VT-x (et éventuellement EPT) au sein de l'invité, ce qui lui permet de penser qu'il dispose d'un véritable support VT-x / EPT. C'est probablement un tour d'hyperviseur, bien que je ne connaisse pas les détails de la mise en oeuvre. Cependant, EPT est souvent appelé "Tables de pages imbriquées". Je me demande donc si l'aspect "imbriqué" implique que vous pouvez créer d'autres niveaux d'imbrication que le niveau plus profond requis pour séparer les tables de pages de l'hôte de l'invité. (s)
Beaucoup plus commun pour la virtualisation imbriquée est que vous êtes bloqué en cours d'exécution "totalement émulé" ou, au mieux, paravirtualisé - ce qui entraîne de grandes performances.
Et en parlant de performances, je ne pense pas que très peu de gens utilisent la virtualisation imbriquée s’ils peuvent l’éviter, à l’exception peut-être de la virtualisation de conteneurs imbriqués (qui n’entraîne aucune surcharge CPU / mémoire / matériel). L'impact sur les performances, même avec le VT-x virtualisé de VMware, est si important que tout avantage potentiel en matière d'isolation est annulé. Faites-moi confiance, un seul niveau de virtualisation suffit, jusqu'à ce que / sauf si nous arrivons à un nœud matériel où il est pratique de nidifier plus profondément et de pouvoir absorber l'impact des niveaux d'indirection sur les performances.