Créer une VM optimisée : VirtIO SCSI single, iothread, discard, CPU type, NUMA¶
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 :
- General : nœud
pve01, VM ID101, nomsrv-app01. - 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.
- System : Machine
q35, BIOSOVMF (UEFI), Add EFI Disk surceph-vm, Pre-Enroll keys coché, Add TPM (v2.0) pour Windows 11. SCSI ControllerVirtIO SCSI single, Qemu Agent coché. - Disks : Bus
SCSI, stockageceph-vm, taille ; cocher Discard, IO thread, SSD emulation (case Advanced). CacheDefault (No cache). - CPU : Sockets
1, Cores4, Typex86-64-v2-AES(ou le niveau validé). Cocher Enable NUMA si plus d'un socket. - Memory : 8192 Mo ; Ballooning Device laissé actif.
- Network : bridge
vmbr0, VLAN Tag, ModelVirtIO (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
hostsur un cluster hétérogène : migration à chaud qui échoue ou VM qui plante après migration. iothread=1avec le contrôleurvirtio-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
writebackactivé « 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.