Virtual machine, full virtualization, paravirtualization, HAV, QEMU, KVM, késako ?
Un peu de vulgarisation pour les rookies
Au sommaire :
- 1-Qu'est-ce qu'une machine virtuelle ?
- 2-Les différents type de virtualisation
- 3-QEMU
- 4-KVM
- 5-Conclusion
1-Qu'est-ce qu'une machine virtuelle ?
Une machine virtuelle est la représentation logique d'une machine physique, c'est la définition la plus simple que je puisse vous faire pour éviter de rentrer trop dans les détails. Imaginez là comme une boite auquel on ajoute tout les éléments d'une machine physique :
- De la mémoire vive,
- Des ressources processeur,
- Des ports USB,
- Un ou plusieurs disques en IDE, SATA ou ISCSI,
- Une carte graphique,
- Une ou plusieurs cartes réseaux carte réseau,
Ce schéma devrait être clair pour tout le monde.
La virtualisation offre de multiples avantages :
- Réduction des coûts matériels,
- Réduction de la facture énergétique,
- Facilite les opérations de maintenance,
- Meilleure allocation des ressources,
- Virtualiser plusieurs systèmes d'exploitation simultanément,
2-Les différents type de virtualisation
En ce qui concerne les différents type de virtualisation, il en existe 3 types en particulier :
- La virtualisation matérielle (HAV pour Hardware Assisted Virtualization),
- La virtualisation complète (full virtualization),
- Et enfin, la para-virtualisation,
Pour la virtualisation matérielle, ce sont les instructions de virtualisation assistés par le matériel (HAV) fournis par Intel et AMD (Intel-VT-d/x, AMD-V). Il suffit d’activer l’option dans le BIOS pour que l’hyperviseur puisse accéder aux ressources du matériel. Si ce n’est pas le cas, impossible d’effectuer de la virtualisation. Vous ne pourrez faire que de l’émulation avec QEMU (plus gourmand en ressources), un peu comme avec les émulateurs de consoles de jeu.
Pour la virtualisation complète, le système n’a pas conscience d’être virtualisé. L’hyperviseur fera de la translation binaire qui est aussi plus gourmande en ressources.
Enfin pour le dernier, les pilotes de para-virtualisation comme virtio et vm-tools permettent au système d’être conscient d’être virtualisé, ce qui donne de meilleures performances qu’avec la translation binaire (full virtualization).
Grâce à des backends, le système invité (guest OS) pourra parler directement à l'hyperviseur (grâce aux hypercalls) qui lui même est en contact direct avec le matériel hôte.
Ce schéma devrait être plus parlant.
Dans 99% des cas, vous allez utiliser des machines avec des pilotes de para-virtualisation.
Maintenant qu'on a vu les différents type de virtualisation, intéressons nous au duo QEMU-KVM.
3-QEMU
QEMU (QuickEmulator) est un émulateur libre conçu par un français (Fabrice Bellard) qui permet de :
- Virtualiser sans émuler si le système virtualisé utilise le même processeur que le matériel hôte,
- D'émuler les architectures suivantes dans le cas contraire : x86, ARM, AVR, ColdFire PowerPC, Sparc (32/64), MIPS, RISC-V, S/390, Xtensa9,
C'est à la fois :
- Un hyperviseur de type 1 par le biais de KVM qui lui permet d'adresser directement les instructions processeurs du système invité (guest OS) au matériel hôte,
- Et un hyperviseur de type 2 car pour émuler une architecture différente de celle du matériel hôte (exemple : Debian version ARM), il transforme les exécutions de processeurs pour les rendre compatibles,
Où ça un phoque ? Haaa, c'est pas très clair. Pour mieux comprendre, voici deux exemples :
Pour la virtualisation sans émulation, QEMU combiné à KVM (ou Xen) n'a pas besoin d'émuler un processeur car KVM a un accès direct aux ressources du matériel hôte. QEMU peut donc exécuter le code du système invité (guest OS) directement sur le processeur de la machine hôte. Quand je veux virtualiser Windows sur Proxmox VE :
- KVM s'occupe d'accéder aux ressources du matériel hôte et de les alloués au système virtualisé (c'est son seul et unique rôle),
- QEMU va s'occuper d'émuler les différents périphériques de la machine virtuelle et d’exécuter le code en direct,
Par contre, lorsque le processeur diffère de celui du système invité (ex : faire tourner Android prévu pour du ARM sur un processeur x86/x64), KVM est hors jeu (logique, son rôle est d'apporter l'accélération matérielle) et c'est QEMU qui va devoir émuler (simuler) le comportement du processeur ARM pour pouvoir le faire tourner sur un processeur x86/x64. C'est ni plus, ni moins que de la translation binaire. C'est comme émuler une console Sega, Sony ou Nintendo sur son PC x86/x64.
D'ailleurs, c'est lui qu'on retrouve derrière l'émulateur XEMU pour émuler la Xbox sur PC (console avec un processeur X86).
QEMU n'a donc pas besoin de KVM et du HAV pour pouvoir émuler tout type d'architecture. Cela se fera au prix d'une plus grande consommation en ressource via la translation binaire.
Mais on le retrouvera systématiquement en duo avec KVM dans toute les solutions de virtualisation et dans le cloud.
4-KVM
KVM (pour Kernel-based Virtual Machine) est un module de virtualisation conçu par Avi Kivity de la société Qumranet en 2006. La société ayant été racheté par Red Hat en 2008, ces derniers ont intégrer KVM comme module du noyau Linux depuis la version 2.6.20.
À l'origine, KVM était un fork de QEMU avec comme objectif d'apporter l’accélération matérielle. QEMU ayant été intégré au code-source de KVM, les deux sont devenus interdépendant.
Outre les processeurs x86/x64, il est compatible avec les processeurs PPC 440, PPC 970, S/390, ARM (Cortex A15, AArch64) et MIPS32.
KVM comme module du noyau Linux permet à ce dernier d'être un hyperviseur de type 1. Il est un concurrent direct de Xen, ESXi et Hyper-V. Il est utilisé dans de nombreuses solutions comme :
- Proxmox VE,
- RHEV/Ovirt,
- OpenStack,
- CloudStack,
- OpenNebula,
- Nutanix,
Ainsi que chez GCP, AWS et les fournisseurs alternatifs en ce qui concerne le cloud. C'est un hyperviseur qui est largement au delà des 9000 comme dirait Végéta.
5-Conclusion
Retenez que sur Proxmox VE ou toute distribution Linux, nous allons utiliser :
- QEMU-KVM en duo pour virtualiser tout système invité (Linux, Windows, FreeBSD/OpenBSD) qui tournent sur des architectures x84/x64 (Intel/AMD),
- La para-virtualisation pour obtenir des performances aussi proche que possible du bare-metal (système installé directement sur le matériel hôte),
Est-ce dans 99% des cas.
J'espère que ce article vous a plu et que j'ai pu vulgariser au plus grand nombre ce sujet assez complexe à aborder.
En comparaison des autres hyperviseurs, QEMU-KVM est le champion toute catégorie car il combine à la fois une large compatibilité matérielle couplé à une longue liste d'architectures émulés. N’hésitez pas à le partager sur les réseaux sociaux et à me faire part de vos retours (positifs ou négatifs). See yaaa!!!!!
Sources :