Avant de gérer les ressources mémoire, vous devez comprendre la manière dont ESXi les virtualise et les utilise.

VMkernel gère toute la RAM physique sur l'hôte. VMkernel réserve une partie de cette RAM physique gérée à sa propre utilisation. Le reste est disponible et peut être utilisé par les machines virtuelles.

L'espace de mémoire virtuelle et physique est divisé en blocs appelés pages. Lorsque la mémoire physique est pleine, les données des pages virtuelles non présentes dans la mémoire physique sont stockées sur disque. En fonction de l'architecture du processeur, les pages sont généralement de 4 Ko ou 2 Mo. Reportez-vous à la section Attributs avancés de mémoire.

Mémoire de machine virtuelle

La consommation de mémoire de chaque machine virtuelle est basée sur sa taille configurée, plus la capacité supplémentaire de mémoire pour la virtualisation.

La taille configurée correspond à la quantité de mémoire présentée au système d'exploitation invité. Ce n'est pas pareil à la quantité de RAM physique allouée à la machine virtuelle. Celle-ci dépend des paramètres de ressource (parts, réservation, limite) et du niveau de pression mémoire sur l'hôte.

Par exemple, envisagez une machine virtuelle dont la taille configurée est de 1 Go. Au démarrage du système d'exploitation client, celui-ci détecte qu'il s'exécute sur une machine dédiée possédant 1 Go de mémoire physique. Dans certains cas, la totalité des 1 Go peut être allouée à la machine virtuelle. Dans d'autres cas, l'allocation peut être inférieure. Quelle que soit l'allocation réelle, le système d'exploitation client continue de se comporter comme s'il s'exécutait sur une machine dédiée possédant 1 Go de mémoire physique.

Parts
Spécifiez la priorité relative d'une machine virtuelle si une quantité supérieure à la réservation est disponible.
Réservation
Il s'agit d'une limite inférieure garantie pour la quantité de RAM physique réservée par l'hôte pour la machine virtuelle, même lorsque la mémoire est excessivement engagée. Définissez la réservation à un niveau permettant de garantir que la machine virtuelle dispose d'une quantité de mémoire suffisante pour s'exécuter efficacement, sans pagination excessive.

Une fois qu'une machine virtuelle a consommé toute la mémoire de la réservation, elle peut conserver cette quantité de mémoire. Celle-ci n'est pas récupérée, même si la machine virtuelle devient inactive. Il est possible que certains systèmes d'exploitation clients (notamment Linux) n'accèdent pas à la totalité de la mémoire configurée immédiatement après le démarrage. Tant que la machine virtuelle ne consomme pas toute la mémoire de sa réservation, VMkernel peut allouer toute portion inutilisée de cette réservation à d'autres machines virtuelles. Toutefois, lorsque la charge de travail de l'invité augmente et que la machine virtuelle consomme la totalité de sa réservation, elle est autorisée à conserver cette mémoire.

Limite
Il s'agit d'une limite supérieure de la quantité de RAM physique que l'hôte peut allouer à la machine virtuelle. L'allocation de mémoire de la machine virtuelle est également implicitement limitée par sa taille configurée.

Engagement excessif de mémoire

Pour chaque machine virtuelle en cours d'exécution, le système réserve la RAM physique pour la réservation de la machine virtuelle (le cas échéant) et pour son supplément de virtualisation.

La quantité totale de mémoire configurée de toutes les machines virtuelles peut être supérieure à la mémoire physique disponible sur l'hôte. Toutefois, cela ne signifie pas nécessairement que la mémoire est excessivement engagée. La mémoire est excessivement engagée lorsque l'encombrement combiné de la mémoire opérationnelle de toutes les machines virtuelles dépasse celui de la taille mémoire hôte.

Du fait des techniques de gestion de la mémoire utilisées par l'hôte ESXi, vos machines virtuelles peuvent utiliser une RAM virtuelle supérieure à la RAM physique disponible sur l'hôte. Par exemple, votre hôte peut posséder 2 Go de mémoire et exécuter quatre machines virtuelles possédant une mémoire de 1 Go chacune. Dans ce cas, la mémoire est excessivement engagée. Par exemple, si les quatre machines virtuelles sont inactives, la mémoire consommée combinée peut être bien inférieure à 2 Go. En revanche, si toutes les machines virtuelles 4 Go consomment activement la mémoire, leur encombrement mémoire peut dépasser 2 Go et l'hôte ESXi deviendra surchargé.

L'engagement excessif est justifié car, généralement, certaines machines virtuelles sont peu chargées et d'autres le sont plus. Les niveaux d'activité relatifs varient également dans le temps.

Pour améliorer l'utilisation de la mémoire, l'hôte ESXi transfère la mémoire des machines virtuelles inactives vers les machines virtuelles requérant plus de mémoire. Utilisez le paramètre Reservation ou Shares pour allouer de préférence la mémoire aux machines virtuelles importantes. Si elle n'est pas utilisée, cette mémoire reste disponible pour les autres machines virtuelles. ESXi met en œuvre divers mécanismes tels que le gonflage, le partage de mémoire, la compression de mémoire et l'échange pour offrir des performances raisonnables, même si l'hôte n'est pas fortement surchargé en mémoire.

Un hôte ESXi peut manquer de mémoire si des machines virtuelles consomment toute la mémoire réservable dans un environnement mémoire surchargé. Bien que les machines virtuelles sous tension ne soient pas concernées, une nouvelle machine virtuelle peut ne pas se mettre sous tension du fait du manque de mémoire.
Note : Toute la surcharge mémoire de la machine virtuelle est également considérée comme étant réservée.

En outre, la compression de mémoire est activée par défaut sur les hôtes ESXi afin d'améliorer les performances de la machine virtuelle lorsque la mémoire est excessivement engagée, comme décrit dans Compression de mémoire.

Partage de mémoire

Le partage de mémoire est une technique ESXi propriétaire qui peut permettre d'obtenir une meilleure densité sur un hôte.

Le partage de mémoire dépend de l'observation que plusieurs machines virtuelles peuvent exécuter des instances du même de système d'exploitation invité. Ces machines virtuelles peuvent posséder les mêmes applications ou composants chargés, ou contenir des données communes. Dans de tels cas, un hôte utilise une technique de partage de pages propriétaires transparentes pour éliminer les copies de pages de mémoire redondantes. Grâce au partage de mémoire, une charge de travail s'exécutant sur une machine virtuelle consomme généralement moins de mémoire qu'elle ne le ferait si elle s'exécutait sur une machine physique. En conséquence, des niveaux plus élevés d'engagement excessif peuvent être pris en charge efficacement. La quantité de mémoire économisée grâce au partage de mémoire dépend de si la charge de travail se compose de machines presque identiques qui peuvent libérer de la mémoire. Une charge de travail plus variée peut entraîner un pourcentage d'économies de mémoire inférieur.

Note :

En raison de problèmes de sécurité, le partage de pages transparentes entre machines virtuelles est désactivé par défaut et le partage de pages est limité au partage de mémoire entre machines virtuelles. Le partage de pages ne se produit pas sur plusieurs machines virtuelles mais uniquement au sein d'une machine virtuelle. Consultez Partage de mémoire entre les machines virtuelles pour plus d'informations.

Virtualisation de mémoire

La virtualisation introduit un niveau de mappage mémoire supplémentaire. ESXi peut donc gérer la mémoire de manière efficace dans toutes les machines virtuelles.

Une partie de la mémoire physique d'une machine virtuelle peut être mappée vers des pages partagées ou vers des pages non mappées ou permutées.

Un hôte gère la mémoire virtuelle sans avoir la connaissance du système d'exploitation invité et sans interférer avec le propre sous-système de gestion de la mémoire du système d'exploitation client.

Pour chaque machine virtuelle, VMM conserve un mappage entre les pages de mémoire physique du système d'exploitation client et les pages de mémoire physique de la machine sous-jacente. (VMware fait référence aux pages physiques de l'hôte sous-jacent sous le nom de pages « machine » et aux pages physiques du système d'exploitation client sous le nom de pages « physiques ».)

Chaque machine virtuelle perçoit un espace de mémoire physique contigu, basé sur le zéro et adressable. La mémoire machine sous-jacente sur le serveur utilisé par chaque machine virtuelle n'est pas nécessairement contiguë.

Les adresses client virtuel-physique sont gérées par le système d'exploitation invité. L'hyperviseur n'est responsable que de la conversion des adresses client physique-machine. La virtualisation de mémoire selon l'approche assistée par le matériel utilise l'installation matérielle pour générer les mappages combinés avec les tables de pages de l'invité et les tables de pages intégrées gérées par l'hyperviseur.

Le diagramme illustre l'implémentation ESXi de la virtualisation de mémoire.

Figure 1. Mappage de mémoire ESXi

Ce schéma illustre l'implémentation de la virtualisation de mémoire.
  • Les cases représentent les pages et les flèches indiquent les différents mappages de mémoire.
  • Les flèches partant de la mémoire virtuelle client vers la mémoire physique client indiquent le mappage conservé par les tables de page dans le système d'exploitation client. (le mappage entre la mémoire virtuelle et la mémoire linéaire pour les processeurs à architecture x86 n'est pas indiqué).
  • Les flèches entre la mémoire physique client et la mémoire de la machine indiquent le mappage conservé par VMM.
  • Les flèches en tirets indiquent le mappage entre la mémoire virtuelle client et la mémoire machine dans les pages de table fantômes et également conservé par VMM. Le processeur sous-jacent exécutant la machine virtuelle utilise les mappages de table de page fantôme.

Virtualisation de mémoire assistée par matériel

Certains CPU, notamment les modèles AMD SVM-V et Intel Xeon 5500, fournissent une prise en charge matérielle pour la virtualisation de mémoire à l'aide de deux couches de tables de page.

Note : Dans cette rubrique, « Mémoire » peut désigner la RAM physique ou la mémoire persistante.

La première couche de tables de page stocke les translations client virtuelles-physiques ; la seconde couche de tables de page stocke les translations client physiques vers machine. Le TLB (translation look-aside buffer - Tampon de traduction) est un cache de translations conservé par le matériel de l'unité de gestion de mémoire (MMU) du processeur. Un élément non trouvé TLB est un élément non trouvé dans ce cache ; le matériel doit alors explorer la mémoire (certainement à plusieurs reprises) pour trouver la translation requise. Pour un élément non trouvé TLB d'une certaine adresse virtuelle client, le matériel consulte les deux tables de page pour convertir l'adresse virtuelle client en adresse de la machine. La première couche des tables de page est conservée par le système d'exploitation invité. VMM ne conserve que la seconde couche des tables de page.

Remarques concernant les performances

Lorsque vous utilisez l'assistance matérielle, vous éliminez le supplément de la virtualisation de mémoire logicielle. En particulier, l'assistance matérielle élimine le temps système requis pour maintenir les tables de page fantômes synchronisées avec les tables de page client. Toutefois, la latence d'élément non trouvé TLB est beaucoup plus élevée lorsque vous utilisez l'assistance matérielle. Par défaut, l'hyperviseur utilise des grandes pages dans les modes d'assistance matérielle pour réduire le coût des pertes TLB. Par conséquent les bénéfices que tire une charge de travail de l'utilisation de l'assistance matérielle dépend essentiellement du supplément entraîné par la virtualisation de mémoire lors de l'utilisation de la virtualisation de mémoire logicielle. Si une charge de travail implique une faible quantité d'activité de table de page (création de processus, mappage de la mémoire ou commutations contextuelles), la virtualisation de logiciel n'entraîne pas de supplément significatif. Inversement, les charges de travail avec un grande quantité d'activité de table de page sont susceptibles de tirer avantage de l'assistance matérielle.

Par défaut, l'hyperviseur utilise des grandes pages dans les modes d'assistance matérielle pour réduire le coût des pertes TLB. Les meilleurs performances sont obtenues en utilisant de grandes pages dans les conversions client virtuel-physique et client physique-adresse machine.

L'option LPage.LPageAlwaysTryForNPT peut modifier la stratégie d'utilisation des pages de grande taille dans les conversions invité physique-adresse machine. Pour plus d'informations, consultez Attributs avancés de mémoire.

Prise en charge des pages de grande taille

ESXi fournit une prise en charge limitée des pages de grande taille.

L'architecture x86 permet aux logiciels système d'utiliser des pages de 1 Go, 2 Mo et 4 Ko. Les pages de 4 Ko sont des pages de petite taille, tandis que les pages de 1 Go et de 2 Mo sont des pages de grande taille. Les pages de grande taille allègent la pression du TLB (Translation Lookaside Buffer) et réduisent le coût de parcours des tables de page, ce qui a pour conséquence d'améliorer les performances de la charge de travail.

Dans les environnements virtualisés, les pages de grande taille peuvent être utilisées par l'hyperviseur et le système d'exploitation invité de manière indépendante. Si l'impact le plus important sur les performances a lieu lorsque les pages de grande taille sont utilisées par l'invité et l'hyperviseur, dans la plupart des cas une amélioration est observée lorsque les pages de grande taille sont utilisées uniquement au niveau de l'hyperviseur.

L'hyperviseur ESXi utilise par défaut des pages de 2 Mo pour la sauvegarde de la vRAM d'invité. vSphere ESXi fournit une prise en charge limitée pour la sauvegarde de la vRAM de l'invité avec les pages de 1 Go. Pour plus d'informations, reportez-vous à la section Sauvegarde de la vRAM de l'invité avec des pages de 1 Go.