
Dans cet article, nous allons parler des compteurs de performance de la mémoire vive (RAM) dans vSphere.
Il semble que la mémoire soit plus claire que le processeur : si des problÚmes de performance surviennent sur la VM, il est difficile de ne pas les remarquer. Cependant, une fois qu'ils apparaissent, il est beaucoup plus compliqué de les résoudre. Mais procédons étape par étape.
Un peu de théorie
La mémoire vive des machines virtuelles provient de la mémoire du serveur sur lequel les VMs fonctionnent. C'est assez évident :). Si la mémoire vive du serveur est insuffisante pour toutes les demandes, ESXi commence à appliquer des techniques d'optimisation de la consommation de mémoire (memory reclamation techniques). Sinon, les systÚmes d'exploitation des VMs tomberaient avec des erreurs d'accÚs à la RAM.
Les techniques à appliquer sont décidées par ESXi en fonction de la charge de la mémoire vive :
Ătat de la mĂ©moire
Limite
Actions
Couverture d'ombre du soleil
400 % de minFree
Une fois la limite supérieure atteinte, les grandes pages de mémoire sont divisées en petites (TPS fonctionne en mode standard).
Effacer
100 % de minFree
Les grandes pages de mémoire sont divisées en petites, la TPS fonctionne de maniÚre forcée.
Soft
64 % de minFree
TPS + Balloon
Difficile
32 % de minFree
TPS + Compress + Swap
Faible
16 % de minFree
Compress + Swap + Block
minFree est la mémoire vive nécessaire au fonctionnement de l'hyperviseur.
Jusqu'Ă ESXi 4.1 inclus, le minFree par dĂ©faut Ă©tait fixe â 6 % de la capacitĂ© de mĂ©moire vive du serveur (ce pourcentage pouvait ĂȘtre modifiĂ© via l'option Mem.MinFreePct sur ESXi). Dans les versions plus rĂ©centes, en raison de l'augmentation des volumes de mĂ©moire sur les serveurs, le minFree est dĂ©sormais calculĂ© en fonction de la capacitĂ© de la mĂ©moire de l'hĂŽte, et non comme une valeur fixe en pourcentage.
La valeur de minFree (par défaut) est calculée comme suit :
Pourcentage de mémoire réservé pour minFree
Plage de mémoire
6%
0-4 Go
4%
4-12 Go
2%
12-28 Go
1%
Mémoire restante
Par exemple, pour un serveur avec 128 Go de RAM, la valeur de MinFree serait la suivante :
MinFree = 245,76 + 327,68 + 327,68 + 1024 = 1925,12 Mo = 1,88 Go
La valeur réelle peut différer de quelques centaines de Mo, cela dépend du serveur et de la mémoire vive.
Pourcentage de mémoire réservé pour minFree
Plage de mémoire
Valeur pour 128 Go
6%
0-4 Go
245,76 Mo
4%
4-12 Go
327,68 Mo
2%
12-28 Go
327,68 Mo
1%
Mémoire restante (100 Go)
1024 Mo
En gĂ©nĂ©ral, pour les environnements de production, seul un Ă©tat Ă©levĂ© peut ĂȘtre considĂ©rĂ© comme normal. Pour les environnements de test et de dĂ©veloppement, les Ă©tats clair / doux peuvent ĂȘtre acceptables. Si la mĂ©moire vive restante sur l'hĂŽte est infĂ©rieure Ă 64 % de MinFree, il est certain que les VMs qui fonctionnent dessus rencontrent des problĂšmes de performance.
Dans chaque état, des techniques spécifiques de reclamation de mémoire sont appliquées, commençant par le TPS, qui impacte pratiquement pas la performance des VM, jusqu'au Swapping. Je vais vous en dire plus à ce sujet.
Transparent Page Sharing (TPS). Le TPS est, en gros, la déduplication des pages de mémoire vive des machines virtuelles sur le serveur.
ESXi recherche des pages de mĂ©moire vive identiques des machines virtuelles, en calculant et en comparant la somme de contrĂŽle des pages, et supprime les duplicatas de pages en les remplaçant par des rĂ©fĂ©rences Ă une seule et mĂȘme page dans la mĂ©moire physique du serveur. En consĂ©quence, la consommation de mĂ©moire physique est rĂ©duite et il est possible d'atteindre un certain surallocation de mĂ©moire pratiquement sans baisse de performance.

Ce mĂ©canisme ne fonctionne que pour des pages de mĂ©moire de taille 4 Ko (petites pages). Les pages de 2 Mo (grandes pages) ne sont mĂȘme pas tentĂ©es d'ĂȘtre dĂ©dupliquĂ©es par l'hyperviseur : la probabilitĂ© de trouver des pages identiques de cette taille est faible.
Par défaut, ESXi alloue de la mémoire aux grandes pages. La fragmentation des grandes pages en petites pages commence lorsque le seuil de l'état High est atteint et se produit de maniÚre obligatoire quand l'état Clear est atteint (voir le tableau des états de l'hyperviseur).
Cependant, si vous souhaitez que le TPS commence Ă fonctionner sans attendre le remplissage de la mĂ©moire de l'hĂŽte, vous devez dĂ©finir la valeur dans les options avancĂ©es ESXi âMem.AllocGuestLargePageâ Ă 0 (par dĂ©faut 1). L'allocation de grandes pages de mĂ©moire pour les machines virtuelles sera alors dĂ©sactivĂ©e.
Depuis dĂ©cembre 2014, dans toutes les versions d'ESXi, le TPS entre les VM est dĂ©sactivĂ© par dĂ©faut, car une vulnĂ©rabilitĂ© a Ă©tĂ© trouvĂ©e, permettant thĂ©oriquement d'accĂ©der Ă la mĂ©moire d'une autre VM depuis une seule VM. Plus de dĂ©tails ici. Je n'ai pas rencontrĂ© d'informations sur la mise en Ćuvre pratique de l'exploitation de la vulnĂ©rabilitĂ© TPS.
La politique du TPS est contrĂŽlĂ©e via l'option avancĂ©e âMem.ShareForceSaltingâ dans ESXi :
0 â TPS Inter-VM. Le TPS fonctionne pour les pages de diffĂ©rentes VM ;
1 â TPS pour les VM avec la mĂȘme valeur âsched.mem.pshare.saltâ dans le VMX ;
2 (par dĂ©faut) â TPS Intra-VM. Le TPS fonctionne pour les pages Ă l'intĂ©rieur d'une VM.
Il a clairement du sens de dĂ©sactiver les grandes pages et d'activer le TPS Inter-VM sur des bancs d'essai. Cela peut aussi ĂȘtre utilisĂ© pour des environnements avec un grand nombre de VM similaires. Par exemple, sur des environnements VDI, les Ă©conomies de mĂ©moire physique peuvent atteindre des dizaines de pourcents.
Memory Ballooning. Le Ballooning n'est plus une technique de gestion de la mĂ©moire virtuelle aussi inoffensive et transparente pour le systĂšme d'exploitation que le TPS. Mais avec une utilisation appropriĂ©e, il est possible de vivre et mĂȘme de travailler avec le Ballooning.
Avec les VMware Tools, un pilote spécial appelé Balloon Driver (ou vmmemctl) est installé sur la VM. Lorsque l'hyperviseur manque de mémoire physique et passe en état Soft, l'ESXi demande à la VM de restituer la mémoire RAM inutilisée via ce Balloon Driver. Ce dernier fonctionne au niveau du systÚme d'exploitation et demande de la mémoire libre. L'hyperviseur voit quelles pages de mémoire physique sont occupées par le Balloon Driver, retire de la mémoire à la machine virtuelle et la renvoie à l'hÎte. Il n'y a pas de problÚmes de fonctionnement du systÚme d'exploitation, car au niveau du systÚme d'exploitation, la mémoire est occupée par le Balloon Driver. Par défaut, le Balloon Driver peut récupérer jusqu'à 65 % de la mémoire de la VM.
Si les VMware Tools ne sont pas installés sur la VM ou si le Ballooning est désactivé (ce que je ne recommande pas, mais cela existe :), l'hyperviseur passe immédiatement à des techniques de prélÚvement de mémoire plus rigoureuses. Conclusion : assurez-vous que les VMware Tools sont installés sur la VM.

Le fonctionnement du Balloon Driver peut ĂȘtre vĂ©rifiĂ© depuis le systĂšme d'exploitation via VMware Tools..
Compression de mĂ©moire. Cette technique est appliquĂ©e lorsque l'ESXi atteint l'Ă©tat Hard. Comme son nom l'indique, l'ESXi essaie de compresser des pages de mĂ©moire RAM de 4 Ko Ă 2 Ko, libĂ©rant ainsi un peu d'espace dans la mĂ©moire physique du serveur. Cette technique augmente considĂ©rablement le temps d'accĂšs au contenu des pages de mĂ©moire de la VM, car la page doit d'abord ĂȘtre dĂ©compressĂ©e. Parfois, il n'est pas possible de compresser toutes les pages, et le processus lui-mĂȘme prend un certain temps. Par consĂ©quent, cette technique n'est pas trĂšs efficace en pratique.
Swap de mémoire. AprÚs une courte phase de Compression de mémoire, l'ESXi passe pratiquement inévitablement (si les VMs n'ont pas été déplacées vers d'autres hÎtes ou ne sont pas éteintes) au Swap. Et si la mémoire restante est trÚs faible (état Bas), l'hyperviseur cesse également d'allouer des pages de mémoire à la VM, ce qui peut provoquer des problÚmes dans les systÚmes d'exploitation invités de la VM.
Voici comment fonctionne l'Ă©change. Lorsqu'une machine virtuelle est allumĂ©e, un fichier avec l'extension .vswp est créé pour elle. Sa taille est Ă©gale Ă la mĂ©moire vive non rĂ©servĂ©e de la VM : c'est la diffĂ©rence entre la mĂ©moire configurĂ©e et la mĂ©moire rĂ©servĂ©e. Lorsque l'Ă©change est actif, ESXi dĂ©charge les pages de mĂ©moire de la machine virtuelle dans ce fichier et commence Ă travailler avec lui au lieu de la mĂ©moire physique du serveur. Bien sĂ»r, cette "mĂ©moire" est plusieurs ordres de grandeur plus lente que la vĂ©ritable mĂ©moire, mĂȘme si le fichier .vswp se trouve sur un stockage rapide.
Contrairement Ă Ballooning, oĂč des pages non utilisĂ©es sont retirĂ©es Ă la VM, lors de l'Ă©change, des pages qui sont activement utilisĂ©es par le systĂšme d'exploitation ou les applications Ă l'intĂ©rieur de la VM peuvent ĂȘtre dĂ©placĂ©es sur le disque. En consĂ©quence, la performance de la VM chute jusqu'Ă devenir complĂštement gelĂ©e. La VM fonctionne formellement et peut au moins ĂȘtre correctement arrĂȘtĂ©e depuis le systĂšme d'exploitation. Si vous ĂȘtes patient đ
Si la VM a commencé à utiliser l'échange, c'est une situation anormale qu'il est préférable d'éviter autant que possible.
Les principaux compteurs de performance de la mémoire de la machine virtuelle
Nous sommes enfin arrivés au principal. Pour surveiller l'état de la mémoire dans la VM, il existe les compteurs suivants :
Actif â indique le volume de mĂ©moire vive (Ko) auquel la VM a eu accĂšs lors de la pĂ©riode de mesure prĂ©cĂ©dente.
Utilisation â mĂȘme chose que Active, mais en pourcentage de la mĂ©moire vive configurĂ©e de la VM. CalculĂ© selon la formule suivante : active Ă· taille de la mĂ©moire vive configurĂ©e de la machine virtuelle.
Une forte utilisation et activité ne sont pas toujours des indicateurs de problÚmes de performance de la VM. Si la VM utilise agressivement la mémoire (au moins, y accÚde), cela ne signifie pas qu'il lui manque de la mémoire. C'est plutÎt un signal pour examiner ce qui se passe dans le systÚme d'exploitation.
Il existe une alarme standard pour l'utilisation de la mémoire pour la VM :

PartagĂ© â volume de mĂ©moire vive de la VM, dĂ©dupliquĂ©e Ă l'aide de TPS (Ă l'intĂ©rieur de la VM ou entre les VMs).
AccordĂ© â volume de mĂ©moire physique de l'hĂŽte (Ko) qui a Ă©tĂ© allouĂ© Ă la VM. Inclut la mĂ©moire partagĂ©e.
ConsommĂ© (AccordĂ© â PartagĂ©) â volume de mĂ©moire physique (Ko) que la VM consomme de l'hĂŽte. N'inclut pas la mĂ©moire partagĂ©e.
Si une partie de la mémoire de la VM est fournie non à partir de la mémoire physique de l'hÎte, mais à partir d'un fichier de swap ou de la mémoire retirée à la VM via le Balloon Driver, ce volume n'est pas inclus dans les valeurs Accordé et Consommé.
Des valeurs élevées pour Granted et Consumed sont tout à fait normales. Le systÚme d'exploitation prend progressivement de la mémoire au niveau de l'hyperviseur et ne la restitue pas. Avec le temps, pour une VM en fonctionnement actif, les valeurs de ces compteurs approchent le volume de mémoire configurée et y demeurent.
ZĂ©ro - volume de la mĂ©moire vive de la VM (Ko), qui contient des zĂ©ros. Cette mĂ©moire est considĂ©rĂ©e par l'hyperviseur comme libre et peut ĂȘtre attribuĂ©e Ă d'autres machines virtuelles. Une fois que le systĂšme d'exploitation invitĂ© a Ă©crit quelque chose dans cette mĂ©moire mise Ă zĂ©ro, elle passe Ă Consumed et ne revient plus.
Reserved Overhead - volume de la mĂ©moire vive de la VM (Ko) rĂ©servĂ© par l'hyperviseur pour le fonctionnement de la VM. C'est un petit volume, mais il doit absolument ĂȘtre disponible sur l'hĂŽte, sinon la VM ne dĂ©marrera pas.
Balloon - volume de la mémoire vive (Ko) prélevé sur la VM à l'aide du Balloon Driver.
Compressed - volume de la mĂ©moire vive (Ko) qui a pu ĂȘtre compressĂ©.
Swapped - volume de la mémoire vive (Ko) qui, en raison du manque de mémoire physique sur le serveur, a été déplacé sur le disque.
Balloon et les autres compteurs des techniques de récupération de mémoire sont à zéro.
Voici à quoi ressemble le graphique avec les compteurs de mémoire d'une VM fonctionnant normalement avec 150 Go de mémoire vive.

Sur le graphique ci-dessous, la VM présente des problÚmes évidents. En dessous du graphique, il est clair que toutes les techniques de gestion de mémoire décrites ont été utilisées pour cette VM. Le Balloon pour cette VM est nettement supérieur à Consumed. En fait, la VM est plus probablement morte que vivante.

ESXTOP
Comme pour le CPU, si nous voulons évaluer rapidement la situation sur l'hÎte, ainsi que sa dynamique par intervalles de 2 secondes, il est conseillé d'utiliser ESXTOP.
L'écran ESXTOP pour la mémoire est appelé avec la touche « m » et ressemble à ceci (les champs B,D,H,J,K,L,O ont été sélectionnés) :

Les paramÚtres suivants seront intéressants pour nous :
Mem overcommit avg - la valeur moyenne de sur-allocation de mĂ©moire sur l'hĂŽte sur 1, 5 et 15 minutes. Si elle est supĂ©rieure Ă zĂ©ro, cela peut ĂȘtre un motif d'examen de la situation, mais ce n'est pas toujours un indicateur de problĂšme.
Dans les lignes PMEM/MB et VMKMEM/MB - informations sur la mémoire physique du serveur et la mémoire disponible pour le VMkernel. De ce qui est intéressant, on peut voir la valeur minfree (en Mo), l'état de la mémoire de l'hÎte (dans notre cas, élevé).
Dans la ligne NUMA/MB on peut voir la rĂ©partition de la mĂ©moire vive selon les nĆuds NUMA (sockets). Dans cet exemple, la rĂ©partition est inĂ©gale, ce qui n'est pas vraiment idĂ©al.
Voici les statistiques globales du serveur concernant les techniques de récupération de mémoire :
PSHARE/MO â c'est la statistique TPS ;
SWAP/MO â la statistique d'utilisation du Swap ;
ZIP/MO â la statistique de compression des pages mĂ©moire ;
MEMCTL/MO â la statistique d'utilisation du Balloon Driver.
Pour chaque VM, nous pourrions ĂȘtre intĂ©ressĂ©s par les informations suivantes. J'ai cachĂ© les noms des VM pour ne pas dĂ©ranger le public :). Si la mĂ©trique ESXTOP est similaire au compteur dans vSphere, je fournis le compteur correspondant.
MEMSZ â volume de la mĂ©moire configurĂ© sur la VM (Mo).
MEMSZ = GRANT + MCTLSZ + SWCUR + untouched.
GRANT â Granted en Mo.
TCHD â Actif en Mo.
MCTL? â si le Balloon Driver est installĂ© sur la VM.
MCTLSZ â Balloon en Mo.
MCTLGT â volume de mĂ©moire vive (Mo) qu'ESXi souhaite retirer de la VM via le Balloon Driver (Memctl Target).
MCTLMAX â volume maximal de mĂ©moire vive (Mo) qu'ESXi peut retirer de la VM via le Balloon Driver.
SWCUR â volume actuel de mĂ©moire vive (Mo) allouĂ© Ă la VM Ă partir du fichier Swap.
SWGT â volume de mĂ©moire vive (Mo) qu'ESXi souhaite allouer Ă la VM Ă partir du fichier Swap (Swap Target).
Avec ESXTOP, on peut également voir des informations plus détaillées sur la topologie NUMA de la VM. Pour cela, il faut sélectionner les champs D,G :

NHN â Noeuds NUMA sur lesquels la VM est situĂ©e. On peut ainsi remarquer immĂ©diatement les VM larges qui ne tiennent pas sur un seul noeud NUMA.
NRMEM â combien de mĂ©gaoctets de mĂ©moire la VM prend depuis un noeud NUMA distant.
NLMEM â combien de mĂ©gaoctets de mĂ©moire la VM prend depuis un noeud NUMA local.
N%L â pourcentage de mĂ©moire de la VM sur le noeud NUMA local (si infĂ©rieur Ă 80 % â des problĂšmes de performance peuvent survenir).
Mémoire sur l'hyperviseur
Alors que les compteurs de CPU de l'hyperviseur ne sont généralement pas trÚs intéressants, la situation avec la mémoire est différente. Une utilisation élevée de la mémoire sur la VM ne signifie pas toujours un problÚme de performance, mais une utilisation élevée de la mémoire sur l'hyperviseur déclenche les techniques de gestion de la mémoire et cause des problÚmes de performance sur la VM. Il faut surveiller les alarmes d'utilisation de la mémoire de l'hÎte et éviter que les VM n'entrent dans le Swap.


Unsquer
Si la VM est entrĂ©e dans le Swap, ses performances diminuent fortement. Les traces de Ballooning et de compression disparaissent rapidement aprĂšs l'apparition de mĂ©moire vive libre sur l'hĂŽte, mais la machine virtuelle ne se dĂ©pĂȘche pas de revenir du Swap Ă la mĂ©moire vive du serveur.
Jusqu'Ă la version ESXi 6.0, la seule mĂ©thode fiable et rapide pour sortir une VM du Swap Ă©tait le redĂ©marrage (plus prĂ©cisĂ©ment, l'arrĂȘt/redĂ©marrage du conteneur). Ă partir de la version ESXi 6.0, une mĂ©thode, bien que non officielle, mais fonctionnelle et fiable, a Ă©tĂ© introduite pour sortir une VM du Swap. Lors d'une des confĂ©rences, j'ai eu l'occasion de discuter avec l'un des ingĂ©nieurs de VMware en charge de l'ordonnanceur CPU. Il a confirmĂ© que cette mĂ©thode est tout Ă fait opĂ©rationnelle et sĂ»re. Ă notre expĂ©rience, il n'y a eu aucun problĂšme Ă ce sujet.
Commandes pour sortir une VM du Swap Duncan Epping. Je ne vais pas répéter une description détaillée, je vais simplement donner un exemple de son utilisation. Comme vous pouvez le voir sur la capture d'écran, aprÚs un certain temps, la commande mentionnée fait disparaßtre le Swap de la VM.

Conseils pour gérer la mémoire vive sur ESXi
Enfin, voici quelques conseils qui vous aideront à éviter des problÚmes de performance des VM dus à la mémoire vive :
- Ăvitez la sursouscription de la mĂ©moire vive dans les clusters de production. Il est prĂ©fĂ©rable de toujours avoir environ 20-30 % de mĂ©moire libre dans le cluster, afin que le DRS (et l'administrateur) ait de la marge de manĆuvre, et que lors de la migration des VM, celles-ci ne tombent pas dans le Swap. N'oubliez pas non plus la rĂ©serve pour la tolĂ©rance aux pannes. C'est dĂ©sagrĂ©able lorsqu'un serveur tombe en panne et que les VM redĂ©marrĂ©es par HA se retrouvent dans le Swap.
- Dans des infrastructures avec une haute consolidation, essayez de NE PAS créer de VM avec plus de la moitié de la mémoire de l'hÎte. Cela aidera le DRS à répartir sans problÚme les machines virtuelles entre les serveurs du cluster. Cette rÚgle, bien sûr, n'est pas universelle :).
- Surveillez l'alarme d'utilisation de la mémoire de l'hÎte.
- N'oubliez pas d'installer VMware Tools sur les VM et de ne pas désactiver le Ballooning.
- Envisagez d'activer l'Inter-VM TPS et de désactiver les Large Pages dans les environnements VDI et de test.
- Si une VM rencontre des problĂšmes de performance, vĂ©rifiez si elle utilise de la mĂ©moire d'un nĆud NUMA distant.
- Sortez les VM du Swap aussi vite que possible ! Par ailleurs, si une VM est dans le Swap, la SAN souffre pour des raisons évidentes.
C'est tout ce que j'avais à dire sur la mémoire vive. Ci-dessous, des articles sur le sujet pour ceux qui souhaitent approfondir. Le prochain article sera dédié au stockage.
Liens utiles
Source : habr.com
