VMware ESXi est un hyperviseur qui gère efficacement l'utilisation de vos ressources système (mémoire vive, processeur, ...).
VMware ESXi possède plusieurs mécanismes pour gérer la mémoire efficacement et pour récupérer de la mémoire lorsque cela est nécessaire.
Dans la suite de cet article, vous pourrez comprendre différentes notions et les différents mécanismes qui permettent à VMware ESXi d'utiliser au mieux votre mémoire vive physique et de récupérer de la mémoire vive lorsque cela est nécessaire :
Notez que les mécanismes cités précédemment sont utilisés l'un après l'autre pour utiliser au mieux la mémoire vive de votre hôte VMware ESXi. Puis, pouvoir récupérer de plus en plus de mémoire vive sur celui-ci lorsque cela est nécessaire.
VMware ESXi est un hyperviseur qui permet de faire de l'engagement excessif de mémoire (ou "Memory Overcommitment" en anglais).
Ce qui signifie que vous pouvez allouer plus de mémoire vive à vos machines virtuelles que la quantité de mémoire vive disponible sur votre hôte VMware ESXi.
Dans le 1er schéma (A), la mémoire est sous-engagée (memory-undercommitted).
En effet, dans l'exemple ci-dessous :
Si vous démarrez les 2 VMs possédant 4 Go de mémoire vive allouée chacune, la mémoire allouée sera de 8 Go.
Ce qui est inférieur la quantité de mémoire vive (16 Go) disponible sur cet hôte.
La mémoire est donc sous-engagée (memory-undercommitted) et cela ne pose donc aucun problème.
Dans le 2ème schéma (B), il peut arrive que la mémoire soit engagée de manière excessive (memory-overcommitted).
En effet, dans l'exemple ci-dessous :
Si vous démarrez les 3 machines virtuelles et que celles-ci sont donc sous tension simultanément, vous vous retrouverez donc avec une allocation de mémoire vive de 20 Go, alors que votre hôte VMware ESXi n'en possède réellement que 20 Go.
Si vos machines virtuelles n'utilisent pas beaucoup de mémoire vive actuellement, il est fort possible que la mémoire soit tout de même sous-engagée (memory-undercommitted). Ce qui ne pose aucun problème.
En fait, la mémoire est excessivement engagée (memory-overcommitted) à partir du moment où la mémoire vive consommée (réellement utilisée) par vos machines virtuelles dépasse la quantité de mémoire vive disponible physiquement sur votre hôte VMware ESXi.
L'engagement excessif de mémoire est une fonctionnalité très intéressante de VMware ESXi, car lorsque vous allouez de la mémoire vive à des machines virtuelles, la mémoire vive est très souvent sous-utilisée.
En effet :
Bref, si la mémoire devient excessivement engagée, VMware ESXi récupèrera la mémoire vive inutilisée par vos machines virtuelles pour la transférer aux machines virtuelles qui en ont réellement besoin.
Ce qui permet à vos machines virtuelles de continuer à fonctionner, mais vous verrez dans la suite de cet article que cela signifiera aussi une dégradation des performances de celles-ci.
N'oubliez pas que vous pouvez réserver de la mémoire vive, gérer la priorité d'allocation de la mémoire vive et limiter l'utilisation de la mémoire vive par vos machines virtuelles grâce aux paramètres "Réservation", "Parts" et "Limite" pour éviter que vos machines virtuelles ne manquent de mémoire vive dans le cas où la mémoire vive de votre hôte VMware ESXi serait engagée de manière excessive (memory-overcommitted).
Pour savoir comment faire, allez sur cette page : VMware ESXi 6.7 - Configurer les paramètres des machines virtuelles - Mémoire (RAM).
Néanmoins, attention à ne pas réserver trop de mémoire vive au risque que cela ait l'effet inverse.
En effet, la mémoire réservée (même lorsque celle-ci n'est pas utilisée par la VM concernée) ne pourra pas être récupérée par VMware ESXi pour la transférer à une autre machine virtuelle qui aurait peut-être plus besoin à un moment donné.
Source : Engagement excessif de mémoire - VMware Docs.
Grâce à une technique de partage de pages propriétaires transparentes (proprietary Transparent Page Sharing / TPS), VMware ESXi peut utiliser efficacement votre mémoire vive physique via son VMkernel.
En effet, lorsque cette fonctionnalité TPS est activée (ce qui n'est pas le cas par défaut), le VMkernel de VMware ESXi est en mesure de détecter les pages mémoire qui sont identiques (en vert sur le schéma ci-dessous) et permet ainsi à votre ou vos machines virtuelles de les partager.
Ce qui permet d'économiser beaucoup de mémoire si vos machines virtuelles utilisent le même système d'exploitation, les mêmes applications et/ou les mêmes données (documents, images, ...).
Notez que TPS peut aussi bien partager les pages mémoire sur une seule machine virtuelle qu'avec plusieurs machines virtuelles dont la charge de travail est similaire.
Bien entendu, ce partage de pages mémoire n'est possible qu'en lecture seule, ce qui signifie que si une des machines virtuelles concernées doit modifier une page mémoire (en rouge sur le schéma ci-dessous), le VMkernel de VMware ESXi créera une copie de cette page mémoire (grâce au copy-on-write) et modifiera cette copie privée.
Ce qui correspond à la page hachurée en rouge sur le schéma ci-dessous. Les autres machines virtuelles continueront d'utiliser la page mémoire partagée d'origine accessible en lecture seule.
Important : pour des raisons de sécurité, le partage de pages transparent (Transparent Page Sharing / TPS) est désactivé par défaut depuis la version 5.0 de VMware ESXi pour le TPS sur une machine virtuelle et depuis la version 6.0 pour le TPS inter-VMs.
Notez que le partage de pages transparent (Transparent Page Sharing / TPS) n'est pris en charge que pour les petites pages mémoire (4 Ko).
En effet :
Pour les pages de 2 Mo, lorsque cela est nécessaire, il arrive que VMware ESXi fragmente celles-ci pour générer des pages mémoire de 4 Ko et ainsi pouvoir les partager via TPS.
Pour finir, gardez en tête que ce partage de pages transparent (Transparent Page Sharing / TPS), s'il est activé, ne se produira que lorsque la mémoire vive libre de votre hôte VMware ESXi deviendra trop faible.
Ce qui évite de consommer des ressources système inutilement lorsque la mémoire vive de votre hôte VMware ESXi est actuellement sous-utilisée.
Si vous souhaitez réactiver le partage de pages transparent (Transparent Page Sharing / TPS) sous VMware ESXi, accédez à son interface web et allez dans : Hôte -> Gérer -> Système -> Paramètres avancés.
Puis, cherchez le paramètre avancé "Mem.ShareForceSalting".
Comme vous pouvez le voir dans sa description, le partage de pages entre des VMs n'est possible que lorsque la valeur de ce paramètre est :
Dans le cas contraire, le partage de pages ne sera pas autorisé entre les VMs. Ce qui est le cas par défaut (2 = désactivé).
Sélectionnez ce paramètre avancé et cliquez sur "Modifier l'option".
Indiquez la valeur "0" pour autoriser le partage de pages transparent (Transparent Page Sharing / TPS) entre toutes les machines virtuelles de votre hôte VMware ESXi et cliquez sur Enregistrer.
Le message "Mem.ShareForceSalting a été modifié" apparait.
Important : pour que le partage de pages transparent (Transparent Page Sharing / TPS) soit activé sur les machines virtuelles actuellement sous tension, vous devrez :
- éteindre celles-ci, puis les démarrer à nouveau.
- ou les migrer vers un autre hôte VMware ESXi et les migrer ensuite vers l'hôte VMware ESXi source, si vous souhaitez le faire sans éteindre vos machines virtuelles.
Sources :
Grâce au pilote de gonflage de mémoire (vmmemctl) aussi appelé "Ballooning" en anglais, votre hyperviseur VMware ESXi sera en mesure de récupérer de la mémoire vive en demandant à vos machines virtuelles de libérer les pages mémoire qu'elles n'utilisent pas ou plus en ce moment.
Dans le schéma "a" ci-dessous :
Dans le schéma "b" ci-dessous, cela montre ce qui se passe lorsque VMware ESXi demande à cette machine virtuelle quelles pages mémoire il peut récupérer :
Ensuite, VMware ESXi redistribuera la mémoire vive récupérée aux machines virtuelles qui ont en ont actuellement besoin.
Important : pour que VMware ESXi puisse récupérer la mémoire non utilisée par vos machines virtuelles, il est impératif que les VMware Tools y soient installés.
En effet, lorsque vous installez les VMware Tools dans une machine virtuelle, vous verrez qu'un pilote de contrôle de mémoire est installé.
C'est ce pilote qui est utilisé pour le gonflage de mémoire (ballooning) décrit précédemment.
Sans ce pilote, VMware ESXi ne sera pas en mesure de récupérer la mémoire non utilisée par le système d'exploitation invité étant donné que VMware ESXi ne peut pas voir son contenu (d'un point de vue technique).
Notez que vous pouvez modifier la quantité de mémoire vive (en Mo) qui peut être réclamée par ce pilote si vous le souhaitez en configurant le paramètre "sched.mem.maxmemctl" sur la machine virtuelle souhaitée.
Vous pouvez également adapter la quantité de mémoire vive que ce pilote peut récupérer par machine virtuelle en modifiant le paramètre avancé "Mem.CtlMaxPercent".
Pour cela, allez dans "Hôte -> Gérer -> Système -> Paramètres avancés" et cherchez le paramètre "Mem.CtlMaxPercent".
Ensuite, sélectionnez-le et cliquez sur : Modifier l'option.
Indiquez le pourcentage souhaité (par défaut : 65) et cliquez sur Enregistrer.
Pour finir, gardez en tête que ce gonflage de mémoire (ballooning) ne se sera utilisé que lorsque la mémoire vive disponible sera trop faible sur votre hôte VMware ESXi malgré l'utilisation du partage de pages transparent (Transparent Page Sharing / TPS).
Source : Pilote de gonflage de mémoire - VMware Docs.
Si les mécanismes précédents (TPS et ballooning) ne permettent pas de récupérer suffisamment de mémoire vive sur votre hôte VMware ESXi, votre hyperviseur tentera de compresser les pages mémoires virtuelles.
Plus précisément, VMware ESXi tentera de compresser les pages à 2 Ko ou à une taille inférieure et stockera celles-ci dans le cache de compression de la machine virtuelle concernée.
Notez que cette compression de mémoire vive est activée par défaut sous VMware ESXi et que l'accès à de la mémoire compressée est plus rapide que l'accès à de la mémoire permutée (swap). En effet, la mémoire qui est permutée (swap) est stockée sur le disque dur.
Source : Compression de mémoire - VMware Docs.
Si les différents mécanismes de gestion de la mémoire expliqués précédemment ne permettent pas de récupérer assez de mémoire vive sur votre hyperviseur VMware ESXi, alors celui-ci utilisera l'échange système (System Swap).
Sous VMware ESXi, l'échange système (System Swap) consiste à déplacer les pages mémoire de la mémoire vive vers un fichier de swap stocké sur le disque dur de l'hôte.
Attention : cela signifie que les performances seront fortement dégradées étant donné que l'accès à un disque dur est beaucoup plus lent que l'accès à la mémoire vive. D'autant plus que VMware ESXi déplacera des pages mémoire de la machine virtuelle choisies aléatoirement.
Ce qui peut ralentir fortement ou non la machine virtuelle en fonction des pages qui ont été déplacées.
Ceci dit, d'après VMware, il n'est pas possible techniquement de savoir ce qui se trouve dans les pages d'une machine virtuelle. D'où le choix aléatoire de ces pages mémoire pour libérer rapidement de la mémoire vive.
Plus précisément, il s'agit du fichier ".wsp" créé au démarrage de chaque machine virtuelle et effacé lors de son arrêt.
Par défaut, ce fichier est stocké sur le disque dur de l'hôte dans le dossier de la machine virtuelle concernée.
Notez que vous pouvez changer l'emplacement par défaut de ce fichier swap (.vswp) de façon globale en allant dans : Hôte -> Gérer -> Système -> Echange.
Ensuite, cliquez sur : Modifier les paramètres.
Dans la fenêtre "Modifier la configuration de l'échange" qui s'affiche, vous pourrez :
Pour l'option "Banque de données", vous pourrez par exemple sélectionner une banque de données correspondant à un stockage plus rapide (tel qu'un SSD) au lieu d'un disque dur classique pour que l'accès aux fichiers de swap (.vswp) soit un peu plus rapide.
Notez que vous pouvez aussi modifier ce comportement pour chaque machine virtuelle individuellement en sélectionnant celle-ci, puis en cliquant sur : Modifier.
Ensuite, allez dans l'onglet "Options VM".
Dans la section "Avancé", vous trouverez un paramètre "Emplacement du fichier d'échange" pour lequel vous pourrez choisir entre :
Attention : si vous possédez plusieurs hôtes VMware ESXi et que vous souhaitez pouvoir migrer vos machines virtuelles d'un hôte VMware ESXi à un autre via vSphere vMotion, il est fortement conseillé de stocker le fichier d'échange (.vswp) dans une banque de données visible par les 2 hôtes VMware ESXi.
En effet, dans le cas contraire, les performances de vSphere vMotion seront dégradées, car les pages échangées avec un fichier d'échange (swap) devront être transférées via le réseau.
Pour rappel, ce mécanisme de récupération de mémoire vive est utilisé uniquement en dernier recours étant donné que cela dégradera fortement les performances des machines virtuelles concernées.
Le but étant d'éviter qu'une machine virtuelle ou que votre hôte plante suite au manque de mémoire vive sur celui-ci.
Sources :
Pour en savoir encore plus sur la gestion de la mémoire sous VMware ESXi, consultez le PDF officiel "Understanding Memory Resource Management in VMware® ESX™ Server" de VMware.
VMware 17/2/2023
VMware 2/6/2023
VMware 19/10/2022
VMware 31/3/2023
Contenu épinglé
Contact
® InformatiWeb-Pro.net - InformatiWeb.net 2008-2022 - © Lionel Eppe - Tous droits réservés.
Toute reproduction totale ou partielle de ce site est interdite et constituerait une contrefaçon sanctionnée par les articles L.335-2 et suivants du Code de la propriété intellectuelle.
Vous devez être connecté pour pouvoir poster un commentaire