1. Un peu de théorie
1.1 Introduction
La virtualisation recouvre l'ensemble des techniques matérielles et/ou logicielles
qui permettent de faire fonctionner sur une seule machine hôte plusieurs systèmes d'exploitation,
plusieurs instances différentes et cloisonnées d'un même système ou plusieurs applications,
séparément les uns des autres, comme s'ils fonctionnaient sur des machines physiques distinctes.
Nous allons voir tout d’abord pourquoi utiliser la virtualisation, ensuite les différents types de virtualisation
et pour finir l’impact de celle-ci sur les performances ainsi que son évolution.
1.2 L'intérêt de la virtualisation
Les intérêts de la virtualisation sont :
- Une utilisation optimale des ressources d'un parc de machines
(répartition des machines virtuelles sur les machines physiques en fonction des charges respectives)
ainsi qu’une économie sur le matériel (consommation électrique, compatibilité logicielle et matérielle…)
- L’installation, le déploiement et la 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.
- Sécurisation d'un réseau (l’attaquant n’a accès qu’aux machines virtuelles)
- Isolation des différents utilisateurs simultanés d'une même machine
1.3 Les Machines Virtuelles
Une machine virtuelle est un logiciel qui tourne sur le système d’exploitation (O.S.) hôte.
Ce logiciel permettant de lancer un ou plusieurs OS invités. La machine virtualise le matériel,
les O.S. invités pensent donc dialoguer directement avec un matériel physique.
En pratique on a recours à une émulation logicielle des périphériques, et parfois aussi de tout ou partie de la machine.
Cette solution isole bien les systèmes d'exploitation invités, mais elle a un coût. Tout d’abord en performance,
principalement au niveau des entrées-sorties (I/O). A ce coût, relativement important, peut être ajouté un coût supplémentaire
si le processeur doit être intégralement émulé. Cette solution n'est pas non plus économe en mémoire, puisque aucune économie
d'échelle ne peut être réalisée en ce qui concerne les OS chargés. Le point faible de cette solution est donc son importante
consommation de ressources.
Des exemples de logiciels permettant l’utilisation de machines virtuelles sont Virtual PC/Server
et VMWare Player/GSX/Workstation ou bien encore Parallels Desktop.

1.4 Les Isolateurs
Un isolateur est un logiciel permettant d'isoler l'exécution des applications
dans des contextes ou zones d'exécution. Il permet ainsi de faire tourner plusieurs fois la même application
alors que l’exécution de celle-ci devrait être unique.
Notons que cette technologie consiste en quelque sorte à généraliser
la notion de "contexte" Unix : ce dernier isole les processus (mémoire, accès aux ressources),
on ajoute alors : une isolation des périphériques (c'est le rôle de l'isolateur), voire leur partage,
les systèmes de fichiers donc les fichiers eux-mêmes et leurs accès.
UCette solution est très performante, du fait du peu d'overhead
(chute de performance conséquente de l'ajout des couches de virtualisation), mais les environnements virtualisés
ne sont pas complètement isolés, ils partagent en particulier le code du noyau. Cette solution est aussi remarquablement
économique en mémoire par conséquence de la dernière remarque. Ces environnements sont donc bien adaptés au déploiement
de nombreux serveurs virtuels de test ou développement basés sur un même système.
Des exemples de logiciels sont Linux-VServer ou encore BSD Jails

1.5 Les Hyperviseurs
Partant du principe, exposé précédemment, que pour avoir une virtualisation efficace
il faut affiner les couches, une première approche consiste à proposer un noyau léger (de type micro-noyau comme Mach par exemple),
lequel est accompagné d'outils de supervision, et adapté pour faire tourner des systèmes d'exploitation natifs.
Pour réussir cette approche, soit on émule le matériel (et on revient aux performances de la machine virtuelle pour les I/O),
soit on dispose des technologies dédiées à la virtualisation développées par AMD et Intel que nous verrons plus tard.
Exemple : VMWare ESX, Hyper-V

1.6 Les paravirtualisateurs
Un paravirtualiseur est un noyau hôte allégé et optimisé pour ne faire tourner que des noyaux de systèmes
d'exploitation invités, adaptés et optimisés pour cette utilisation. Les applications en espace utilisateur
des systèmes d'exploitation invités tournent ainsi sur une pile de deux noyaux optimisés, les OS ayant conscience
d'être virtualisés. A noter que l’utilisation des instructions Intel VT ou AMD-V
rende possible l’utilisation d’un OS non modifié.
Un exemple de noyau: Xen, Hyper-V.

1.7 Technologie Intel et AMD de support matériel de la virtualisation
Dans le but de simplifier la virtualisation,
Intel et AMD ont sorti une technologie de virtualisation matérielle.
La première à se lancer sur ce terrain fut Intel avec sa technologie VT
(Virtualization Technology) fin 2005. En 2006 AMD sortit AMD-V (Virtualization).
Ces deux technologies ont une structure similaire : elles se composent de trois volets :
un pour la virtualisation du processeur, un pour la virtualisation des périphériques et
enfin un dernier pour la virtualisation de la mémoire.
Avec ces technologies AMD et Intel ont ajouté des instructions ainsi
qu’une nouvelle structure de contrôle (VMCB pour Virtual Machine Control Block
du coté d’AMD et VMCS pour Virtual Machine Control Structure du coté d’Intel).
Grâce à une de ces nouvelles instructions on peut passer à un nouveau mode d’exécution
(VMX chez Intel). Ce dernier permet de faire fonctionner les systèmes d’exploitation invités
avec un niveau de privilège très élevé (ring 0). Cela a pour avantage :
|