Kernel-based Virtual Machine — Wikipédia

Kernel-based Virtual Machine
Description de l'image Kvmbanner-logo2 1.png.
Description de l'image Kvm running various guests.png.
Informations
Développé par Open Virtualization Alliance (OVA)
Dernière version 17 ()
Dépôt git.kernel.org/pub/scm/virt/kvm/kvm.gitVoir et modifier les données sur Wikidata
Écrit en C
Système d'exploitation LinuxVoir et modifier les données sur Wikidata
Type Hyperviseur
Licence GNU General Public License et GNU Lesser General Public License
Site web http://www.linux-kvm.org

KVM (Kernel-based Virtual Machine) est un hyperviseur libre de type I (bare metal) pour Linux. KVM est intégré dans le noyau Linux depuis la version 2.6.20[1].

Il fonctionne originellement sur les processeurs à architectures x86 disposant des instructions de Virtualisation Intel VT ou AMD-V [2]. Depuis, KVM a été porté pour les architectures Power PC[3], IA-64 ainsi que ARM depuis le noyau Linux 3.9.

Le développement de KVM a commencé au sein de la société Qumranet par Avi Kivity. Red Hat a racheté Qumranet le [4]. Depuis KVM est co-maintenu par le développeur Marcelo Tosatti.

Fonctionnement

[modifier | modifier le code]

KVM a été conçu à partir d’un embranchement de QEMU puis celui-ci a à son tour intégré le code source de l’autre de sorte que les deux sont interdépendants[5]. La principale modification apportée est la prise en charge 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.[réf. nécessaire]

QEMU est capable, grâce à son module KQEMU (K pour Kernel, « noyau » en anglais), d'exécuter du code machine directement sur le processeur hôte[6] afin d'accélérer l'émulation. Cette technologie, bien qu'apportant un gain de performance important, n'est pas parfaite. 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é fonctionne normalement entièrement en mode privilégié. Étant émulé de manière classique, il est donc fortement pénalisé alors qu'il s'agit de 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 anneaux 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é directement sur le processeur quels que soient les anneaux de protection qu'il requiert 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'est finalement présent que pour fournir à l'émulateur une abstraction supplémentaire.

Dans les versions récentes de kvm (au minimum la version 60[7]) il est possible d'utiliser un mécanisme similaire à la paravirtualisation en utilisant virtio. Les pilotes virtio sont inclus dans le noyau Linux de version 2.6.25 au minimum. Il existe aussi des pilotes virtio pour Windows[8]. 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 au sens strict car il faut que les pilotes soient informés qu'ils sont exécutés dans un environnement virtualisé[9].

Articles connexes

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]

Notes et références

[modifier | modifier le code]
  1. Linux 2 6 20 sur KernelNewbies.
  2. (en) État du projet sur le wiki de KVM.
  3. (en) Gmane Loom.
  4. « Virtualisation  : Red Hat rachète l'israélien Qumranet », sur journaldunet.com (consulté le ).
  5. Voir cette page sur le blog d'Avi Kivity.
  6. Si l'architecture du système hôte et invité sont de type x86 32 ou 64 bits.
  7. Voir cette page sur le site de KVM.
  8. (en) [1].
  9. (en) http://wiki.libvirt.org/page/Virtio.