Share via


Informatique en nuage : Classes de virtualisation

Il existe plusieurs approches ou classes différentes de virtualisation, chacune étant adaptée à sa propre situation.

Kai Hwang, Jack Dongarra, Geoffrey Fox

Adapté à partir de « Distributed and Cloud Computing: From Parallel Processing to the Internet of Things » (Syngress, une adresse bibliographique d'Elsevier)

En général, il existe trois classes type d'architecture d'ordinateur virtuel : l'hyperviseur, la virtualisation basée sur l'hôte et la paravirtualisation, qui se différencient par la couche de virtualisation. L'hyperviseur est aussi appelé le VMM (Virtual Machine Monitor).

Architecture de l'hyperviseur

L'hyperviseur prend en charge la virtualisation au niveau matériel sur les périphériques sans système d'exploitation tels que l'UC, la mémoire et les interfaces disque et réseau. Le logiciel hyperviseur est placé directement entre le matériel physique et le système d'exploitation. La couche de virtualisation est appelée le VMM ou l'hyperviseur.

L'hyperviseur fournit les hyperappels pour les systèmes d'exploitation et applications invités. Un hyperviseur peut prendre en charge une architecture micro-noyau comme Microsoft Hyper-V. Il peut aussi prendre en charge une architecture d'hyperviseur monolithique comme VMware ESX pour la virtualisation de serveur.

L'hyperviseur micro-noyau ne comprend que les fonctions de base et non changeantes (par exemple la gestion de la mémoire physique et la planification de processeur). Les pilotes de périphériques et autres composants changeables n'appartiennent pas à l'hyperviseur. L'hyperviseur monolithique met en œuvre toutes les fonctions mentionnées ci-dessus, notamment celles des pilotes de périphériques.

La taille du code d'hyperviseur d'un hyperviseur micro-noyau est donc inférieure à celle d'un hyperviseur monolithique. En fait, l'hyperviseur doit pouvoir convertir les périphériques physiques en ressources virtuelles dédiées à l'ordinateur virtuel déployé à utiliser.

Architecture Xen

Xen est un programme hyperviseur open source développé par la Cambridge University. Les composants essentiels d'un système Xen sont l'hyperviseur, le noyau et les applications. L'organisation des trois composants est importante.

Xen est un hyperviseur micro-noyau qui sépare la stratégie du mécanisme. L'hyperviseur Xen implémente tous les mécanismes et laisse le domaine 0 traiter la stratégie. Il ne comprend aucun pilote de périphérique en mode natif. Il fournit seulement un mécanisme qui permet à un système d'exploitation invité d'accéder directement aux périphériques physiques.

Par conséquent, la taille de l'hyperviseur Xen reste assez réduite. Xen fournit un environnement virtuel situé entre le matériel et le système d'exploitation. Un certain nombre de fournisseurs développent actuellement des hyperviseurs Xen commerciaux, dont Citrix XenServer et Oracle VM.

Comme les autres systèmes de virtualisation, de nombreux systèmes d'exploitation invités peuvent s'exécuter au dessus de l'hyperviseur. Toutefois, tous les systèmes d'exploitation invités ne sont pas égaux et l'un deux en particulier contrôle les autres. Le système d'exploitation invité qui possède la capacité de contrôle est appelé le domaine 0 et les autres sont appelés les domaines U. le domaine 0 est un système d'exploitation invité privilégié de Xen. Il est chargé lorsque Xen démarre, sans que des pilotes de systèmes de fichiers soient disponibles. Le domaine 0 est destiné à accéder directement au matériel et à gérer les périphériques. Ainsi, l'une des responsabilités du domaine 0 est d'allouer et mapper les ressources matérielles des domaines invités (les domaines U).

Par exemple, Xen est basé sur Linux et son niveau de sécurité est C2. Son ordinateur virtuel de gestion se nomme le domaine 0, qui dispose du privilège pour gérer les autres ordinateurs virtuels implémentés sur le même hôte. Si le domaine 0 est compromis, le pirate peut contrôler l'ensemble du système.

Dans le système de l'ordinateur virtuel, vous avez donc besoin de stratégies de sécurité pour améliorer la sécurité du domaine 0. Le domaine 0, qui se comporte comme un VMM, permet aux utilisateurs de créer, copier, enregistrer, lire, modifier, partager, migrer et restaurer les ordinateurs virtuels aussi facilement que lorsqu'ils manipulent un fichier. Malheureusement, cela ajoute aussi des problèmes de sécurité pendant le cycle de vie des logiciels et la durée de vie des données.

En général, vous pouvez imaginer la durée de vie d'une machine comme une ligne droite. L'état actuel de la machine est un point qui avance de façon monotone pendant l'exécution du logiciel. Pendant ce temps, vous modifiez la configuration, installez des logiciels et appliquez des correctifs.

Dans ce type d'environnement, l'état de l'ordinateur virtuel ressemble à un arbre : À n'importe quel point, l'exécution peut se diviser en n branches où différentes instances d'un ordinateur virtuel peuvent exister à n'importe quel point de l'arbre à tout moment donné. Les ordinateurs virtuels sont autorisés à être restaurés dans leurs états précédents durant leur exécution (par exemple pour corriger des erreurs de configuration) ou à redémarrer leur exécution à partir du même point de nombreuses fois (par exemple pour distribuer du contenu dynamique ou acheminer une image système en temps réel).

Traduction binaire avec virtualisation complète

En fonction des technologies d'implémentation, la virtualisation matérielle peut être classée en deux catégories : la virtualisation complète et la virtualisation basée sur l'hôte.

La virtualisation complète n'a pas besoin de modifier le système d'exploitation hôte. C'est à la traduction binaire d'intercepter et de virtualiser l'exécution de certaines instructions sensibles, non virtualisables. Les systèmes d'exploitation invités et leurs applications se composent d'instructions sensibles et non sensibles.

Dans un système basé sur l'hôte, un système d'exploitation hôte et un système d'exploitation invité sont utilisés. Une couche logicielle de virtualisation est créée entre le système d'exploitation hôte et le système d'exploitation invité.

Virtualisation complète

Avec la virtualisation complète, les instructions non sensibles sont exécutées directement sur le matériel, tandis que les instructions sensibles sont reconnues et remplacées par des trappes dans le VMM à émuler par logiciel. Les approches de l'hyperviseur et du VMM sont toutes deux considérées comme de la virtualisation complète.

Pourquoi seules les instructions sensibles sont-elles interceptées dans le VMM ? Cela est dû au fait que la traduction binaire peut générer une perte de performances importante. À l'inverse des instructions sensibles, les instructions non sensibles ne contrôlent pas le matériel et ne menacent pas la sécurité du système. L'exécution d'instructions non sensibles peut donc non seulement renforcer l'efficacité mais aussi garantir la sécurité du système.

Cette approche a été mise en œuvre par VMware et beaucoup d'autres éditeurs de logiciels. Le VMM analyse le flux d'instructions et identifie les instructions sensibles privilégiées, sensibles au contrôle et au comportement. Lorsque ces instructions sont identifiées, elles sont interceptées dans le VMM, qui émule le comportement de ces instructions. La méthode utilisée dans cette émulation est appelée la traduction binaire.

La virtualisation complète combine donc la traduction binaire et l'exécution directe. Le système d'exploitation invité est entièrement découplé du matériel sous-jacent. Le système d'exploitation invité ne sait donc pas qu'il est en cours de virtualisation.

Les performances de la virtualisation complète peuvent ne pas être idéales, car celle-ci intègre la traduction binaire qui prend du temps. La virtualisation complète des applications gourmandes en E/S pose un défi. La traduction binaire emploie un cache de code pour stocker les instructions sensibles traduites afin d'améliorer les performances, mais cela augmente le coût d'utilisation de la mémoire. Les performances de la virtualisation complète sur l'architecture x86 sont en général égales à 80-97 % des performances de la machine hôte.

Virtualisation basée sur l'hôte

Une autre architecture d'ordinateur virtuel consiste à installer une couche de virtualisation au dessus du système d'exploitation hôte. Ce système d'exploitation hôte reste responsable de la gestion du matériel. Les systèmes d'exploitation invités sont installés et exécutés au dessus de la couche de virtualisation. Les applications dédiées doivent être exécutées sur les ordinateurs virtuels. Certaines autres applications peuvent aussi fonctionner directement sur le système d'exploitation hôte.

Cette architecture basée sur l'hôte présente certains avantages distincts. Premièrement, l'utilisateur peut installer cette architecture d'ordinateur virtuel sans modifier le système d'exploitation hôte. Le logiciel de virtualisation peut compter sur le système d'exploitation hôte pour fournir les pilotes de périphériques et d'autres services de bas niveau. Cela simplifie la conception de l'ordinateur virtuel et facilite son déploiement.

Deuxièmement, l'approche basée sur l'hôte est adaptée à de nombreuses configurations de machine hôte. Comparées à l'architecture hyperviseur/VMM, les performances de l'architecture basée sur l'hôte peuvent aussi être faibles. Lorsqu'une application demande un accès matériel, quatre couches de mappage sont impliquées, ce qui réduit sensiblement les performances. Lorsque l'ISA (Internet Security and Acceleration) d'un système d'exploitation hôte est différent de l'ISA du matériel sous-jacent, la traduction binaire doit être adoptée. Bien que l'architecture basée sur l'hôte soit flexible, les performances sont trop faibles pour être utilisables dans la pratique.

Paravirtualisation

La paravirtualisation a besoin de modifier le système d'exploitation invité. Un ordinateur virtuel paravirtualisé fournit des API spéciales qui nécessitent des modifications de système d'exploitation importantes dans les applications utilisateur. La dégradation des performances est un problème essentiel du système virtualisé. Personne ne veut utiliser d'ordinateurs virtuels s'ils sont beaucoup plus lents que les machines physiques.

Vous pouvez insérer la couche de virtualisation à différents emplacements de la pile logicielle d'une machine. Toutefois, la paravirtualisation tente de réduire la surcharge de virtualisation et améliore donc les performances en modifiant seulement le noyau du système d'exploitation. Lorsque les systèmes d'exploitation sont paravirtualisés, ils sont assistés par un compilateur intelligent pour remplacer les instructions de système d'exploitation non virtualisables par des hyperappels.

Le processeur x86 traditionnel offre quatre rings d'exécution d'instructions : les rings 0, 1, 2 et 3. Plus le nombre de rings est faible, plus le privilège de l'instruction exécutée est élevé. Le système d'exploitation est responsable de la gestion du matériel et des instructions privilégiées de l'exécution au ring 0, tandis que les applications de niveau utilisateur sont exécutées au ring 3. Le meilleur exemple de paravirtualisation est le KVM (Kernel-Based VM).

Lorsque le processeur x86 est virtualisé, une couche de virtualisation est insérée entre le matériel et le système d'exploitation. Selon la définition du ring x86, la couche de virtualisation doit aussi être installée au ring 0. Différentes instructions au ring 0 peuvent provoquer des problèmes. Toutefois, lorsque le noyau du système d'exploitation invité est modifié pour la virtualisation, il ne peut plus s'exécuter directement sur le matériel.

Bien que la paravirtualisation réduise la surcharge, elle génère des problèmes. Premièrement, sa compatibilité et sa portabilité peuvent être aléatoires, car elle doit prendre également en charge le système d'exploitation non modifié. Deuxièmement, le coût de mise à jour des systèmes d'exploitation paravirtualisés est élevé, car ils peuvent nécessiter d'importantes modifications du noyau du système d'exploitation.

Enfin, les performances avantageuses de la paravirtualisation varie largement en fonction des variations de la charge de travail. Comparée à la virtualisation complète, la paravirtualisation est relativement facile et plus pratique. Le principal problème de la virtualisation est que ses performances sont faibles en matière de traduction binaire. Il est difficile d'accélérer la traduction binaire. C'est pourquoi beaucoup de produits de virtualisation utilisent l'architecture de paravirtualisation. Les produits de virtualisation Xen, KVM et VMware ESX en sont de bons exemples.

KVM est un outil de paravirtualisation assisté par matériel qui améliore les performances et prend en charge les systèmes d'exploitation invités non modifiés tels que Windows, Linux, Solaris et d'autres variantes Unix.

C'est un système de paravirtualisation Linux, qui appartient au noyau Linux version 2.6.20. Le noyau Linux existant réalise la gestion et la planification de la mémoire. KVM fait le reste, ce qui est plus simple que de faire contrôler l'ensemble de la machine par l'hyperviseur.

À la différence de l'architecture de virtualisation complète qui intercepte et émule les instructions privilégiées et sensibles lors de l'exécution, la paravirtualisation traite ces instructions au moment de la compilation. Le noyau du système d'exploitation invité est modifié pour remplacer les instructions privilégiées et sensibles par les hyperappels envoyés à l'hyperviseur ou au VMM. Xen est un exemple de cette architecture de paravirtualisation.

Les instructions privilégiées sont implémentées par les hyperappels envoyés à l'hyperviseur. Après avoir remplacé les instructions par des hyperappels, le système d'exploitation invité modifié émule le comportement du système d'exploitation invité d'origine. Sur un système Unix, un appel système intègre une routine d'interruption ou de service. Les hyperappels appliquent une routine de service dédiée dans Xen.

Ces différents types d'architecture de virtualisation présentent des points forts et des points faibles. Examinez-les un par un pour appliquer l'architecture la mieux adaptée à votre environnement.

Kai Hwang

Kai Hwang est un professeur de génie informatique à l'Université de Californie du Sud et de la Chaire de professeur invité à L'Université de Tsinghua en Chine. Il est titulaire d’un doctorat en génie informatique et électrique de l’University of Californie à Berkeley. Il a publié plusieurs ouvrages sur l'architecture d'ordinateur, l'arithmétique numérique, le traitement parallèle, les systèmes distribués, la sécurité Internet et l'informatique en nuage.

Jack Dongarra

Jack Dongarra est professeur distingué en génie électrique et informatique à l'Université du Tennessee, chercheur à l'Oak Ridge National Laboratory et assistant itinérant à l'Université de Manchester. Jack Dongarra est pionnier dans les domaines des bancs d'essai de superordinateurs, de l'analyse numérique, des solveurs d'algèbre linéaire et de l'informatique hautes performances et a publié plusieurs ouvrages ayant trait à ces domaines.

Geoffrey Fox

Geoffrey Fox est un professeur distingué d'informatique et de physique et doyen associé des cycles supérieurs et de la recherche à la School of Informatics and Computing à l'université de l'Indiana. Il a obtenu son doctorat en informatique à l'Université de Cambridge au Royaume-Uni. Geoffrey Fox est connu pour son travail approfondi et ses nombreuses publications dans le domaine de l'architecture parallèle, de la programmation distribuée, de l'informatique de grille, des services Web et des applications Internet.

©2011 Elsevier Inc. Tous droits réservés. Imprimé avec l'autorisation de Syngress, une adresse bibliographique d'Elsevier. Copyright 2011. « Distributed and Cloud Computing: From Parallel Processing to the Internet of Things » de Kai Hwang, Jack Dongarra et Geoffrey Fox. Pour plus d'informations sur cet ouvrage et d'autres ouvrages similaires, consultez le site elsevierdirect.com.

Contenu associé