Dans un environnement de machines virtuelles, l'Hyperviseur est le programme maître de contrôle avec les privilèges les plus élévés. Il virtualise le matériel (physique) de la machine hôte pour le présenter aux machines invitées (machines virtuelles).
En partant de ce principe, on peut distinguer 3 types de techniques actuellement sur le marché :
- La « Full » virtualisation
- La paravirtualisation ou « OS assisted » virtualisation
- La « Hardware assisted » virtualisation
Nous allons décrire ces techniques puis en synthétiser les différences. Nous verrons ensuite les techniques parallèles d'amélioration de performances et les évolutions à venir.
- La « Full » virtualisation
C'est la technique la plus ancienne qui revient à donner à l'hyperviseur la charge de capturer et d'émuler à la volée l'ensemble des instructions échangées entre l'OS invité et la machine physique.
Cette technique ne demande aucune modification du système invité et est donc compatible avec tous les OS. Elle ne demande pas non plus de matériel spécifique, à partir du moment où le matériel est supporté par l'OS hôte sur lequel l'hyperviseur est installé.
Par contre, étant donné que l'hyperviseur est très solicité, les performances sont dégradées.
Microsoft Virtual PC et Server ou encore VMWare Workstation et Server sont des logiciels qui utilisent la « Full » virtualisation.
- La paravirtualisation ou « OS assisted » virtualisation
Dans la technique de paravirtualisation, le noyau de l'OS invité a été modifié pour pouvoir dialoguer directement avec une couche plus basse dans l'hyperviseur (par hypercalls) diminuant nettement la charge générée par le processus de virtualisation, en l'occurrence au niveau des accès processeur, mémoire ou les entrées/sorties matériel.
C'est parce que la modification intervient au niveau de l'OS invité qu'on appelle aussi cette technique la « OS assisted » virtualisation.
Comme la paravirtualisation ne supporte pas les OS aux noyaux non modifiables (les produits Microsoft par exemple), cela limite l'étendue de son utilisation aux systèmes de type Linux ou Netware et rend plus difficile le support des OS ainsi modifiés.
Le projet Open Source XEN est un exemple de logiciel qui prend en charge la paravirtualisation.
- La « Hardware assisted » virtualisation
Cette technique reprend les principes de la paravirtualisation pour diminuer la charge de l'hyperviseur mais cette fois-ci, ce sont des instructions incluses directement dans le microprocesseur (matériel) qui prennent en charge la translation des appels privilégiés au microprocesseur.
La « Hardware assisted » virtualisation nécessite donc un processeur spécifique pour fonctionner :
- Intel Virtualization Technology (VT-x)
- AMD-V
Nous sommes à la première génération de cette technologie (au niveau support logiciel) qui ne permet d'accélérer que les accès au microprocesseur mais qui donne déjà de bons résultats en terme de performance, comparé à une « Full » virtualisation pure.
Microsoft Hyper-V, VMWare ESX ou encore XEN (3.x) supportent pleinement cette technique.
- Les techniques d'amélioration des performances
Pour améliorer les performances, surtout au niveau de la « Full » virtualisation, tous les acteurs majeurs du marché proposent des drivers et outils optimisés qui s'installent sur l'OS invité et offrent des accès plus rapides au matériel. Cette technique d'optimisation est souvent abusivement appelée « paravirtualisation » mais ne doit pas être confondue avec la technique de « OS assisted » virtualisation décrite un peu plus haut.
Si on prends exemple sur les « VMWare tools », ils permettent un accès direct à la couche d'entrée/sortie Vmxnet pour optimiser les débits réseau, réduisent la charge CPU ou encore synchronisent l'heure de l'OS invité avec celui de l'OS hôte. Il existe le même type d'optimisation sous Hyper-v en installant les « Integration Services ».
Les performances dépendent aussi des ressources matérielles utilisées par l'OS Hôte. Par exemple, Hyper-V server ou encore VMWare ESX s'appuient sur des systèmes hôtes plus légers afin de réserver les ressources aux machines invitées.
Enfin, la seconde génération de la « Hardware assisted » virtualisation est en cours de développement et améliorera considérablement les performances d'échange avec le mémoire physique ou encore des entrées/sorties de la machine virtuelle. Elle s'appuiera sur les nouvelles instructions intégrées aux microprocesseurs (Intel Nehalem par exemple) ou chipsets de cartes mères récents afin d'améliorer les accès mémoire (AMD NPT, Intel EPT) ou encore les entrées/sorties matérielles (Intel VT-d, AMD IOMMU). Le rôle Hyper-v de Windows 2008 R2, actuellement en RC, intègre déjà la fonctionnalité Second Level Translation (SLAT) qui prend en charge l'EPT et le NPT, affaire à suivre…
Voici un petit tableau qui permet de synthétiser les notions vues plus haut:
| |
« Full » virtualisation |
Paravirtualisation ou « OS assisted » virtualisation |
« Hardware assisted » virtualisation |
|
Microprocesseur supporté |
Tous |
Tous |
Intel VT-x, AMD-V |
|
OS invité |
Tous |
OS à noyau modifié (Linux par exemple). Ne supporte pas les OS Microsoft. |
Tous |
|
Exemples de Logiciels |
VMWare Workstation, Microsoft Virtual Server |
XEN |
Microsoft Hyper-V, XEN, VMWare ESX |
|
Performances |
Bonnes |
Très bonnes |
Bonnes mais qui vont encore s'améliorer avec le support de nouvelles instructions intégrées au niveau chipsets et CPU |