Kernel-based Virtual Machine

Un article de Wikipédia, l'encyclopédie libre.

KVM (Kernel-based Virtual Machine) est une machine virtuelle pour Linux. Elle fonctionne[1] sur les architectures x86 disposant des technologies Intel VT (voir vanderpool) ou AMD SVM (AMD-V).

Le module est intégré dans le noyau Linux depuis la version 2.6.20[2].

Sommaire

[modifier] Fonctionnement

KVM est en fait une version modifiée de QEMU. La principale modification apportée est le support du module kvm. Lorsqu'on parle de KVM, on parle généralement de l'ensemble : la version modifiée de QEMU et le module kvm.

QEMU est déjà capable, grâce à son module KQEMU ("K" pour 'Kernel', noyau en anglais), d'exécuter du code machine directement sur le processeur hôte[3] afin d'accélérer l'émulation. Mais cette technologie bien qu'apportant un gain de performance important n'est pas parfaite, car des mécanismes de protection pour intercepter et émuler les événements privilégiés doivent être mis en place ; or le code noyau du système invité fonctionnant entièrement en mode privilégié, celui ci est émulé de manière classique et donc fortement pénalisé, ce qui est dommage pour l'élément crucial du système !

Les processeurs de la famille x86 disposent de 4 niveaux de privilège d'exécution, appelés Anneau de protection. En plus de ces Anneaux, les processeurs récents intègrent un nouveau mécanisme d'isolation qui permet à un système invité d'être exécutés directement sur le processeur, quels que soient les Anneaux de protection qu'ils requièrent pour fonctionner, tout en assurant la protection contre la lecture et l'écriture dans la mémoire n'appartenant pas à la machine virtuelle. Cela est principalement possible grâce à une MMU dédiée à chaque machine virtuelle sur le processeur et à une redirection des interruptions matérielles vers l'hyperviseur de machines virtuelles (KVM en l'occurrence) afin d'émuler le matériel dont a besoin le système invité.

Les technologies mises en place par les deux principaux fondeurs que sont AMD et Intel étant différentes, le module kvm se décline en deux sous-modules : kvm-intel et kvm-amd ; le module kvm n'étant là en fait que pour fournir à l'émulateur une abstraction supplémentaire.

Dans les versions récentes de kvm (au minimum la version 60[4]) il est possible d'utiliser un mécanisme de paravirtualisation appelé virtio, supporté pour les système invités Linux d'une version 2.6.25 au minimum. Ce mécanisme permet une vitesse d'exécution accrue car il n'est plus nécessaire d'émuler des périphériques matériels. Cependant, ce système sort du cadre de la virtualisation "classique" car il faut que le système invité soit au courant qu'il fonctionne sur une machine virtuelle et qu'il supporte virtio.

[modifier] Voir aussi

[modifier] Articles connexes

[modifier] Liens externes

[modifier] Notes et références

  1. Status sur le wiki de KVM
  2. Linux 2 6 20 sur KernelNewbies
  3. Si l'architecture du système hôte et invité sont de type x86 32 ou 64 bits
  4. Voir cette page sur le site de KVM