Aller au contenu
Virtualisation medium

KVM : qu'est-ce que c'est ? L'hyperviseur Linux (QEMU, libvirt)

15 min de lecture

Logo KVM

KVM (Kernel-based Virtual Machine) est l'hyperviseur intégré au noyau Linux depuis 2007. Il transforme une machine Linux en plateforme de virtualisation en s'appuyant sur les extensions matérielles du processeur (Intel VT-x ou AMD-V), ce qui donne aux machines virtuelles des performances quasi natives. C'est le moteur derrière Proxmox, OpenStack et la plupart des clouds.

Mais quand on « utilise KVM », on tombe vite sur trois noms : KVM, QEMU, libvirt. Lequel fait quoi ? Ce guide clarifie les 3 couches de la virtualisation Linux et 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 virtueln/aFichier/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)

KVM est-il un hyperviseur de type 1 ou de type 2 ?

Section intitulée « KVM est-il un hyperviseur de type 1 ou de type 2 ? »

KVM est généralement classé hyperviseur de type 1 (bare-metal), aux côtés de VMware ESXi et Hyper-V. La raison : KVM s'intègre dans le noyau Linux, qui possède déjà tout ce qu'il faut (ordonnanceur, gestion mémoire, pilotes). Le noyau devient l'hyperviseur et planifie les machines virtuelles directement sur le matériel via VT-x/AMD-V.

La nuance, souvent mal expliquée : comme KVM tourne au sein d'un système Linux hôte complet et s'appuie sur QEMU en espace utilisateur, certains le qualifient de type 2 ou hybride. La formulation juste : un hyperviseur de type 1 à architecture hybride.

Situer KVM par rapport aux solutions connues aide à comprendre son positionnement : serveur et cloud, open source, performances natives.

HyperviseurTypeLicenceUsage typique
KVM1 (noyau Linux)open source GPLserveur, cloud, perfs natives
VMware ESXi1 (autonome)propriétaireentreprise (vSphere)
Xen1 (micro-noyau)open source GPLparavirtualisation
VirtualBox2 (hosted)open source GPLposte de travail
Hyper-V1propriétaireécosystème Windows

KVM est le seul type 1 fondu dans un noyau d'OS généraliste. Pour des tests sur poste, VirtualBox (type 2) suffit ; pour du serveur performant et gratuit, KVM s'impose, d'où sa place de moteur dans Proxmox et OpenStack.

Avant de virtualiser, trois commandes confirment que votre machine est prête. Les sorties ci-dessous proviennent d'un poste réel.

Fenêtre de terminal
# 1. Le CPU supporte-t-il la virtualisation ? (>0 = oui ; vmx=Intel, svm=AMD)
egrep -c '(vmx|svm)' /proc/cpuinfo
# 32
# 2. Diagnostic clair (paquet cpu-checker)
kvm-ok
# INFO: /dev/kvm exists
# KVM acceleration can be used
# 3. Le device et les modules charges
ls /dev/kvm # crw-rw---- 1 root kvm ...
lsmod | grep kvm # kvm_intel ... / kvm ...

Si /dev/kvm est absent malgré un flag vmx/svm présent, la virtualisation est désactivée dans le BIOS/UEFI : activez-la.

KVM est open source sous licence GPL et fait partie intégrante du noyau Linux. Aucune licence payante : vous l'utilisez librement sur Ubuntu, Debian, Rocky ou Fedora. Les éditeurs entreprise (Red Hat) facturent du support et de l'outillage, pas KVM lui-même.

Côté adoption, KVM est le moteur de Proxmox VE, OpenStack (hyperviseur par défaut), KubeVirt / OpenShift Virtualization, et de nombreux clouds (Google Cloud, OVHcloud, Outscale). La brique de gestion libvirt suit une cadence mensuelle (version 12.x en 2026).

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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn