Aller au contenu

Créer une VM optimisée : VirtIO SCSI single, iothread, discard, CPU type, NUMA

Day 1 · DéployerNiveau 2 · OpérerProcédureRédigé · à valider en lab

Créer une VM performante et migrable : contrôleur VirtIO SCSI single avec IO thread, discard activé, carte réseau VirtIO, type de CPU adapté au cluster, NUMA si la VM est large, et agent QEMU.

Réglages de référence

Réglage Valeur MSP Pourquoi
Machine q35 Bus PCIe virtuel, requis pour le passthrough PCIe
BIOS OVMF (UEFI) + disque EFI ; TPM v2.0 pour Windows 11 Secure Boot, Windows 11
Contrôleur SCSI virtio-scsi-single Un contrôleur par disque, permet l'IO thread
Disque scsi0, iothread=1, discard=on, ssd=1 E/S dans un thread dédié, TRIM vers le stockage fin
Cache none (défaut) Pas de cache de page hôte, cohérent en cas de coupure
Async IO io_uring (défaut) Ne changer que sur recommandation MSP
Réseau virtio, bridge vmbr0, tag VLAN Meilleur débit, faible CPU
CPU x86-64-v2-AES (défaut GUI) ou plus récent commun au cluster Migration à chaud entre nœuds
NUMA Activé si la VM dépasse un socket physique Localité mémoire, hotplug CPU/RAM
Agent agent: enabled=1,fstrim_cloned_disks=1 Arrêt propre, gel FS pour sauvegardes, IP visibles

Type de CPU : lequel choisir ?

Type Avantage Limite
x86-64-v2-AES Compatible avec tout CPU depuis Westmere / Opteron G4 Pas d'AVX/AVX2
x86-64-v3 AVX, AVX2, FMA : utile pour bases de données, compression Tous les nœuds doivent être Haswell / EPYC ou plus récents
x86-64-v4 AVX-512 Skylake-SP / EPYC Genoa minimum sur tous les nœuds
host Performances maximales, toutes les instructions Migration à chaud uniquement entre CPU strictement identiques

Règle MSP : prendre le niveau le plus élevé supporté par le plus ancien nœud du cluster. host est réservé aux clusters homogènes ou aux VM non migrées.

Avant de toucher la prod

  • Stockage cible identifié (ceph-vm, local-zfs, LUN SAN) et espace libre vérifié.
  • VMID réservé (ex. 101) et nom conforme à la convention client.
  • Pour Windows : ISO des pilotes VirtIO (virtio-win.iso) disponible sur un stockage ISO.
  • VLAN de la VM connu et présent sur le bridge.
  • Génération CPU la plus ancienne du cluster connue (lscpu | grep 'Model name' sur chaque nœud).

Étapes

Bouton Create VM :

  1. General : nœud pve01, VM ID 101, nom srv-app01.
  2. OS : ISO d'installation ; Guest OS selon le système (Linux 6.x, Windows 11/2022/2025). Pour Windows, cocher Add additional drive for VirtIO drivers.
  3. System : Machine q35, BIOS OVMF (UEFI), Add EFI Disk sur ceph-vm, Pre-Enroll keys coché, Add TPM (v2.0) pour Windows 11. SCSI Controller VirtIO SCSI single, Qemu Agent coché.
  4. Disks : Bus SCSI, stockage ceph-vm, taille ; cocher Discard, IO thread, SSD emulation (case Advanced). Cache Default (No cache).
  5. CPU : Sockets 1, Cores 4, Type x86-64-v2-AES (ou le niveau validé). Cocher Enable NUMA si plus d'un socket.
  6. Memory : 8192 Mo ; Ballooning Device laissé actif.
  7. Network : bridge vmbr0, VLAN Tag, Model VirtIO (paravirtualized).
qm create 101 --name srv-app01 --ostype l26 \
  --machine q35 --bios ovmf \
  --efidisk0 ceph-vm:1,efitype=4m,pre-enrolled-keys=1 \
  --scsihw virtio-scsi-single \
  --scsi0 ceph-vm:64,iothread=1,discard=on,ssd=1 \
  --cpu x86-64-v2-AES --sockets 1 --cores 4 --numa 0 \
  --memory 8192 \
  --net0 virtio,bridge=vmbr0,tag=20 \
  --agent enabled=1,fstrim_cloned_disks=1 \
  --ide2 local:iso/debian-13-netinst.iso,media=cdrom \
  --boot order='scsi0;ide2' --onboot 1
# Windows 11 : ajouter TPM
qm set 101 --tpmstate0 ceph-vm:1,version=v2.0

Dans l'invité : installer qemu-guest-agent (Linux) ou les pilotes VirtIO et l'agent depuis virtio-win.iso (Windows). Vérifier que le TRIM est actif (systemctl status fstrim.timer sous Linux).

VM large : NUMA

Pour une VM dont le nombre de vCPU ou la RAM dépasse un socket physique : --sockets 2 --numa 1, avec autant de sockets virtuels que de nœuds NUMA de l'hôte (lscpu | grep NUMA). Le NUMA est aussi nécessaire au hotplug CPU et mémoire.

Vérifications

qm config 101 | grep -E 'scsihw|scsi0|cpu|numa|agent|net0'
# scsihw: virtio-scsi-single
# scsi0: ceph-vm:vm-101-disk-1,discard=on,iothread=1,size=64G,ssd=1
# cpu: x86-64-v2-AES
qm agent 101 ping && echo agent OK
# agent OK
qm agent 101 network-get-interfaces | grep ip-address

Dans la GUI, l'onglet Summary de la VM affiche ses adresses IP quand l'agent répond.

Rollback

Tous ces réglages se modifient VM arrêtée (Hardware → Edit, ou qm set). Changer le type de CPU ou le contrôleur demande un arrêt complet (Shutdown puis Start, pas un reboot invité). Pour Windows, installer les pilotes VirtIO avant de passer un disque existant de SATA/IDE à SCSI, sinon écran bleu INACCESSIBLE_BOOT_DEVICE : revenir au bus précédent.

Pièges vus en support

  • Type host sur un cluster hétérogène : migration à chaud qui échoue ou VM qui plante après migration.
  • iothread=1 avec le contrôleur virtio-scsi-pci (non single) : l'option n'a pas l'effet attendu.
  • Discard non coché : le stockage fin (Ceph, ZFS, LVM-thin) ne récupère jamais l'espace libéré par l'invité.
  • Cache writeback activé « pour la performance » sur un stockage sans protection : risque de perte de données à la coupure.
  • Agent coché dans Proxmox mais non installé dans l'invité : sauvegardes sans gel du système de fichiers, arrêts qui expirent.
  • VM surdimensionnée en vCPU : latences d'ordonnancement supérieures au gain.

Quand ouvrir un ticket iTop

VM lente malgré ces réglages, migration à chaud refusée pour cause de CPU, choix du niveau x86-64-v3/v4 à valider : P3. Joindre qm config 101, pveversion -v, le nœud et le stockage concernés.

Ouvrir un ticket iTop

Pour aller plus loin