Pour savoir où on va, il faut savoir d'où l'on vient

Vous avez
une question ?
Un projet ?

Contactez nous !
 

Contactez-nous

Vous avez une question ? un projet ? 
Vous souhaitez plus d'informations sur un produit ? sur notre offre ? 
Contactez-nous, on vous répond sous 4H.

eZHumanCAPTCHACode reload
retour

ÉTAT DE L'ART

ÉTAT DE L'ART

Il existe différentes techniques de virtualisation, citons par niveau d'abstraction croissant :

  • L’isolation
  • La paravirtualisation
  • La virtualisation complète, ou machine virtuelle
  • Le partitionnement matériel

L’isolation consiste à mettre en place, sur un même noyau de système d’exploitation, une séparation forte entre différents contextes logiciels.  Il s'agit de la technique de virtualisation la plus « légère » qui existe.

La paravirtualisation présente aux systèmes d’exploitation une machine générique spéciale, qui requiert donc des interfaces spéciales, intégrées aux systèmes invités sous la forme de drivers ou de modifications du noyau. Il s'agit d'un compromis entre un niveau d'abstraction élevé et un niveau de performance satisfaisant.

Dans la virtualisation complète, l’hyperviseur intercepte de manière transparente tous les appels que le système d’exploitation peut faire aux ressources matérielles, et supporte donc des systèmes invités non-modifiés.

Le partitionnement matériel, enfin, est la technique historique utilisée sur les gros systèmes. Elle consiste à séparer les ressources matérielles au niveau de la carte mère de la machine. Cette technique est surtout répandue dans les serveurs hauts de gamme, par exemple les Logical Domains de chez Sun. Elle est assez rare dans le monde x86.  Les blades en sont un exemple, mais ils n'offrent pas des fonctionnalités aussi avancées que ce que l'on retrouve sur d'autres architectures matérielles comme SPARC.

Nous présenterons dans la suite les deux techniques majeures du monde x86 : l'isolation et la virtualisation complète.

L'édition précédente de ce livre blanc traitait de paravirtualisation, cette séparation n'est plus d'actualité car paravirtualisation et virtualisation complète sont désormais utilisées conjointement au sein d'un même produit.

Isolation

Présentation

L'isolation (aussi appelée cloisonnement) est une technique qui intervient au sein d’un même système d'exploitation. Elle permet de séparer un système en plusieurs contextes ou environnements. Chacun d'entre eux est régi par l'OS hôte, mais les programmes de chaque contexte ne peuvent communiquer qu'avec les processus et les ressources associées à leur propre contexte.

Il est ainsi possible de partitionner un serveur en plusieurs dizaines de contextes, presque sans ralentissement.

L'isolation est utilisée sous Unix depuis longtemps pour protéger les systèmes. Via des mécanismes comme chroot ou jail il est possible d'exécuter des applications dans un environnement qui n'est pas celui du système hôte, mais un « mini système » ne contenant que ce dont l'application a besoin, et n’ayant que des accès limités aux ressources. 

Il est possible également de lancer des programmes dans une autre distribution que celle du système principal.

Avec l’isolation, l’espace noyau n’est pas différencié, il est unique, partagé entre les différents contextes. Mais on définit de multiples espaces utilisateurs cloisonnés. C’est ainsi que l’on peut faire cohabiter différentes distributions de système d’exploitation,  à condition qu’elles partagent le même noyau.

L’isolation des contextes est une solution légère, tout particulièrement dans les environnements Linux.    

L’unicité du noyau reste bien sûr une petite limitation.  D’une part en termes de robustesse, puisqu’un plantage du noyau – fort heureusement très rare dans le monde Linux – plante simultanément tous les environnements.   D’autre part dans les utilisations possibles, puisque typiquement ce mode ne conviendra pas pour valider une nouvelle version de noyau.

Mais pour les besoins les plus courants de la virtualisation, la simplicité de mise en œuvre et le faible overhead sont d’excellents arguments.

Screenshot from 2015-04-21 15:13:29
Les solutions

Les deux principales solutions pour l’isolation Linux sont OpenVZ et LXC. Linux-Vserver, une solution qui a eu son heure de gloire, est parfois rencontrée, mais son adoption diminue rapidement.
OpenVZ est aujourd'hui la solution la plus mature et disposant du plus grand nombre de fonctionnalités. C'est pourquoi c'est la solution que nous avons choisi de présenter en détails. LXC est pour sa part une solution relativement jeune et encore instable, mais très prometteuse, car plus profondément intégrée au noyau Linux.

VIRTUALISATION COMPLÈTE

Présentation

La virtualisation complète, comme son nom l'indique, consiste à simuler un ordinateur complet, de façon à exécuter le système d'exploitation de façon naturelle, sans que celui-ci ne se rende compte qu'il est virtualisé.

On parle aussi de 'machines virtuelles', en désignant ces systèmes simulés.

Cela permet donc de faire fonctionner plusieurs systèmes d'exploitation non modifiés sur un serveur physique. Le matériel du serveur physique est rendu abstrait et remplacé, du point de vue des serveurs virtuels, par un matériel « générique ». Ce matériel est soit émulé pour ressembler à un matériel réel (généralement répandu, comme les contrôleurs disque Intel PIIX ou les cartes réseau Broadcom), soit paravirtualisé, c'est à dire qu'il nécessite un pilote particulier dans le système invité pour fonctionner.

Sur une machine virtuelle, il est possible d'installer n'importe quel OS non modifié, et donc aussi bien propriétaire (Windows) que open source, du moment qu'il dispose des pilotes pour le matériel que lui présente l'hyperviseur.

Les premières solutions de virtualisation complète étaient entièrement basées sur des émulateurs, donc des logiciels qui réinterprétaient chaque opération demandée par le système virtuel, pour les adapter au matériel physique, au prix d'une perte considérable de performances.

Les produits modernes tirent partie des nouveaux jeux d'instructions spécialisés des dernières générations de processeurs pour assurer des performances de calcul quasi identiques aux performances natives.

Avec l'essor de ce procédé, des techniques issues de la paravirtualisation se sont greffées aux hyperviseurs : en effet la présence de périphériques émulés ralentissait les entrées-sorties de la machine virtuelle, en particulier les accès disques et le trafic réseau. Un pilote de périphérique spécial, capable de dialoguer nativement avec l'hyperviseur sans passer par une interface simulée, permet d'obtenir des performances quasi natives pour les entrées-sorties.

La paravirtualisation des entrées-sorties n'est pas systématiquement supportée, contrairement à l'émulation de périphérique, car elle exige une coopération de la part du système invité. Elle est donc réservée aux systèmes les plus répandus comme Windows et Linux.

Dans les produits commerciaux, elle prend la forme d'un agent s'installant dans la machine virtuelle, et se nomme, selon le produit, « VMWare Tools », « XenServer Tools »,  « VirtualBox Guest Additions », etc.

En plus de l'accélération des entrées-sorties, ces agents permettent une meilleure interaction entre l'hyperviseur et le système, et permet notamment de commander l'extinction d'une machine virtuelle depuis l'hyperviseur.

Screenshot from 2015-04-21 15:18:11
QEMU

QEMU a été un des premiers projets libres à proposer des performances quasi natives. A l'origine QEMU est un émulateur, et, bien qu'il ait intégré un système de compilation en temps réel vers le processeur cible, il souffrait d'une grosse baisse de performance des machines virtuelles. QEMU étant un précurseur, tous les autres produits de virtualisation open source ont emprunté sa couche d'émulation des périphériques.
Après une période de relative obsolescence, QEMU revient aujourd'hui sur le devant de la scène, suite à la fusion du projet avec KVM.
KVM est un module de virtualisation complète fourni par le noyau Linux, qui assure des performances de calcul excellentes, et la possibilité de migrer une VM à chaud entre machines sans nécessiter d'agent, contrairement à toutes les autres solutions. Quant à virtio il s'agit d'une couche de paravirtualisation des entrées-sorties, disponible uniquement dans les VM Linux. La combinaison de KVM et virtio permet à QEMU d'exécuter des machines virtuelles Linux extrêmement performantes et agiles. KVM est à la base de solutions telles que RedHat Enterprise Virtualisation où encore OpenStack Compute qui est présenté dans la suite de ce livre blanc.

Xen

Xen est initialement un logiciel de paravirtualisation, qui nécessitait l'utilisation d'un noyau spécial dans les machines virtuelles. Avec le temps, Xen s'est doté d'un mode de fonctionnement similaire aux machines virtuelles, afin de pouvoir virtualiser des systèmes tels que Windows, dont le noyau propriétaire interdit la paravirtualisation.

Initialement réservé à Linux, BSD et Solaris, la virtualisation Xen se tourne de plus en plus vers Windows depuis le rachat de l'éditeur de Xen par Citrix. Simultanément, Xen est de moins en moins utilisé par les éditeurs de distribution Linux au profit de QEMU. Cependant Xen est toujours aujourd'hui la référence pour la virtualisation haute performance sous Linux, puisque plus ancien et bien ancré dans les versions actuelles des principales distribution Linux orientées entreprise : RHEL et SLES. Xen a été récemment intégré au noyau Linux ce qui garantit sa pérennité.