Retour : Microsoft Hyper-V

Principe

Chaque VM dispose soit d'une mémoire statique (quantité fixe réservée au démarrage), soit d'une mémoire dynamique qui varie selon ses besoins. Hyper-V réserve automatiquement une part de la RAM à l'hôte (la partition parente) ; il ne suralloue pas la mémoire au-delà de la RAM physique : une VM qui ne peut obtenir sa mémoire de démarrage ne démarre pas.

Mémoire statique Mémoire dynamique
Quantité Fixe Entre un minimum et un maximum
Densité de VM Plus faible Plus forte
Prévisibilité Totale Dépend de la charge des autres VM
Usage Bases de données, applications sensibles, virtualisation imbriquée Serveurs de services, postes virtuels

Mémoire statique

Set-VMMemory -VMName SQL01 -DynamicMemoryEnabled $false -StartupBytes 16GB

💡 Depuis Windows Server 2016, la mémoire statique d'une VM peut être augmentée ou réduite à chaud si l'invité est récent (Windows 10 / Server 2016 et plus, Linux récent) : Paramètres de la VM → Mémoire pendant que la VM tourne.


Mémoire dynamique

Paramètre Rôle
RAM au démarrage Mémoire attribuée au démarrage de la VM
RAM minimale Plancher en dessous duquel Hyper-V ne récupère pas de mémoire
RAM maximale Plafond que la VM ne dépasse pas
Mémoire tampon (%) Marge ajoutée à la demande réelle de la VM (20 % par défaut)
Poids de la mémoire (priorité) Priorité de la VM quand la mémoire manque (0 à 100, 50 par défaut)
Via interface graphique

Paramètres de la VM → Mémoire → cocher Activer la mémoire dynamique, puis renseigner les valeurs. L'activation ou la désactivation se fait VM arrêtée ; les valeurs minimale et maximale peuvent être ajustées à chaud.

Via PowerShell
# Démarre à 2 Go, entre 1 Go et 8 Go, 20 % de marge, priorité haute
Set-VMMemory -VMName SRV01 -DynamicMemoryEnabled $true `
  -StartupBytes 2GB -MinimumBytes 1GB -MaximumBytes 8GB `
  -Buffer 20 -Priority 80

Get-VMMemory -VMName SRV01

💡 Pour un invité Linux, la mémoire dynamique repose sur le pilote hv_balloon (inclus dans les noyaux récents). Certains invités ne libèrent pas bien la mémoire : surveiller leur comportement après activation.

Quand éviter la mémoire dynamique


Smart Paging

Si une VM à mémoire dynamique redémarre alors que l'hôte n'a plus assez de RAM libre pour sa mémoire de démarrage (supérieure à sa mémoire minimale), Hyper-V utilise temporairement un fichier de pagination intelligente sur disque, le temps du démarrage.

# Emplacement du fichier Smart Paging (de préférence sur un SSD)
Set-VM -Name SRV01 -SmartPagingFilePath "D:\Hyper-V\SmartPaging"

💡 Smart Paging ne sert qu'au redémarrage, jamais en fonctionnement normal. S'il est utilisé souvent, l'hôte manque de RAM.


NUMA

Sur un serveur à plusieurs processeurs physiques, chaque processeur a sa propre mémoire (nœud NUMA). Une VM est plus rapide si ses vCPU et sa mémoire restent sur un seul nœud.

# Topologie NUMA de l'hôte
Get-VMHostNumaNode

# Une VM qui dépasse la taille d'un nœud reçoit une topologie NUMA virtuelle
Get-VMProcessor -VMName SQL01 | Select-Object Count, MaximumCountPerNumaNode

Le fractionnement NUMA (Paramètres Hyper-V, voir Paramétrage de base) autorise une VM à utiliser la mémoire de plusieurs nœuds : la VM démarre même si un seul nœud n'a plus assez de mémoire, au prix de performances moindres.


Surveiller la consommation

# Mémoire attribuée, demandée et état par VM
Get-VM | Select-Object Name, State, DynamicMemoryEnabled,
  @{n='Attribuee(Go)';e={[math]::Round($_.MemoryAssigned/1GB,1)}},
  @{n='Demande(Go)';e={[math]::Round($_.MemoryDemand/1GB,1)}},
  MemoryStatus

# Mémoire disponible pour les VM sur l'hôte
Get-Counter '\Hyper-V Dynamic Memory Balancer(*)\Available Memory'
Colonne / compteur Signification
MemoryAssigned Mémoire actuellement attribuée à la VM
MemoryDemand Mémoire dont la VM a besoin
MemoryStatus OK, Faible, Avertissement : la VM manque de mémoire
Available Memory Mémoire que l'hôte peut encore distribuer

Dans le Gestionnaire Hyper-V, l'onglet Mémoire en bas de la fenêtre affiche les mêmes informations pour la VM sélectionnée.


Bonnes pratiques