II.6.2. La para virtualisation
La paravirtualisation (paravirtualization ou en
coreparavirtualization) est très proche du concept de la
virtualisation complète, dans le sens où c'est toujours un
système d'exploitation complet qui s'exécute sur le
matériel émulé par une machine virtuelle, cette
dernière s'exécutant au-dessus d'un système hôte.
Toutefois, dans une solution de paravirtualisation, le système
invité est modifié pour être exécuté par la
machine virtuelle. Les modifications effectuées visent à rendre
le système émulé « au courant » du fait qu'il
s'exécute dans une machine virtuelle. De ce fait, il pourra collaborer
plus étroitement avec le système hôte, en utilisant une
interface spécifique, au lieu d'accéder au matériel
virtuel via les couches d'abstraction. Au final, l'architecture obtenue est
plus performante que l'empilement de couches d'abstraction de la figure 7.
En pratique, un système paravirtualisé
possède quelques pilotes de périphériques et
sous-systèmes modifiés, qui lui permettent de communiquer
directement avec la machine virtuelle, sans avoir passé par une couche
d'abstraction pour parler au matériel virtuel. Les pilotes
paravirtualisés échangent directement des données avec la
machine virtuelle, sans avoir à passer par une émulation du
comportement du matériel. Les parties du système hôte
généralement modifiées pour tirer profit de la
paravirtualisation sont la gestion de la mémoire et la gestion des E/S.
En effet, ce sont véritablement les deux goulets d'étranglement
d'un système virtualisé, du fait du nombre de couches
d'abstraction à traverser. Il est donc logique que les optimisations se
portent là-dessus. La figure 8 montre la structure d'une machine
virtuelle et d'un système hôte supportant la paravirtualisation.
Les pilotes non modifiés interagissent toujours avec le matériel
émulé par la machine virtuelle (rectangle bleu ciel), alors que
les pilotes modifiés communiquent directement les fonctions de la
machine virtuelle (rectangle jaune). La simplification qui en résulte
permet au système invité de collaborer plus efficacement avec
l'hôte : les parties critiques du système communiquent presque
directement avec le système hôte, en contournant les couches
d'abstraction virtuelles (i.e. le matériel
émulé). Le reste de l'architecture est inchangé, la
machine virtuelle est toujours une application utilisateur (rectangle blanc) et
le système d'exploitation (Rectangle vert) est toujours le seul à
avoir un accès privilégié au matériel (rectangle
bleu).
![](Virtualisation-d-un-reseau-intranet21.png)
![](Virtualisation-d-un-reseau-intranet22.png)
Fig.8. couche d'abstraction pour la gestion de la
mémoire
Les détails sur comment sont réalisées
ces optimisations varient selon les implémentations, mais il s'agit en
général pour le système invité d'utiliser des
appels systèmes ou des instructions spécifiques pour renseigner
la machine virtuelle sur les actions à entreprendre.
Cette dernière réalise alors ces actions, et
communique le résultat au système invité. Le type d'action
à effectuer varie également selon les implémentations,
mais on retrouve en général tout ce qui est déplacement de
données entre l'hôte et l'invité (accès disque,
transfert réseau, etc.) et gestion de la mémoire.
La paravirtualisation apporte un gain de performances
avéré, du fait du contournement des couches d'abstraction. En
effet, comme le système invité collabore activement avec la
machine virtuelle, il ne se comporte plus comme un système
d'exploitation à part entière s'exécutant directement sur
du matériel. Au contraire, il adapte son comportement pour que les
accès au matériel souvent difficiles à interpréter
de manière efficace par la machine virtuelle soient transformés
en des appels directs à cette dernière. De plus, étant
donné que seules les couches de bas niveau du système
invité ont été modifiées, toutes les applications
qui pouvaient fonctionner dans une architecture de virtualisation
complète peuvent aussi être utilisées dans une architecture
paravirtualisée.
Toutefois, cette augmentation des performances est restreinte
à certains systèmes. En effet, comme le système
invité doit être modifié9 pour être
paravirtualisé, il faut bien évidemment que l'on ait la
possibilité de réaliser cette opération de portage. Or,
cela nécessite à la fois l'accès au code source du
système d'exploitation et la permission du détenteur des droits
de le modifier. Si cela ne pose aucun problème pour un système
libre (notamment GNU/Linux et les systèmes BSD), il n'en va pas de
même pour les systèmes propriétaires, tels que Microsoft
Windows et Mac OS. L'usage de la paravirtualisation est donc
généralement limité aux systèmes libres, sauf
à utiliser une solution de virtualisation propriétaire compatible
avec un seul système d'exploitation invité, comme les produits
que Microsoft propose pour ses systèmes d'exploitation.
Tout comme la virtualisation complète, la
paravirtualisation garde une séparation nette entre le système
invité et le système hôte. De ce fait, seul le
système hôte a un accès direct et exclusif au
matériel. Le système invité doit donc toujours passer par
la machine virtuelle pour accéder au matériel, qui passe à
son tour par la couche d'abstraction. On peut donc améliorer davantage
le processus en laissant au système invité un accès direct
mais contrôlé au matériel. C'est le but des systèmes
à « hyperviseur ».
|