Debian logo [inetdoc.LINUX]

3. Choix d'une solution de virtualisation

3.1. Virtualisation et noyau Linux

À l'heure actuelle, il existe deux grandes approches de la virtualisation. Une première méthode, appelée paravirtualisation, suppose que le système d'exploitation invité soit légèrement modifié pour être exécuté sous forme virtualisée. L'autre méthode, appelée virtualisation complète, permet d'exécuter le système d'exploitation invité tel quel sans modification. On dit que la virtualisation complète sacrifie les performances au prix de la compatibilité parce qu'il est plus difficile d'obtenir de bonnes performances lorsque le système invité ne participe pas au processus de virtualisation. Ceci dit, les développements récents sur les processeurs ont tendance à combler cet écart de performances. Qu'il s'agisse d'Intel™ (VT : Intel® Virtualization Technology) ou d'AMD™ (AMD-V : Industry Leading Virtualization Platform Efficiency) les derniers processeurs disposent de fonctions matérielles pour la virtualisation. Cette tendance pourrait rendre la paravirtualisation inutile. C'est exactement l'objectif de la solution KVM. En ajoutant des capacités de virtualisation à un noyau Linux standard, nous pouvons tirer parti de tout le travail de réglage fin qui est intégré dans le noyau et bénéficier des avantages d'un environnement virtualisé.

Avec le modèle KVM, chaque machine virtuelle est un processus standard du noyau Linux géré par l'ordonnanceur (scheduler). Un processus normal de système GNU/Linux peut être exécuté selon deux modes : noyau (kernelspace) ou utilisateur (userspace). KVM ajoute un troisième mode : le mode invité qui possède ses propres modes noyau et utilisateur.

Le modèle de virtualisation KVM comprend deux composants.

  • Un pilote de périphérique pour piloter le matériel virtualisé. Les fonctions de se pilote sont disponibles via le fichier spécial d'interface de type caractère /dev/kvm.

    Cette partie noyau (kernelspace) de la solution est présentée ci-dessous.

  • Un logiciel utilisateur pour émuler le matériel d'un PC. Cette partie utilisateur (userspace) est une version légèrement modifiée des outils QEMU. Elle est aussi présentée plus en détails ci-dessous.

3.2. Contexte pratique

Pendant longtemps, j'ai utilisé les outils VMware™. Cette solution, séduisante au premier abord, pose un certain nombre de problèmes dans le temps. Tout d'abord, ces outils propriétaires sont «désynchronisés» par rapport aux développements du noyau Linux. Régulièrement, je me suis retrouvé dans l'incapacité d'utiliser les instances de machines virtuelles pendant une ou deux semaines. Il est nécessaire de repasser par des compilations après application de correctifs (patches) intermédiaires. Ensuite, les solutions libres et synchrones avec les évolutions de l'ensemble de la chaîne GNU/Linux se sont développées et ont gagné en maturité.

Même si ce type de choix est toujours discutable, j'ai jeté mon dévolu sur le couple Qemu/KVM.

KVM, Kernel-based Virtual Machine

Kernel Based Virtual Machine est une solution virtualisation complète pour Linux. Elle est basée sur les architectures x86 possédant les extensions matérielles de virtualisation Intel VT ou AMD-V. Elle consiste en un module chargeable du noyau qui fournit le cœur de virtualisation et un module spécifique dépendant du processeur (kvm-intel.ko ou kvm-amd.ko).

Les outils QEMU sont aussi nécessaires au fonctionnement de KVM pour les manipulations sur les fichiers images des instances de systèmes d'exploitation.

QEMU

QEMU open source machine emulator est un émulateur machine générique et un outil de virtualisation.

Utilisé comme émulateur machine, QEMU peut exécuter des instances de systèmes d'exploitation (OSes) et des programmes faits pour une architecture particulière (carte mère ARM par exemple) sur une machine différente (votre propre PC par exemple). En utilisant la traduction dynamique, QEMU donne de très bonnes performances.

Utilisé comme outil de virtualisation, QEMU offre des performances voisines du mode natif en exécutant le code du système invité directement sur le processeur hôte. Dans ce mode, un pilote appelé «accélérateur QEMU» (aussi connu sous le nom de module KQEMU) est nécessaire. Le mode virtualisation impose que le système invité et le système hôte soient basés sur des architectures x86.

La présentation de ces 2 outils complémentaires introduit la distinction entre les processeurs possédant les extensions de virtualisation ou non. Pour identifier les caractéristiques des processeurs avec un système hôte GNU/Linux, on utilise les informations fournies dans l'arborescence /proc. Si le seul système d'exploitation installé sur la machine hôte est de type Windows, il est toujours possible de lancer la machine en utilisant un live CD de type KNOPPIX pour effectuer la même opération.

Suivant le résultat de la commande suivante, on sait si le processeur peut utiliser la solution KVM ou non.

$ egrep '(vmx|svm)' /proc/cpuinfo

Si la commande ne donne aucun résultat, le processeur ne possède pas d'extension de virtualisation et seule la solution QEMU est utilisable.

Si le résultat donne une ou plusieurs lignes (suivant le nombre de cœurs du processeur) débutant par flags :, la solution KVM est utilisable avec les outils QEMU.