Performances des hyperviseurs

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

Les performances des hyperviseurs correspondent, en informatique, au comportement d'un moniteur de machines virtuelles ou hyperviseur pour gérer une ou plusieurs machines virtuelles, une machine virtuelle fonctionne comme une machine physique avec un hyperviseur fournissant une couche de virtualisation matérielle.

Il existe plusieurs architectures d'hyperviseurs pour virtualiser un système et gérer les ressources matérielles, leurs mécanismes apportent un niveau de performance pour les machines virtuelles. Selon l'hyperviseur utilisé, le processeur, la mémoire, les entrées/sorties et le stockage sont des éléments nécessaires sur lesquels les hyperviseurs doivent agir pour la virtualisation. Selon les besoins d'utilisation, une architecture d'hyperviseur est à privilégier pour ses performances.

Comparaison des stratégies d'hypervision[modifier | modifier le code]

L'isolation procurée par la virtualisation limite la visibilité d'une application dans une machine virtuelle, c'est une cause des anomalies de performance qui se produisent dans un environnement virtualisé. Plus précisément, un utilisateur qui exécute la même machine virtuelle, sur le même matériel, à différents moments, verra une grande disparité dans les performances. Les performances sont basées sur le travail effectué par d'autres machines virtuelles sur l'hôte physique [1].

Les hyperviseurs de type container (Docker, LXC) sont soumis au partage du noyau du système d'exploitation entre l'hôte et l'invité. Il est impossible d'utiliser un container Windows sur un hôte Linux [2].

Cette limitation n'est pas un problème pour les data-centers, pourtant les noyaux de systèmes d'exploitation partagés soulèvent un risque plus grand pour la sécurité que d'exécuter plusieurs noyaux sur une même machine hôte [2].

Comparaison entre para-virtualisation et full-virtualisation[modifier | modifier le code]

Le nombre maximal d'opérations à virgules flottantes sur un système Fedora 8 virtualisé avec KVM est environ 83,46 % égale à la version native, environ 97,28 % avec Xen. Cela suggère que l'efficacité du traitement de KVM sur les nombres à virgules flottantes n'est pas aussi bon que Xen. KVM doit vérifier si chaque instruction d'exécution est une interruption, un défaut de page, entrée/sortie ou une instruction commune et décider de quitter ou de rester en mode invité, cette décision gaspille beaucoup de temps. Au contraire, Xen permet aux systèmes invités d'exécuter des instructions de calcul avec virgule flottante sur le processeur hôte pour gagner du temps de résolution[3]. KVM, qui permet l'utilisation de partition physique de l'hôte, offre des performances native pour la lecture des données, mais n'est capable d'atteindre que 62 % des performances natives pour l'écriture [4].

Comparaison d'hyperviseurs pour les HPC[modifier | modifier le code]

Walters et al. ont testé les performances et la capacité d'évolution de VMWare Server, Xen et OpenVZ pour des applications distribuées HPC. Leurs travaux portent sur des tests de transmission sur le réseau, et sur le comportement du système de fichier. Leurs résultats montrent que Xen surpasse OpenVZ et VMWare Server en utilisation de la bande passante, Xen est capable d'utiliser 94,5 % de la bande passante du système hôte [5].

Les résultats sur les systèmes de fichiers montrent qu'OpenVZ a des performances très proches d'un système natif, avec des performances de 90 % d'un système natif dans le pire des cas (opérations sur des fichiers de 32 Mo). Les systèmes invités d'OpenVZ résident dans le système de l'hôte comme des répertoires de fichiers. Xen, qui utilise la gestion par volumes logiques (LVM) pour le stockage d'invité, présente des performances plus faibles avec des surcharges de 46 % en lecture et 40 % en écriture [6]. KVM, qui permet l'utilisation de partition physique de l'hôte, offre les performances du système hôte pour la lecture des données, mais n'est capable d'atteindre que 62 % des performances par rapport à un système natif pour l'écriture [4].

Différents aspects de la performance pour des hyperviseurs[modifier | modifier le code]

Performances des mécanismes de la virtualisation[modifier | modifier le code]

Les hyperviseurs ont besoin d'isoler les interruptions et les accès à la mémoire. C'est très coûteux quant aux performances, auparavant cette opération était réalisée par un mécanisme de translation de code. Depuis quelques années, les fabricants de processeurs ont ajouté des instructions spécialisées (Intel VT-x / EPT et AMD-V / RVI) afin de permettre la virtualisation assistée par le matériel. KVM + QEMU et VirtualBox, utilisent ces instructions. Le procédé impose à l'hyperviseur d'exposer explicitement les extensions de virtualisation du jeu d'instructions au système d'exploitation invité sous-jacent [2].

Performances de la gestion des ressources par un hyperviseur[modifier | modifier le code]

Les surcoûts quant aux performances pour virtualiser un système comportent trois aspects principaux : la virtualisation du processeur, de la mémoire et des entrées/sorties. Les hyperviseurs très performants tels que Xen et VMware sont en mesure de réaliser la virtualisation du processeur et de la mémoire avec très peu de ressources [7].

Architecture et ressources nécessaires[modifier | modifier le code]

L'architecture bare-metal apporte des performances très similaires à un système installé nativement mais il fournit le minimum d'isolation entre les processus en cours [2].

Processeur[modifier | modifier le code]

L'utilisation d'un hyperviseur au-dessous du système d'exploitation diffère du schéma habituel où le système d'exploitation est l'entité la plus privilégiée dans le système. Afin de protéger l'hyperviseur de débordements du système d'exploitation invité et des domaines les uns sur les autres, les OS invités doivent être modifiés pour fonctionner à un niveau de privilège inférieur [8].

De nombreuses architectures de processeur ne fournissent que deux niveaux de privilèges. Dans une virtualisation efficace, des niveaux de privilèges supplémentaires sont disponibles sur x86, car il prend en charge quatre niveaux de privilèges distincts dans le matériel [8].

L'utilisation du processeur a des implications critiques sur les performances des autres caractéristiques du système, à savoir sur la consommation d'énergie. L'implication ne se limite pas au cas où le processeur fonctionne à 100 %. Plus la charge du processeur augmente, plus la consommation de ce dernier est importante [9].

Dans l'évaluation des performances d'une machine virtuelle, les processus sont gérés par la machine virtuelle à la place du système d'exploitation sous-jacent. Les threads émulés des environnements multi-thread, en dehors des capacités du système d'exploitation d'origine, sont gérés dans l'espace utilisateur à la place de l'espace noyau, permettant le travail avec des environnements sans support natif des threads [10].

De bonnes performances sur un microprocesseur multi-cœur sont obtenues grâce à l'implémentation de threads natifs pouvant attribuer automatiquement le travail à plusieurs processeurs, ils permettent un démarrage plus rapide de processus sur certaines machines virtuelles. Un thread a la possibilité de bloquer les autres threads pour effectuer une opération d'entrée/sortie. Pour éviter le problème, les threads doivent utiliser des opérations d'entrée/sortie asynchrones. La complexité accrue peut être cachée par la mise en œuvre de processus d'entrée/sortie séparés natifs qui coopèrent avec les threads [10].

Mémoire[modifier | modifier le code]

La mémoire virtuelle est la partie la plus difficile à créer avec la paravirtualisation :

L'architecture X86 ne possède pas de gestion logicielle du TLB (mémoire cache du processeur); lorsque la place manque, les TLB sont nettoyées automatiquement par le processeur en ré-écrivant sur la structure de la table de pages. Pour obtenir la meilleure performance possible, toutes les traductions de page valides pour l'espace de l'adresse actuelle doivent être présents dans la table de pages [11].

Entrées/sorties et stockage[modifier | modifier le code]

La virtualisation des entrées/sorties par un hyperviseur pose un problème complexe. Les périphériques d'entrée/sortie sont généralement partagés entre toutes les machines virtuelles dans une machine physique, l'hyperviseur doit vérifier que les accès des périphériques sont légaux cela nécessite que l'hyperviseur ou un domaine privilégié doit intervenir sur tous les accès d'entrée/sortie du client de machine virtuelle. L'intervention conduit à plus de latence aux entrées/sorties et plus de ressources CPU en raison de changements de contexte entre les machines virtuelles invitées et l'hyperviseur [7].

Les machines virtuelles hébergent un système d'exploitation, des applications, des services et éventuellement des données. Elles exigent une grande place de stockage sur le disque. Une quantité importante de l'activité d'entrée/sortie est réservée pour garder plusieurs machines virtuelles vivantes sur un seul serveur. Les applications nécessitant une grande quantité d'entrée/sortie, comme les serveurs de base de données, pourraient faire face à d'importants ralentissements si les sous-systèmes d'entrée/sortie ne sont pas en mesure de faire face à la charge accrue. Le stockage est une ressource clé pour un environnement virtualisé. Après tout, une machine virtuelle est techniquement un ensemble de fichiers qui peut contenir un système d'exploitation avec ses applications installées [10].

Caractéristiques et utilisation des outils de virtualisation[modifier | modifier le code]

Caractéristiques et utilisation des outils de virtualisation [12]
Outil de virtualisation Disponibilité Avantage Mode de virtualisation
VMware Commercial Gestion de l'infrastructure virtuelle Full virtualisation
Xen Open source Migration des machines virtuelles Para-virtualisation
QEMU Open source Support des architectures hétérogènes du matériel Virtualisation natif
VNUML (Virtual Network User Mode Linux) Open source Exécution d'OS invités comme une application normale au sein d'un système Linux hôte Full virtualisation
UML (User Mode Linux) Open source Support des systèmes Linux Para-virtualisation
Virtual Box Commercial Support des protocoles distants pour la version commerciale Virtualisation natif
VMware Workstation Open source Fonctionne en dessous d'un système d'exploitation open source Full virtualisation
VMware Vcenter Converter Open source Fonctionne en dessous d'un système d'exploitation open source Full virtualisation
OpenVZ Open source Partitionnement des ressources, système de containeur Virtualisation niveau système d'exploitation
Bochs Open source Analyse des bugs sur les systèmes d'exploitation invités Emulateur
VMware server Gratuit, non open source Fonctionne sur les plates-formes Windows et Linux Full virtualisation
Microsoft Virtual PC Commercial Support des logiciels Microsoft Full virtualisation
Parallels Commercial Exécution de plusieurs systèmes invités, de plates-formes différentes sur un hôte Full virtualisation
KVM (Kernel-based Virtual Machine) Open source Pour les serveurs Linux, support processeur pour la virtualisation Full virtualisation
VServer Open source Isolation de plusieurs serveurs Linux sur une même plate-forme matérielle Full virtualisation
LXC (Linux Container) Open source Pour les systèmes hôte Linux, système de containeur Para-virtualisation

Notes et références[modifier | modifier le code]

  1. Koh 2007, p. 200
  2. a b c et d Mühlbauer 2015, p. 2
  3. Che 2008, p. 384
  4. a et b Regola 2010, p. 411
  5. Walter 2008, p. 863
  6. Walter 2008, p. 864
  7. a et b Huang 2006, p. 128
  8. a et b Barham 2003, p. 4
  9. Venkateswara Rao 2015, p. 8
  10. a b et c Venkateswara Rao 2015, p. 9
  11. Barham 2003, p. 3
  12. Masood 2015, p. 146

Bibliographie[modifier | modifier le code]

  • (en) A.J. Younge, R. Henschel, J.T. Brown et G. von Laszewski, « Analysis of Virtualization Technologies for High Performance Computing environments », Cloud Computing (CLOUD), 2011 IEEE International Conference,‎ , p. 9-16 (DOI 10.1109/CLOUD.2011.29, lire en ligne)
  • (en) Younggyun Koh, R. Knauerhase, P. Brett et M. Bowman, « An Analysis of Performance Interference Effects in Virtual environments », Performance Analysis of Systems & Software, 2007. ISPASS 2007. IEEE International Symposium,‎ , p. 200-209 (DOI 10.1109/ISPASS.2007.363750, lire en ligne)
  • (en) S. Kundu, R. Rangaswami, K. Dutta et Ming Zhao, « Application performance modeling in a virtualized environment », High Performance Computer Architecture (HPCA), 2010 IEEE 16th International Symposium,‎ , p. 1-10 (DOI 10.1109/HPCA.2010.5463058, lire en ligne)
  • (en) Hyunchan Park, Cheol-Ho Hong, Younghyun Kim et Seehwan Yoo, « Improving I/O performance of Xen hypervisors for solid state drives », Consumer Electronics (ICCE), 2015 IEEE International Conference,‎ , p. 601-602 (DOI 10.1109/ICCE.2015.7066544, lire en ligne)
  • (en) Mark S. Squillante, Yanyong Zhang, Anand Sivasubramaniam et Natarajan Gautam, « Modeling and Analysis of Dynamic Coscheduling in Parallel and Distributed environments », SIGMETRICS '02, ACM, sIGMETRICS '02,‎ , p. 43–54 (ISBN 1-58113-531-9, DOI 10.1145/511334.511341, lire en ligne)
  • (en) P.V.V. Reddy et L. Rajamani, « Performance comparison of different operating systems in the private cloud with KVM hypervisor using SIGAR framework », Communication, Information & Computing Technology (ICCICT), 2015 International Conference,‎ , p. 1-6 (DOI 10.1109/ICCICT.2015.7045680, lire en ligne)
  • (en) Vishakha Gupta, Rob Knauerhase et Karsten Schwan, « Attaining System Performance Points: Revisiting the end-to-end Argument in System Design for Heterogeneous Many-core Systems », SIGOPS Oper. Syst. Rev., vol. 45,‎ , p. 3–10 (ISSN 0163-5980, DOI 10.1145/1945023.1945026, lire en ligne)
  • (en) G. Vallee, T. Naughton, C. engelmann et H. Ong, « System-Level Virtualization for High Performance Computing », Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference,‎ , p. 636-643 (DOI 10.1109/PDP.2008.85, lire en ligne)
  • (en) Anum Masood, Muhammad Sharif, Mussarat Yasmin et Mudassar Raza, « Virtualization Tools and Techniques: Survey », Nepal Journal of Science and Technology, vol. 15,‎ (DOI 10.3126/njst.v15i2.12131, lire en ligne)
  • (en) Vedula Venkateswara Rao et Mandapati Venkateswara Rao, « A Survey on Performance Metrics in Server Virtualization with Cloud Environment », Journal of Cloud Computing, IBIMA Publishing,‎ , article no 291109 (DOI 10.5171/2015.291109, lire en ligne)
  • (en) Jianhua Che, Qinming He, Qinghua Gao et Dawei Huang, « Performance Measuring and Comparing of Virtual Machine Monitors », IEEE/IFIP International Conference on Embedded and Ubiquitous Computing, 2008. EUC '08, vol. 2,‎ , p. 381–386 (DOI 10.1109/EUC.2008.127, lire en ligne)
  • (en) J.P. Walter, V. Chaudhary, Minsuk Cha et S. Guercio, « A Comparison of Virtualization Technologies for HPC », 22nd International Conference on Advanced Information Networking and Applications, 2008. AINA 2008,‎ , p. 861–868 (DOI 10.1109/AINA.2008.45, lire en ligne)
  • (en) N. Regola et J.-C. Ducom, « Recommendations for Virtualization Technologies in High Performance Computing », 2010 IEEE Second International Conference on Cloud Computing Technology and Science (CloudCom),‎ , p. 409–416 (DOI 10.1109/CloudCom.2010.71, lire en ligne)