# Présentation des hyperviseurs Xen et KVM {{INLINETOC}} ## Xen Xen est un hyperviseur distribué sous licence GPLv2. A l’origine développé à l’Université de Cambrige, la première version publique est disponible en 2003. ### Architecture de Xen .----------------------------------------------------------------------------------------------. | .-------------------. .-------------------. .-------------------. .-------------------. | | |[88] Dom0 | |[PK] DomU | |[PK] DomU | |[78] DomU | | | | .---------------. | | .---------------. | | .---------------. | | .---------------. | | | | |Noyau | | | | | | | | | | | |Noyau | | | | | | | | | | Noyau | | | | Noyau | | | | | | | | | | .-----------. | | | | .-----------. | | | | .-----------. | | | | .-----------. | | | | | | |Driver | | | | | | Driver PV | | | | | | Driver PV | | | | | |Driver HVM | | | | | | | .-----------. | | | | .-----------. | | | | .-----------. | | | | .-----------. | | | | | .---------------. | | .---------------. | | .---------------. | | .---------------. | | | | ^ ^ | | ^ | | ^ | | ^ ^ | | | | | | | | | | | | | | | | | | | | v v | | v | | v | | v v | | | .-------------------. .-------------------. .-------------------. .-------------------. | | ^ ^ ^ ^ ^ ^ | | | | | | | | | | .-----+--+-------------------+-------------------+-------------------+----+--------------. | | |[GR] | | | | | | | | | | | '-------------------+-------------------+-------------------' | | | | | | Hyperviseur XEN | | | | | v v | | | .----------------------------------------------------------------------------------------. | | ^ ^ | | | | | | .-----+-------------------------------------------------------------------+--------------. | | |[BB] | | | | | | v MATERIEL v | | | | cBLU | | | .----------------------------------------------------------------------------------------. | .----------------------------------------------------------------------------------------------. [BB]: {"fill":"#5555BB","a2s:delref":true} [LB]: {"fill":"#bbddee","a2s:delref":true} [PK]: {"fill":"#FFAAAA","a2s:delref":true} [OR]: {"fill":"#FF7733","a2s:delref":true} [BG]: {"fill":"#114444","a2s:delref":true} [GR]: {"fill":"#99dd99","a2s:delref":true} [RD]: {"fill":"#EE3322","a2s:delref":true} [YL]: {"fill":"#ffff33","a2s:delref":true} [88]: {"fill":"#888888","a2s:delref":true} [78]: {"fill":"#447788","a2s:delref":true} Techniquement Xen est un hyperviseur « bare metal », aussi appelé hyperviseur de « type 1 ». Le code de Xen est exécuté juste au-dessus du matériel, avec un niveau de privilèges d’accès aux ressources système (CPU, IO, RAM) maximal. Xen implémente certaines fonctions qu’on retrouve dans tous les OS : un ordonnanceur, un gestionnaire d’interruptions, quelques drivers etc. La philosophie principale est d’avoir un minimum de code pour réduire le nombre de bugs/failles de sécurité et de limiter le code partagé entre les différentes machines virtuelles pour augmenter leur isolation réciproque. - **Le dom0**: La plupart des facilités d’administration de l’hyperviseur sont accessibles à travers une machine virtuelle spécialement privilégiée instanciée tout de suite après le démarrage de l’hyperviseur. Cette machine virtuelle, appelée « domain 0 » abrégé dom0, est un système d’exploitation complet (au choix Linux, BSD, Solaris etc…) dont le noyau est spécialement modifié pour communiquer avec l’hyperviseur sous-jacent. Le dom0 contrôle (démarre, arrête, surveille) les autres machines virtuelles non privilégiées (appelées « User domain » ou domU). - **Les domU** peuvent être paravirtualisés (**P**ara**V**irtualized – **PV**) ou matériellement virtualisés (**H**ardware-assisted **V**irtualized **M**achine – **HVM**): - **La paravirtualisation** implique que le noyau de l’OS de la machine virtuelle doit être modifié afin de coopérer avec l’hyperviseur pour l’accès aux ressources physiques. En pratique lorsqu’une machine est paravirtualisée, c’est le dom0 qui effectue les opérations d’E/S au profit de la VM puis lui « retourne » les résultats. C’est pourquoi il faut toujours s’assurer que le dom0 possède suffisamment de mémoire vive et de ressource CPU pour opérer correctement en faveur des VM. - **La virtualisation matérielle** ne nécessite pas de modifications de l’OS invité car le CPU, au travers d’un jeu d’instructions spéciales (Intel VT-d ou AMD-V), fait croire au système invité (la VM) qu’il a un accès direct au matériel. Cependant, cela entraîne un surcoût de fonctionnement car certaines demandes d’accès aux ressources physiques effectués par la VM doivent être interceptés pour vérifier qu’elles n’affectent pas les autres VM. Les performances des opérations d’E/S des VM paravirtualisées sont significativement meilleures que celles des VM HVM. Les machines virtuelles Windows, dont le noyau ne peut être modifié, sont nécessairement HVM. Cependant, pour améliorer les performances de ces VM, des drivers additionnels peuvent être installés après le système d’exploitation « de base », ces drivers étant spécialement optimisés pour être exécutés dans un contexte virtualisé. On parle alors de « PV on HVM » et les performances, comparées à la paravirtualisation, sont similaires. ### Distributions Linux qui ont un noyau Xen Dom0 ^ Distributions ^ Versions ^ | Alpine Linux | 2.4.x (2012-05-02) et plus récent | | CentOS and autres clones de RHEL| 5.x | | CentOS 6.4+ | 6.4 et plus récent, utilise Xen4CentOS ((Xen4CentOS est en fait un concept assez simple: le noyau embarqué dans la distribution est remplacé par un noyau standard de kernel.org et inclus quelques bibliothèques nécessaires pour faciliter l'hyperviseur.))| | Debian | 4.0 (Etch), 5.0 (Lenny), 6.0 (Squeeze), 7 (Wheezy) et plus récent | | Fedora | Support complet à partir de Fedora 16 | | Mageia | Toutes les versions | | OpenEmbedded | Toutes les versions depuis la 1.3, via la couche de méta-virtualisation pour ARM et x86 | | OpenSUSE | Toutes les versions depuis 11 | | Oracle VM for x86 (OVS) | Toutes les versions | | Redhat Enterprise Linux (RHEL) | 5.x uniquement | | SUSE Linux Enterprise (SLE) | Toutes les versions depuis 11 | | Ubuntu | Toutes les versions depuis 11.10 | | XenServer | Toutes les versions, mais open source à partir de XenServer 6.2. Auparavant, XCP était disponible en tant que sous-ensemble open source de XenServer. | | XCP-ng | Toutes les versions depuis son existence (remplaçant XCP) | ## KVM KVM pour Kernel Virtual Machine est une autre technologie de virtualisation Open Source et est distribuée sous licence GPLv2 ou LGPL. A l’origine fork de l’émulateur QEMU, les deux projets sont régulièrement synchronisés et la partie spécifique à KVM se concentre sur l’accélération matérielle des VM (profitant des jeux d’instructions des CPU) et sur l’intégration dans le noyau Linux. Le module noyau KVM est disponible nativement dans le noyau Linux depuis février 2007. ### Architecture de KVM .----------------------------------------------------------------------------------------. | .--------------------------. .----------------------------------------------------. | | |[88] | |[88] | | | | Outils d'administration | | Applications Natives Linux | | | | des VMs | | | | | | ^ | | | | | | | | | | | | | v | | | | | .--------------------------. .----------------------------------------------------. | | .----------------------------------------------------------------------------------. | | |[GR] ^ | | | | | Noyau Linux | | | | v | | | | .------------------. .-----. .-----. | | | | |[78] | |[PK] | |[PK] | | | | | | Module KVM |<--->| VMs | | VMs | | | | | .------------------. .-----. .-----. | | | .----------------------------------------------------------------------------------. | | .----------------------------------------------------------------------------------. | | |[BB] | | | | MATERIEL | | | | | | | .----------------------------------------------------------------------------------. | .----------------------------------------------------------------------------------------. [BB]: {"fill":"#5555BB","a2s:delref":true} [LB]: {"fill":"#bbddee","a2s:delref":true} [PK]: {"fill":"#FFAAAA","a2s:delref":true} [OR]: {"fill":"#FF7733","a2s:delref":true} [BG]: {"fill":"#114444","a2s:delref":true} [GR]: {"fill":"#99dd99","a2s:delref":true} [RD]: {"fill":"#EE3322","a2s:delref":true} [YL]: {"fill":"#ffff33","a2s:delref":true} [88]: {"fill":"#888888","a2s:delref":true} [78]: {"fill":"#447788","a2s:delref":true} L’architecture de KVM est très différente de celle de Xen. KVM est disponible sous forme de module Linux, intégré au noyau Linux. Le processus de démarrage du serveur hôte n’est pas modifié par la présence de KVM et une machine virtuelle se résume à un processus Linux comme un autre. On peut comparer KVM à Virtualbox ou VMWare Workstation (hyperviseur de « type 2 »), à ceci près que, bien que l’administration de l’hyperviseur se fait depuis « l’espace utilisateur » (user-land), la machine virtuelle elle-même tourne en espace noyau (kernel-land). KVM ne supporte pas la paravirtualisation donc nécessite une CPU avec le support de la virtualisation matérielle. Pour obtenir des performances d’E/S satisfaisantes pour les VM HVM, KVM profite de l’intégration native des pilotes VirtIO (Virtual IO) dans le noyau Linux depuis la version 2.6.25 (avril 2008). Ces pilotes sont optimisés pour un contexte de virtualisation (PV on HVM). On profite ainsi de la facilité de la virtualisation complète (inutile de modifier le système invité) avec les performances de la paravirtualisation. Évidemment comme les drivers VirtIO ne sont pas intégrés d’office dans Microsoft Windows, ainsi comme c’est le cas pour Xen, il faudra les mettre en place a posteriori d’une installation d’une VM Windows. Bien qu’il existe des implémentations de KVM pour *BSD, KVM est d’abord développé pour Linux. Toutes les distributions majeures de GNU/Linux supportent KVM.