# Paravirtualisation

En informatique, la paravirtualisation est une technique de virtualisation qui présente une interface logicielle similaire à du matériel réel à une machine virtuelle mais optimisée pour ce type de fonctionnement, contrairement à l'émulation d'un périphérique matériel existant qui peut s'avérer laborieuse et surtout lente.
La paravirtualisation permet aux moniteurs de machines virtuelles (MMV) d'être plus simples et aux machines virtuelles fonctionnant dessus d'atteindre un niveau de performance proche du matériel réel. Cependant, les systèmes d'exploitation doivent explicitement être portés afin de fonctionner sur des MMV paravirtualisées. Le portage des systèmes d'exploitation libres est généralement effectué, seulement il appartient aux fournisseurs de systèmes fermés de réaliser le portage eux-mêmes, ce qu'ils peuvent refuser de faire pour des raisons stratégiques.

## Histoire

Le mot « paravirtualisation » est un mot nouveau pour une idée ancienne. L'hyperviseur d'IBM nommé VM/370 offrait déjà ces fonctionnalités dès 1972. Dans le monde des machines virtuelles, on y fait référence par l'appellation « code de diagnostic », car il utilise des instructions habituellement utilisées par les logiciels de maintenance du matériel. Le Conversational Monitor System d'IBM utilise des codes de diagnostic pour faire appel aux services de la machine virtuelle.
Dans le système Parallels Workstation, ce genre d'appel se nomme « hypercall » ou hyper-appel. Contrairement à un appel système qui est traité par le noyau d'un système d'exploitation, l'hyper-appel traverse le noyau et remonte jusqu'à l'hyperviseur, qui le traite. Ces appels traversant le noyau du système d'exploitation invité, celui-ci doit le supporter explicitement afin de le faire remonter jusqu'à l'hyperviseur au lieu de signaler une anomalie.
Le terme « paravirtualisation » a été utilisé pour la première fois dans la littérature scientifique en association avec le moniteur de machines virtuelles Denali. Le terme décrit aussi la machine virtuelle Xen, la famille des micronoyaux L4 et l'hyperviseur temps réel embarqué TRANGO. Tous ces projets utilisent des techniques de paravirtualisation afin de parvenir à de la virtualisation à haute performance sur du matériel de type x86 en mettant en place des machines virtuelles qui n'utilisent pas les parties complexes à virtualiser du jeu d'instructions x86.
À la suite de la prolifération de solutions de paravirtualisation sous Linux, chacune proposant une adaptation différente du noyau Linux, une solution commune est en cours de développement dans le noyau officiel : virtio. Elle voit ses débuts dans la version 2.6.24 et de nombreuses améliorations sont en cours dans la branche 2.6.25. Cette interface est déjà utilisée par certains hyperviseurs, comme KVM.
La paravirtualisation est aussi utilisée sur du matériel non x86 comme sur les plateformes ARM ou PowerPC.
Comme exemple d'utilisation de la paravirtualisation on peut prendre les cartes réseaux que présentent certaines machines virtuelles aux systèmes d'exploitation invités. Plutôt que de s'acquitter de la tâche complexe de reproduire le fonctionnement de la carte réseau classique, le MMV simule une carte très simple permettant l'envoi des paquets par accès direct à la mémoire, même si la carte du système réel ne supporte pas cette fonctionnalité.