Virtualisation (informatique)

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

En informatique, on appelle virtualisation l'ensemble des techniques matérielles et/ou logicielles qui permettent de faire fonctionner sur une seule machine plusieurs systèmes d'exploitation et/ou plusieurs applications, séparément les uns des autres, comme s'ils fonctionnaient sur des machines physiques distinctes. Les outils de virtualisation servent à faire fonctionner ce qu'on appelle communément des serveurs privés virtuels (« Virtual Private Servers » ou VPS) ou encore environnements virtuels (« Virtual Environments » ou VE).

Sommaire

[modifier] Notions

Chaque outil de virtualisation implémente une ou plusieurs de ces notions :

  • couche d'abstraction matérielle et/ou logicielle
  • système d'exploitation hôte (installé directement sur le matériel)
  • systèmes d'exploitations (ou applications, ou encore ensemble d'applications) « virtualisé(s) » ou « invité(s) »
  • partitionnement, isolation et/ou partage des ressources physiques et/ou logicielles
  • images manipulables : démarrage, arrêt, gel, clonage, sauvegarde et restauration, sauvegarde de contexte, migration d'une machine physique à une autre
  • réseau virtuel : réseau purement logiciel, interne à la machine hôte, entre hôte et/ou invités

[modifier] Intérêts de la virtualisation

Les intérêts sont :

  • utilisation optimale des ressources d'un parc de machines (répartition des machines virtuelles sur les machines physiques en fonction des charges respectives),
  • installation, déploiement et migration facile des machines virtuelles d'une machine physique à une autre, notamment dans le contexte d'une mise en production à partir d'un environnement de qualification ou de pré-production, livraison facilitée,
  • économie sur le matériel par mutualisation (consommation électrique, entretien physique, monitoring, support, compatibilité matérielle, etc.)
  • installation, tests, développements, cassage et possibilité de recommencer sans casser le système d'exploitation hôte
  • sécurisation et/ou isolation d'un réseau (cassage des systèmes d'exploitation virtuels, mais pas des systèmes d'exploitation hôtes qui sont invisibles pour l'attaquant, tests d'architectures applicatives et réseau)
  • isolation des différents utilisateurs simultanés d'une même machine (utilisation de type site central)
  • allocation dynamique de la puissance de calcul en fonction des besoins de chaque application à un instant donné,
  • diminution des risques liés au dimensionnement des serveurs lors de la définition de l'architecture d'une application, l'ajout de puissance (nouveau serveur etc) étant alors transparent.

[modifier] Historique

Une bonne part des travaux sur la virtualisation fut développée au centre de recherche IBM France de Grenoble (aujourd'hui disparu), qui développa le système expérimental CP/CMS, devenant ensuite le produit (alors nommé hyperviseur) VM/CMS. Voir IBM 360 et 370

Par la suite, les mainframes ont été capables de virtualiser leurs OS (systèmes d'exploitation) avec des technologies spécifiques et propriétaires, à la fois logicielles et matérielles.

Dans la deuxième moitié des années 80 et dans les début des années 90, il a été permis de voir sur un ordinateur personnel, les ambrions de virtualisations. En effet l'ordinateur Amiga pouvait lancer des pc x386, Machintosh 68xxx, voir des solutions X11, et bien sur le tout en multitâche. Ces solutions pouvait être purement logiciel, voir couplé a du matériel additionnel (ajout de processeur, carte réseau,...). Cette machine très en avance sur son temps a popularisé, cette technologie. Pour les Pc il y avait le "SideCar" et "PC Task", pour le Machintosh Emplant et ShapeShifter.

Les grands Unix ont suivi avec les architectures NUMA des Superdome d'HP (PA-RISC et IA-64) et des E10000/E15000 de Sun (UltraSparc).

Dans la seconde moitié des années 1990, les émulateurs sur x86 des vieilles machines des années 1980 ont connu un énorme succès, notamment les ordinateurs Atari, Amiga, Amstrad et les consoles NES, SNES, Neo Geo.

La société VMware développa et popularisa à la fin des années 1990 et au début des années 2000 un système propriétaire de virtualisation logicielle des architectures de type x86 pour les architectures de type x86. Les logiciels libres Xen, QEMU, Bochs, Linux-VServer , Virtual Box et les logiciels propriétaires mais gratuits VirtualPC et VirtualServer ont achevé la popularisation de la virtualisation dans le monde x86. En fin de compte, VMware finit par rendre gratuite la version la plus rudimentaire de son gestionnaire de machines virtuelles.

Les fabricants de processeurs x86 AMD et Intel ont implémenté la virtualisation matérielle dans leurs gammes dans la seconde moitié de l'an 2000.

[modifier] Comparaison de différentes techniques de virtualisation

Légende :

  • En caractères gras : les couches lourdes et consommatrices en ressources.
  • En caractères italique : les couches légères et peu consommatrices en ressources.

Afin d'avoir une idée théorique des performances des applications au sommet, il faut comparer verticalement l'empilage de couches. Il faut garder à l'esprit qu'il est possible d'élargir les schémas en rajoutant des environnements virtualisés consommant également des ressources de l'hôte.

[modifier] Isolateur

Un isolateur est un logiciel permettant d'isoler l'exécution des applications dans ce que l’on appelle des contextes ou bien zones d'exécution. L'isolateur permet ainsi de faire tourner plusieurs fois la même application dans un mode multi-instance (plusieurs instances d’exécution) même si elle n’était pas conçue pour ça.

Cette solution est très performante, du fait du peu d'overhead (temps passé par un système à ne rien faire d'autre que se gérer), mais les environnements virtualisés ne sont pas complètement isolés.

La performance est donc au rendez-vous mais le choix on ne peut pas vraiment parler de virtualisation de systèmes d’exploitation. Uniquement liés aux systèmes linux les isolateurs sont en fait composés de plusieurs éléments et peuvent prendre plusieurs formes.


Architecture d'un isolateur

Logiciels

de

contrôle

User-space

isolateur

User-space

isolateur

OS hôte
Matériel

Exemples :

  • Linux-VServer : isolation des processus en user-space
  • chroot : isolation changement de racine
  • BSD Jail : isolation en user-space
  • OpenVZ : libre, partionnement au niveau noyau sous Linux et Windows 2003

[modifier] Noyau en espace utilisateur

Un noyau en espace utilisateur « user-space » tourne comme une application en espace utilisa-teur de l'OS hôte. Le noyau user-space a donc son propre espace utilisateur dans lequel il contrôle ses applications.

Cette solution est très peu performante, car deux noyaux sont empilés et l’isolation des environnements n’est pas gérée et l’indépendance par rapport au système hôte est inexistante. Elle sert surtout au développement du noyau.


Architecture d'un noyau en user-space
User-space
noyau user-space
User-space
noyau user-space
OS hôte
Matériel

Exemples :

  • User Mode Linux : noyau tournant en user-space
  • Cooperative Linux ou coLinux : noyau coopératif avec un hôte Windows
  • Adeos : micro noyau RT faisant tourner Linux en kernel-space non-RT
  • L4Linux : micro noyau RT faisant tourner Linux en kernel-space non-RT

[modifier] Machine virtuelle

Une machine virtuelle est un logiciel (généralement assez lourd) qui tourne sur l'OS hôte. Ce logiciel permet de lancer un ou plusieurs OS invités. La machine virtualise ou/et émule le matériel pour les OS invités, ces derniers croient dialoguer directement avec ledit matériel.

Cette solution est très comparable à un émulateur, et parfois même confondue. Cependant l’unité centrale de calcul, c'est-à-dire le microprocesseur, la mémoire de travail (ram) ainsi que la mémoire de stockage (via un fichier) sont directement accessible aux machines virtuelles, alors que sur un émulateur l’unité centrale est simulée, les performances en sont donc considérablement réduites par rapport à la virtualisation.

Cette solution isole bien les OS invités, mais elle a un coût en performance. Ce coût peut être très élevé si le processeur doit être émulé, comme cela est le cas dans l’émulation. En échange cette solution permet de faire cohabiter plusieurs OS hétérogènes sur une même machine grâce à une isolation complète. Les échanges entre les machines se fait via les canaux standards de communication entre systèmes d’exploitation (TCP/IP et autres protocoles réseau), un buffer d’échange permet d’émuler des cartes réseaux virtuelles sur une seule carte réseau réelle.


Cette solution isole bien les OS invités, mais elle a un coût en performance. Ce coût peut être très élevé si le processeur doit être émulé.

Architecture d'une machine virtuelle

Logiciels

de

contrôle

User-space
OS invité
Drivers
User-space
OS invité
Drivers
Machine virtuelle
OS hôte
Matériel

Exemples :

  • QEMU : émulateur de plateformes x86, PPC, Sparc
  • Plex86 : émulateur de plateforme x86
  • bochs : émulateur de plateforme x86
  • PearPC : émulateur de plateforme PPC sur matériel x86
  • VMware : propriétaire, émulateur de plateforme x86 (produits GSX server ou VMware Server)
  • Microsoft VirtualPC et VirtualServer : propriétaire, émulateur de plateforme x86
  • Lismoresystems Guest PC : propriétaire, émulateur de plateforme x86 sur matériel PC
  • MacOnLinux : émulateur de plateforme Mac OS sur Linux PPC
  • VirtualBox : émulateur de plateforme x86
  • Parallels : propriétaire, émulateur de plateforme x86 pour Mac OS X.
  • Microsoft Systems Center Virtual Machine Manager 2007 annoncé en septembre 2007 (nom de code Viridian)

[modifier] Para virtualisation ou hyperviseur

Un hyperviseur est comme un noyau système très léger et optimisé pour ne faire tourner que des noyaux d'OS invités spécifiques à une architecture donnée et commune à tous les noyaux gérés par l’hyperviseur. Les applications tournant dans la partie espace utilisateur des OS invités le font donc sur une pile de deux noyaux optimisés.

La particularité de l’hyperviseur est que les OS invités fonctionnent en ayant conscience d'être virtualisés.

Actuellement l’hyperviseur est la méthode de virtualisation la plus performante mais elle a pour inconvénient d’être contraignante et permet moins de flexibilité dans l’utilisation d’environnements virtualisés en comparaison avec les machines virtuelles.

Plusieurs solutions sont présentes sur ce marché, il est intéressant d’en faire un léger aperçu. Xen est un hyperviseur, il est développé par l'université de Cambridge au Royaume-Uni.

Il utilise un noyau léger supportant des noyaux Linux, Plan9, NetBSD, etc. VMware a un produit ESX Server qui fonctionne essentiellement comme un hyperviseur. Logiciel propriétaire, émulateur de plateforme x86. Microsoft développe actuellement un hyperviseur basé sur une architecture identique à celle de Xen. L'hyperviseur de Microsoft sera intégré dans son « Windows Server 2008 » (nom de code Longhorn), successeur de Windows Server 2003.

Architecture d'un hyperviseur

Logiciels

de

contrôle

User-space
OS invité
Drivers Xen
User-space
OS invité
Drivers Xen
Xen
Matériel

Exemples :

  • VMware : propriétaire, émulateur de plateforme x86 (produit ESX server)
  • Xen : noyau léger supportant des noyaux Linux, Plan9, NetBSD, etc.

[modifier] Matériel

Le support de la virtualisation peut être intégré au processeur lui-même, le matériel se chargeant notamment de virtualiser les accès mémoire. Cela permet de simplifier considérablement la complexité logicielle de la virtualisation et de réduire sensiblement la dégradation de performances.

Des exemples de virtualisation matérielle :

  • Hyperviseur IBM Power & Micro-partitionnement AIX
  • Mainframes : VM/CMS
  • Sun LDOM (hyperviseur pour la gestion de "logical domains")
  • Sun E10k/E15k
  • HP Superdome
  • AMD-V (AMD Virtualization, anciennement Pacifica)
  • Intel VT (Virtualization Technology, anciennement Vanderpool)

[modifier] Voir aussi

[modifier] Liens externes