Architecture des hyperviseurs

Un article de Wikipédia, l'encyclopédie libre.

L'architecture d'un hyperviseur englobe l'ensemble des composants et leur organisation qui permettent la mise en place de la virtualisation d'un ou plusieurs systèmes d'exploitations ou logiciels. En effet, le rôle d'un hyperviseur, qu'il soit de type 1 (natif) ou de type 2 (invité) est de fournir pour chaque machine virtuelle un ensemble de modules et d'interfaces qui est une virtualisation d'un environnement physique réel. À travers ces modules, nous trouverons une abstraction de la mémoire physique, un système d'ordonnancement entre machine virtuelle, ainsi que d'autres périphériques physiques tels que des cartes réseaux virtuelles.

La mise en place d'une infrastructure virtualisée grâce à un hyperviseur implique un ensemble de contraintes liés à l'allocation de ressources aux machines virtuelles, celle-ci pouvant être plus ou moins gourmande.

Catégories d'hyperviseur[modifier | modifier le code]

Catégories des hyperviseurs
Catégories des hyperviseurs

Architecture native[modifier | modifier le code]

Les hyperviseurs natifs (type 1) sont directement intégrés au système d'exploitation de la machine hôte[1].

Dans cette approche, l'hyperviseur communique directement avec le matériel sur lequel il est exécuté. Il est également en mesure d'intercepter les entrées/sorties et d'en abstraire l'exécution pour le système d'exploitation invité[2].

Une architecture native fournit une virtualisation du matériel aux machines virtuelles. En effet, ces dernières interagissent avec des périphériques virtuels via des pilotes fournis par l'hyperviseur[2].

Architecture invitée[modifier | modifier le code]

Les hyperviseurs invités (type 2) sont exécutés au sein même d'un autre système d'exploitation[2], de ce fait ils n'ont qu'un accès limité aux ressources de la machine hôte, il est donc possible d'exécuter plusieurs hyperviseurs de ce type sur une même machine[1].

L'hyperviseur fourni une virtualisation du matériel au système invité. Lors d'un appel à une instruction privilégiée, l'hyperviseur vérifie sa cohérence avant de l’exécuter[2].

Méthodes de virtualisation[modifier | modifier le code]

Virtualisation Complète[modifier | modifier le code]

Dans le cas d'une virtualisation complète, le système invité ignore se trouver dans un environnement virtualisé. L'hyperviseur fournit une virtualisation de l'architecture et des ressources nécessaires à l’exécution du système invité, impliquant qu'il n'est pas nécessaire de modifier ce dernier[3].

Dans ce cas, les périphériques d'entrée/sortie utilisés par les machines virtuelles ne sont que des abstractions des périphériques physiques générées par l'hyperviseur. Toute interaction avec ces périphériques virtuels est redirigée directement vers les périphériques physiques[4]. De ce fait, ce type de virtualisation offre la meilleure solution en matière de performances, d'isolation et de sécurité des machines virtuelles. De plus, cette méthode simplifie la portabilité et la migrations de machines virtuelles[3].

Dans ce modèle, l'hyperviseur est exécuté avec un niveau de privilège 0 (ring 0). A contrario, les machines virtuelles sont exécutées avec un niveau de privilège 1 (ring 1). Ce niveau de droit permet d'assurer l'isolation des machines virtuelles en les empêchant d'exécuter directement des instructions sur le matériel, seules celles interceptées par l'hyperviseur pourront être exécutées[5].

Virtualisation Partielle[modifier | modifier le code]

Dans un modèle de virtualisation partielle, le système invité doit être modifié afin de pouvoir fonctionner dans l'environnement virtuel. La machine virtuelle a donc conscience de se trouver dans un environnement virtualisé[3],[6].

Même si les machines virtuelles sont exécutées avec un niveau de privilège «Ring 1» (droits d'accès limités), celles-ci sont tout de même gérées par l'hyperviseur qui lui dispose du niveau de privilège «Ring 0» (droits maximum)[7].

Les machines virtuelles n'ont accès qu'à des ressources virtualisées (cartes réseaux, disques durs). Ces ressources sont fournies par l'hyperviseur, qui est chargé d'intercepter les instructions transmises par les systèmes invités, et de les rediriger vers les périphériques physiques correspondants[4],[2]. Dans cette situation, on dit que les systèmes invités utilisent des «Hypercalls», des demandes de ressources à l'hyperviseur[6].

Mécanismes de l'hyperviseur[modifier | modifier le code]

Dans un système de machines virtuelles, les ressources (mémoire, processeur, périphériques) sont gérées par l'hyperviseur. Chaque ressource de chaque machine virtuelle est gérée via des algorithmes d'ordonnancement et de gestion fournis par l'hyperviseur[3].

Ordonnancement[modifier | modifier le code]

La répartition du temps CPU est une problématique importante pour la virtualisation. En effet, l'hyperviseur se doit d'adopter une politique d'ordonnancement précise et équitable pour ses machines virtuelles. Pour ce faire, il utilise des algorithmes d'ordonnancement visant à accorder un accès équitable aux ressources[8].

Les algorithmes suivant sont utilisés par des solutions de virtualisation :

  • Temps virtuel partagé (Borrowed Virtual Time) : Algorithme d'ordonnancement équitable basé sur un temps virtuel, fournissant les ressources aux différentes machines virtuelles chacune à leur tour[9].
  • The Simple Earliest Deadline First : Algorithme en temps réel et préemptif. Chaque processus indique à l'hyperviseur le temps d'utilisation du processeur dont il a besoin sous la forme (avec la taille de chaque tranche de temps de periode ). Ainsi l'hyperviseur fourni au processus une fraction du temps d'utilisation du processeur demandé par chaque machine virtuelle[10],[11]. Cela permet une répartition plus équitable du temps processeur accordé à chaque machine puisque les machines qui en ont le plus besoin auront droit à plus de temps de calcul que les autres.
  • The Credit Scheduling algorithm : Algorithme d'ordonnancement et de répartition de charge proposé par Xen[3] : à chaque machine virtuelle se voit assigner un poids et une casquette. Si la casquette est égale à 0, la machine virtuelle peut recevoir du temps CPU supplémentaire. Une valeur non nulle de la casquette (exprimée comme un pourcentage) détermine la limite maximum de temps CPU que peut recevoir une machine virtuelle[12],[10].

Virtualisation des ressources mémoires[modifier | modifier le code]

Translation d'adresse grâce aux shadow page table
Translation d'adresses grâce aux shadow page table

Dans le cadre de la virtualisation de la mémoire physique, deux espaces d'adressage sont gérées par l'architecture de l'hyperviseur :

  • Un espace d'adressage utilisé par l'hyperviseur, appelé «page table». Cet espace d'adressage est équivalent à celui présent sur un système d'exploitation standard[2],[6].
  • Un espace d'adressage utilisé par les machines virtuelle, appelé «shadow page table». Ce dernier est fourni par l'hyperviseur, qui se charge de traduire les adresses virtuelles du système invité vers les adresses virtuelles de sa «page table»[6],[2].

De plus, étant dans un environnement virtualisé, l'hyperviseur fourni aux machines virtuelles un ensemble de modules virtuels équivalent à ceux qu'on trouve dans une architecture physique. On trouve notamment une MMU (Memory Management Unit) et une TLB (Translation Lookaside Buffer) virtuelles et gérée par l'hyperviseur.

Déroulement d'une translation d'adresse[13],[2],[6] :

  1. Lorsque le système invité effectue une demande d'accès mémoire, ce dernier utilise les adresses virtuelles de la «shadow page table»
  2. La TLB virtuelle reçoit cette requête qui la transmet à la MMU virtuelle
  3. S'il existe une correspondance, l'adresse trouvée est transmise à la MMU de l'hyperviseur. Sinon, une exception « Page Fault » est déclenchée et redirigée vers la MMU de l'hyperviseur pour qu'il la traite
  4. La MMU de l'hyperviseur se charge de récupérer dans la «page table» l'adresse physique correspondante
  5. Si l'adresse physique existe, la translation est effectuée et l'adresse trouvée est retournée à la MMU de l'hyperviseur
  6. Enfin, la machine virtuelle récupère l'adresse physique correspondant à l'adresse virtuelle dans la shadow page table

Virtualisation des périphériques et des entrées/sortie[modifier | modifier le code]

Il existe de nombreux outils permettant la gestion de périphériques entre plusieurs machines virtuelles. En effet, les interfaces réseaux virtuelles et les commutateurs permettent de créer des réseaux virtuels et d'y associer les machines virtuelles corréspondante[14].

De plus l'hyperviseur virtualise la couche matérielle et offre à chaque machine virtuelle un ensemble de périphériques virtuels standardisés afin de garantir la portabilité entre les architectures sur lesquelles l'hyperviseur serait exécuté[14].

Implémentations existantes[modifier | modifier le code]

Xen[modifier | modifier le code]

Logo Xen
Xen

Xen est un hyperviseur natif très complet directement intégré au noyau linux de la machine hôte. Il offre à l'utilisateur le choix entre les 2 types de virtualisation et fournit ses propres mécanismes de gestion des ressources (ordonnanceur, gestionnaire de mémoire)[15],[16].

Les machines virtuelles créées sont isolées au sein d'un espace d'entrées/sorties dédié. Afin de gérer les ressources allouées aux machines virtuelles, Xen limite les accès privilégiés au matériel ainsi que les vecteurs d'interruptions. De plus, Xen virtualise la configuration matérielle pour que les machines invitées puissent consulter les ressources disponibles pour lui sans pour autant leur permettre d'accèder au reste des ressources matérielles[17].

Chaque page de la mémoire est détenue par au plus un domaine à la fois, et grâce à l'hyperviseur, il peut intéragir avec ces pages mémoires[18],[19]. De plus, l'ordonnancement des taches sous Xen s'effectue grâce à l'algorithme «The Credit Scheduling algorithm»[20],[21].

Il existe plusieurs versions du noyau linux intégrant Xen nativement. Néanmoins, du fait de sa complexité, son intégration à un noyau linux existant peut poser de nombreux problèmes[22]. Dans le cas d'une intégration d'hyperviseur à un noyau existant, il sera conseillé d'opter pour une solution plus simple d'installation.

KVM[modifier | modifier le code]

KVM (Kernel based Virtual Machine) est un hyperviseur natif de virtualisation complète. Il est très léger (environ 10 000 lignes de codes) et est installé sous la forme d'un simple module linux ce qui le rend très simple d'installation et d'utilisation[15],[22].

KVM fait directement appel aux mécanismes de gestion des ressources intégrés au noyau linux et considère les machines virtuelles comme de simples processus[15],[22].

Du fait du jeune âge du projet, KVM ne peut pas virtualiser toutes les architectures et il peut être intéressant d'opter pour un hyperviseur plus complet comme Xen[15].

Références[modifier | modifier le code]

  1. a et b Desai 2013, p. 222
  2. a b c d e f g et h Meghanathan 2012, p. 734
  3. a b c d et e Li 2010, p. 334
  4. a et b Zhang 2010, p. 117
  5. VMWare 2007, p. 4
  6. a b c d et e Palicherla 2015, p. 426
  7. VMWare 2007, p. 6
  8. Cherkasova 2007, p. 2-3
  9. Cherkasova 2007, p. 2
  10. a et b Cherkasova 2007, p. 3
  11. Li 2010, p. 334
  12. Hu 2010, p. 144
  13. Agesen 2010, p. 6-8
  14. a et b VMWare 2007, p. 7
  15. a b c et d Habib 2008, p. 1
  16. Barham 2003, p. 165
  17. Fraser 2004, p. 4
  18. Fraser 2004, p. 6
  19. Barham 2003, p. 166
  20. Ongaro 2008, p. 2
  21. Gupta 2007, p. 43-44
  22. a b et c YamunaDevi 2011, p. 2

Bibliographie[modifier | modifier le code]

  • (en) Ludmila Cherkasova, Diwaker Gupta et Amin Vahdat, « Comparison of the three CPU schedulers in Xen », ACM SIGMETRICS Performance Evaluation Review, no 35,‎ (DOI 10.1145/1330555.1330556)
  • (en) Yunfa Li, Wanqing Li et Congfeng Jiang, « A Survey of Virtual Machine System: Current Technology and Future Trends », Proceedings of the Third International Symposium on Electronic Commerce and Security (ISECS),‎ , p. 332-336 (DOI 10.1109/ISECS.2010.80, lire en ligne, consulté le )
  • (en) Binbin Zhang, « A Survey on I/O Virtualization and Optimization », ChinaGrid Conference (ChinaGrid), 2010 Fifth Annual,‎ , p. 117 - 123 (DOI 10.1109/ChinaGrid.2010.54)
  • (en) Irfan Habib, « Virtualization with KVM », Linux Journal,‎ (ISSN 1075-3583)
  • (en) L. YamunaDevi, P. Aruna, D.D. Sudha et N. Priya, « Security in Virtual Machine Live Migration for KVM », International Conference on Process Automation,‎ , p. 1-6 (DOI 10.1109/PACC.2011.5979008, lire en ligne, consulté le )
  • (en) Keir Fraser, Steven H, Rolf Neugebauer et Ian Pratt, « Safe hardware access with the Xen virtual machine monitor », 1st Workshop on Operating System and Architectural Support for the on demand IT InfraStructure (OASIS),‎ (lire en ligne, consulté le )
  • (en) Natarajan Meghanathan, « Virtualization of Virtual Memory Address Space », Proceedings of the Second International Conference on Computational Science, Engineering and Information Technology, ACM, cCSEIT '12,‎ , p. 732–737 (ISBN 978-1-4503-1310-0, DOI 10.1145/2393216.2393338, lire en ligne, consulté le )
  • (en) Ludmila Cherkasova, Diwaker Gupta et Amin Vahdat, « When Virtual is Harder than Real: Resource Allocation Challenges in Virtual Machine Based IT Environments », Hewlett-Packard Development Company, L.P,‎ , p. 1-8 (lire en ligne)
  • (en) VMware, « Understanding Full Virtualization, Paravirtualization, and Hardware Assist », VMware white paper,‎ (lire en ligne)
  • (en) Paul Barham, Boris Dragovic, Keir Fraser et Steven Hand, « Xen and the Art of Virtualization », SIGOPS Proceedings of the nineteenth ACM symposium on Operating systems principles, ACM, sOSP '03,‎ , p. 164–177 (ISBN 1-58113-757-5, DOI 10.1145/945445.945462, lire en ligne, consulté le )
  • (en) Abhinand Palicherla, Tao Zhang et Donald E. Porter, « Teaching Virtualization by Building a Hypervisor », Proceedings of the 46th ACM Technical Symposium on Computer Science Education, ACM, sIGCSE '15,‎ , p. 424–429 (ISBN 978-1-4503-2966-8, DOI 10.1145/2676723.2677254, lire en ligne, consulté le )
  • (en) Yanyan Hu, Xiang Long, Jiong Zhang et Jun He, « I/O Scheduling Model of Virtual Machine Based on Multi-core Dynamic Partitioning », Proceedings of the 19th ACM International Symposium on High Performance Distributed Computing, ACM, hPDC '10,‎ , p. 142–154 (ISBN 978-1-60558-942-8, DOI 10.1145/1851476.1851494, lire en ligne, consulté le )
  • (en) Ole Agesen, Alex Garthwaite, Jeffrey Sheldon et Pratap Subrahmanyam, « The Evolution of an x86 Virtual Machine Monitor », SIGOPS Oper. Syst. Rev., vol. 44,‎ , p. 3–18 (ISSN 0163-5980, DOI 10.1145/1899928.1899930, lire en ligne, consulté le )
  • (en) Diego Ongaro, Alan L. Cox et Scott Rixner, « Scheduling I/O in Virtual Machine Monitors », Proceedings of the fourth ACM SIGPLAN/SIGOPS international conference on Virtual execution environments, ACM, vEE '08,‎ , p. 1–10 (ISBN 978-1-59593-796-4, DOI 10.1145/1346256.1346258, lire en ligne, consulté le )
  • (en) R. Uhlig, G. Neiger, D. Rodgers et A.L. Santoni, « Intel virtualization technology », Intel Technology Journal 10, vol. 38,‎ , p. 48-56 (ISSN 0018-9162, DOI 10.1109/MC.2005.163, lire en ligne, consulté le )
  • (en) Edouard Bugnion, « Bringing Virtualization to the x86 Architecture with the Original VMware Workstation », ACM Transactions on Computer Systems (TOCS),‎ , p. 12 (DOI 10.1145/2382553.2382554)
  • (en) Chun-Hsian Huang, « Hardware Resource Virtualization for Dynamically Partially Reconfigurable Systems », Embedded Systems Letters, IEEE,‎ , p. 19 - 23 (DOI 10.1109/LES.2009.2028039)
  • Brevet  
  • (en) Goldberg et P. Robert, « Survey of virtual machine research », Computer,‎ , p. 34 - 45 (ISSN 0018-9162, DOI 10.1109/MC.1974.6323581)
  • (en) Aravind, Menon, Jose Renato, Santos, Yoshio , Turner, G. (John) , Janakiraman et Willy, Zwaenepoel, « Diagnosing performance overheads in the xen virtual machine environment », ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments (VEE),‎ , p. 13-23 (DOI 10.1145/1064979.1064984)
  • (en) Michael, Pearce, Sherali, Zeadally et Ray, Hunt, « Virtualization: Issues, security threats, and solutions », ACM Computing Surveys, no 17,‎ , p. 17 (ISSN 0360-0300, DOI 10.1145/2431211.2431216, lire en ligne)
  • (en) Sahoo, J., « Virtualization: A Survey on Concepts, Taxonomy and Associated Security Issues », Computer and Network Technology (ICCNT), 2010 Second International Conference on,‎ , p. 222 - 226 (DOI 10.1109/ICCNT.2010.49, lire en ligne)
  • (en) Seetharami R. Seelam et Patricia J. Teller, « Virtual I/O scheduler: a scheduler of schedulers for performance virtualization », ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments (VEE),‎ , p. 105-115 (DOI 10.1145/1254810.1254826, lire en ligne)
  • (en) Willmann, P., Shafer, J., Carr, D., Rixner, S., Cox, A.L. et Zwaenepoel, W., « Concurrent Direct Network Access for Virtual Machine Monitors », High Performance Computer Architecture, 2007. HPCA 2007. IEEE 13th International Symposium on,‎ , p. 306 - 317 (DOI 10.1109/HPCA.2007.346208, lire en ligne)
  • (en) Ankita Desai, Rachana Oza, Pratik Sharma et Bhautik Patel, « Hypervisor: A Survey on Concepts and Taxonomy », International Journal of Innovative Technology and Exploring Engineering (IJITEE), no 2,‎ , p. 222 (ISSN 2278-3075)

Liens externes[modifier | modifier le code]