Aller au contenu
Virtualisation medium

KVM, QEMU, libvirt : comprendre les couches

11 min de lecture

Logo KVM

Vous voulez utiliser KVM pour vos machines virtuelles, mais vous tombez sur trois noms différents : KVM, QEMU, libvirt. Lequel fait quoi ? Ce guide clarifie les 3 couches de la virtualisation Linux et vous montre ce que vous manipulez réellement au quotidien.

CoucheRôleOù ça tourne
KVMAccélère l’exécution CPU des VMsKernel (module)
QEMUConstruit la VM et ses périphériquesUserspace (processus)
libvirtPilote tout via API/daemon/outilsUserspace (service)

Quand vous “utilisez KVM”, vous utilisez en réalité les trois ensemble.

  • Le rôle de KVM (accélération matérielle)
  • Le rôle de QEMU (émulation et création de VMs)
  • Le rôle de libvirt (gestion unifiée)
  • Les objets que vous manipulez : domain, network, storage pool
  • La différence entre défini et actif

Quand on débute avec la virtualisation Linux, on rencontre rapidement ces trois termes :

  • “Installer KVM
  • “Lancer une VM avec QEMU
  • “Gérer les VMs avec libvirt

Ces termes sont souvent utilisés de manière interchangeable, ce qui crée de la confusion. En réalité, ce sont trois couches distinctes qui travaillent ensemble.

Architecture en 5 couches : Utilisateur → libvirt → QEMU → KVM → Matériel

Chaque couche a un rôle précis. Voyons-les une par une.

KVM (Kernel-based Virtual Machine) est un module du noyau Linux. Ce n’est pas un programme que vous lancez, c’est une extension du kernel qui transforme Linux en hyperviseur.

  • Accélération matérielle : utilise les instructions CPU (Intel VT-x / AMD-V) pour exécuter les VMs à vitesse quasi-native
  • Isolation : chaque VM est isolée des autres grâce au matériel
  • Performance : les instructions de la VM s’exécutent directement sur le CPU, pas d’émulation coûteuse
  • KVM ne crée pas de VMs
  • KVM ne gère pas les disques virtuels
  • KVM ne configure pas le réseau

KVM est “juste” l’accélérateur. Sans lui, les VMs tourneraient en émulation logicielle (très lent). Avec lui, elles atteignent des performances proches du bare-metal.

Si votre VM est une voiture, KVM est le turbo. Sans turbo, la voiture roule (lentement). Avec turbo, elle atteint sa vitesse maximale.

QEMU (Quick Emulator) est un émulateur et virtualiseur. C’est lui qui crée réellement les machines virtuelles.

  • Crée les VMs : définit le “matériel virtuel” (CPU, RAM, disques, cartes réseau)
  • Émule le matériel : peut émuler différentes architectures (x86, ARM, etc.)
  • Gère les périphériques : disques virtuels, cartes réseau, USB, etc.
ModePerformanceUsage
QEMU seulLente (émulation)Émuler une autre architecture (ARM sur x86)
QEMU + KVMQuasi-nativeVMs de production sur même architecture

En pratique, on utilise presque toujours QEMU + KVM pour les VMs Linux/Windows sur serveur x86.

Si votre VM est une voiture, QEMU est le châssis. Il définit la structure : combien de roues, quelle carrosserie, quel moteur. Sans châssis, pas de voiture.

On peut lancer une VM directement avec QEMU, par exemple qemu-system-x86_64 -enable-kvm -m 2048 ..., mais c’est fastidieux à gérer. En pratique, on passe par libvirt.

libvirt est une couche de gestion qui simplifie l’utilisation de QEMU/KVM (et d’autres hyperviseurs).

  • API unifiée : même interface pour KVM, QEMU, Xen, VirtualBox, VMware…
  • Daemon : libvirtd tourne en arrière-plan et gère les VMs
  • Outils : virsh (CLI), virt-manager (GUI), virt-install (création)
  • Configuration : stocke les définitions de VMs en XML
Sans libvirtAvec libvirt
Commandes QEMU longues et complexesvirsh start ma-vm
Pas de persistance automatiqueVMs définies et persistantes
Gestion manuelle du réseauRéseaux virtuels préconfigurés
Pas d’interface graphiquevirt-manager, cockpit

Si votre VM est une voiture, libvirt est le tableau de bord. Vous ne manipulez pas directement le moteur (KVM) ou le châssis (QEMU). Vous utilisez le volant, les pédales, le compteur — l’interface qui rend la conduite facile.

OutilTypeUsage
virshCLIGestion en ligne de commande
virt-managerGUIInterface graphique desktop
virt-installCLICréation de VMs scriptable
cockpit-machinesWebInterface web (moderne)

Avec libvirt, vous ne parlez pas de “fichiers QEMU” ou “modules kernel”. Vous manipulez des objets avec des noms clairs.

Un point important : dans libvirt, un objet (domain, network, pool) peut être :

  • Défini : configuration persistante, stockée sur disque
  • Actif : en cours d’exécution / disponible

Un domain peut être défini mais arrêté. Un réseau peut être défini mais inactif. C’est une distinction fondamentale.

Un domain est une machine virtuelle. C’est l’objet principal que vous créez et gérez.

Fenêtre de terminal
virsh list --all # Lister tous les domains (actifs et définis)

Un network est un réseau virtuel. Par défaut, libvirt crée un réseau “default” en NAT.

Fenêtre de terminal
virsh net-list --all # Lister tous les réseaux

Un storage pool est un “conteneur” de disques. Un volume est un disque individuel.

Fenêtre de terminal
virsh pool-list --all # Lister les pools (ex: default = /var/lib/libvirt/images/)
Objet libvirtCe que c’estÉtat “défini”État “actif”
DomainMachine virtuelleConfig XML stockéeVM en cours d’exécution
NetworkRéseau virtuelConfig réseau stockéeBridge créé, DHCP actif
Storage PoolConteneur de disquesChemin configuréAccessible pour créer des volumes
VolumeDisque virtuelFichier/LV existant

Quand vous lancez virsh start ma-vm, voici ce qui se passe :

  1. Vous → Envoyez la commande à libvirt (via virsh)

  2. libvirt → Lit la définition XML de la VM, vérifie les ressources

  3. libvirt → Lance un processus QEMU avec les bons paramètres

  4. QEMU → Crée la VM et demande à KVM d’accélérer l’exécution

  5. KVM → Utilise le CPU pour exécuter les instructions de la VM

La VM tourne. Vous ne voyez que le résultat : une machine virtuelle qui fonctionne.

Cette séparation en couches a des avantages :

AvantageExplication
Flexibilitélibvirt peut gérer d’autres hyperviseurs (Xen, VirtualBox)
PerformanceKVM optimise l’exécution sans que vous vous en occupiez
SimplicitéVous utilisez des commandes simples, pas des lignes QEMU
StandardisationMême interface partout (scripts, Ansible, Terraform)
ConfusionRéalité
”J’installe KVM”Vous installez QEMU + libvirt + outils. KVM est la partie noyau qui permet l’accélération, et il faut que la machine l’autorise (BIOS/UEFI + CPU compatible).
”KVM ne marche pas”Souvent un problème de libvirtd (ou daemon modulaire), de permissions, ou de virtualisation non activée dans le BIOS.
”C’est lent”KVM n’est peut-être pas utilisé (option -enable-kvm manquante, ou virtualisation désactivée).
“virsh ne trouve pas ma VM”La VM n’est pas définie dans libvirt (elle n’existe que comme fichier disque).
  1. KVM = module kernel = accélération matérielle (le “turbo”)

  2. QEMU = émulateur/virtualiseur = crée les VMs (le “châssis”)

  3. libvirt = couche de gestion = API + daemon + outils (le “tableau de bord”)

  4. Vous utilisez libvirt au quotidien (virsh, virt-manager), pas QEMU directement

  5. Les objets libvirt : domain (VM), network (réseau), storage pool/volume (disques)

  6. Défini vs Actif : un objet peut exister en configuration sans être en fonctionnement

Avant de continuer, vérifiez que vous pouvez répondre à ces questions :

  • ✅ Quel est le rôle de KVM ? De QEMU ? De libvirt ?
  • ✅ Pourquoi utilise-t-on libvirt plutôt que QEMU directement ?
  • ✅ Qu’est-ce qu’un “domain” dans le vocabulaire libvirt ?
  • ✅ Quelle est la différence entre un objet “défini” et “actif” ?

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.