• Aucun résultat trouvé

Les approches pour la virtualisation syst` eme

La virtualisation syst`eme a ´et´e impl´ement´ee selon diff´erentes approches. Elles se diff´erencient princi-palement par leur respect des propri´et´es d´efinies par Popek et Goldberg, par l’utilisation de syst`emes d’exploitations«pr´epar´es» ou par l’utilisation de mat´eriel sp´ecifique.

3.4.1 Virtualisation pure

Figure 3.2 – Virtualisation pure logicielle

La virtualisation pure permet l’ex´ecution de machines virtuelles sans modification des syst`emes d’ex-ploitation et permet une ´emulation de chaque instruction sensible. Popek et Goldberg ont ´enonc´e qu’un processeur ´etait virtualisable de fa¸con pure si l’ensemble de ses instructions sensibles est un sous-ensemble des instructions privil´egi´ees. Il est alors possible de d´etecter les instructions sensibles en ex´ecutant les machines virtuelles en mode moniteur (voir Figure 3.2). Dans ce cas, l’ex´ecution d’une instruction sensible dans une machine virtuelle l`evera une exception de s´ecurit´e. L’exception sera attrap´ee par l’hyperviseur qui pourra alors l’´emuler de fa¸con sˆure. Le syst`eme VM/370 [Cre81], propos´e par IBM en 1981, est un exemple historique d’une telle approche.

La virtualisation pure a cependant des limites. Il faut en effet disposer d’une infrastructure syst`eme virtualisable, comme ce fut le cas pour les machines VM/370. Les processeurs de type x86 quant `a eux contiennent 17 instructions sensibles pouvant fonctionner en mode non-privil´egi´e [RI00]. Ces pro-cesseurs ne sont donc pas virtualisables. L’ex´ecution de ces instructions en mode moniteur ne d´eclenche pas d’exceptions, l’hyperviseur ne peut donc pas les intercepter. La solution propos´ee par l’hyperviseur VMWare [SVL01] consiste `a r´e´ecrire `a la vol´ee certaines sections de code. Lorsqu’une instruction sensible est d´etect´ee, VMWare r´e´ecrit le code binaire ´emulant cette instruction et le place dans un cache afin de ne traduire la section qu’une seule fois. Attraper les exceptions pour les ´emuler est un processus coˆuteux impliquant de fr´equents changements de contexte. La virtualisation pure a donc un impact significatif sur les performances. Cet impact est dˆu `a la fois aux syst`emes d’exploitation qui ne sont pas n´ecessairement adapt´es `a la virtualisation mais ´egalement aux processeurs qui ne sont pas n´ecessairement virtualisables.

3.4.2 Para-virtualisation

La virtualisation pure permet l’ex´ecution native des syst`emes d’exploitation, mais entraˆıne une baisse significative des performances. En effet, l’´emulation stricte de toutes les instructions sensibles est coˆuteuse et il serait pr´ef´erable de proposer dans certaines situations une biblioth`eque permettant de mieux g´erer certains besoins des machines virtuelles, par exemple les entr´ees/sorties ou la mise `a jour des tables de pages m´emoire. Lorsque le code source du syst`eme d’exploitation est disponible, il est possible de r´ealiser ces changements. Cette approche permet d’am´eliorer les performances mais a pour inconv´enient de ne pas respecter strictement la r`egle d’´equivalence de Popek et Goldberg.

Figure3.3 – Paravirtualisation avec l’hyperviseur Xen

3.4. Les approches pour la virtualisation syst`eme 23 La para-virtualisation limite l’impact de la virtualisation sur les performances. Cette approche consiste

`a modifier `a l’avance le code des syst`emes d’exploitation des machines virtuelles. Ce proc´ed´e a ´et´e d´ecrit originalement dans l’hyperviseur Denali [WSG02] puis dans Xen [BDF+03]. Les appels de fonctions produisant des instructions sensibles ou des op´erations optimisables sont remplac´es par des appels directs

`a l’hyperviseur (des hypercall), ce qui supprime la n´ecessit´e d’attraper des exceptions `a la vol´ee (voir Figure 3.3). Cette approche a permis d’optimiser le code des syst`emes d’exploitation paravirtualis´es.

Dans Denali par exemple, une nouvelle instruction idle-with-timeout permet d’´eviter qu’une machine virtuelle ne gaspille trop de cycles horloge en attente active et l’hyperviseur Xen autorise un acc`es direct en lecture `a la m´emoire de chaque machine virtuelle afin de limiter les changements de contexte dus au passage en mode l’hyperviseur.

3.4.3 Virtualisation pure assist´ ee

La virtualisation pure assist´ee se base sur les derni`eres g´en´erations de processeurs Intel [NSL+06] et AMD [AMD05]. L’ISA a ´et´e modifi´ee pour rendre les processeurs `a nouveau virtualisables et de nouvelles instructions proposent de g´erer le changement de contexte entre les machines virtuelles de mani`ere ma-t´erielle. Les processeurs proposent ´egalement un nouveau niveau d’ex´ecution d´edi´e `a l’hyperviseur. Les syst`emes d’exploitation des machines virtuelles peuvent alors de nouveau s’ex´ecuter au niveau superviseur (voir Figure 3.4).

Figure 3.4 – Virtualisation pure assist´e

La virtualisation pure assist´ee permet en th´eorie d’obtenir de meilleures performances que les ap-proches `a base de traduction binaire ou de para-virtualisation en apportant des m´ecanismes propres `a la gestion des machines virtuelles de mani`ere mat´erielle. Dans la pratique, ce gain est mitig´e et d´ependant de la charge des machines virtuelles [AA06]. Si la machine virtuelle cr´ee beaucoup de processus, r´ealise des entr´ees/sorties ou des changements de contexte fr´equemment, l’approche purement logicielle sera plus performante qu’une approche `a base de virtualisation assist´ee. Ce surcoˆut s’explique en partie par les changements de contexte fr´equents que doit r´ealiser le processeur afin de passer du mode superviseur au mode hyperviseur alors que ce changement de contexte n’est pas n´ecessaire avec une approche purement logicielle.

3.4.4 Virtualisation du syst` eme d’exploitation

Dans certaines situations, il n’est pas n´ecessaire de virtualiser un syst`eme entier. Par exemple, si l’on souhaite isoler fortement diff´erentes applications fonctionnant sur un mˆeme syst`eme d’exploitation, fournir une virtualisation de la machine physique n’est pas n´ecessaire mais il faut cependant assurer une forte isolation entre les diff´erentes applications pour des questions de s´ecurit´e ou de contrˆole des ressources.

L’appel syst`emechroot()change la racine du syst`eme pour un processus donn´e et r´ealise ainsi une prison logicielle en chargeant celui-ci et ses d´ependances dans un environnement cloisonn´e. Cependant le contrˆole des ressources est limit´e et la s´ecurit´e n’est pas garantie, un simple acc`es super-utilisateur permet de casser le cloisonnement par exemple.

La virtualisation du syst`eme d’exploitation [SPF+07, hKW00, PT04] permet de faire fonctionner sur un seul syst`eme d’exploitation plusieursconteneurs en proposant la virtualisation au niveau des appels syst`eme du syst`eme d’exploitation de l’hˆote. La couche d´edi´ee `a la virtualisation peut ˆetre impl´ement´ee

Figure3.5 – Virtualisation du Syst`eme d’Exploitation avec VServer

au dessus du syst`eme d’exploitation de la machine ou faire partie de celui-ci comme c’est le cas pour VServer [SPF+07] (voir Figure 3.5). Chaque machine virtuelle dispose de son propre syst`eme de fichiers, les espaces de nommage et d’adressage m´emoire sont totalement disjoints comme pour la virtualisation syst`eme, le contrˆole des ressources et l’isolation des p´eriph´eriques sont r´ealis´es en utilisant des algorithmes d’allocation et d’ordonnancement ´equitables. Par rapport `a une protection bas´ee sur l’appel syst`eme chroot() et les processus, la s´ecurit´e et l’isolation sont renforc´ees et le contrˆole sur les ressources est am´elior´e.

La virtualisation du syst`eme d’exploitation ne n´ecessite pas d’´emuler ou de traduire les appels syst`eme et permet donc d’obtenir des performances proches d’une ex´ecution native. L’isolation des machines virtuelles et le contrˆole des ressources sont r´ealis´es par des m´ecanismes plus l´egers que dans le cas de la virtualisation syst`eme et permettent un meilleur passage `a l’´echelle en supportant, sur une mˆeme machine physique, beaucoup plus de machines virtuelles. Son principal inconv´enient est son manque de flexibilit´e dˆu `a l’obligation d’utiliser, dans toutes les machines virtuelles, le syst`eme d’exploitation de la machine hˆote.