Mémoire VM
Lorsque vous créez une machine virtuelle, une quantité fixe de mémoire est allouée à la machine virtuelle. Vous pouvez utiliser le contrôle dynamique de la mémoire (DMC) pour améliorer l’utilisation de la mémoire physique dans votre environnement XenServer. DMC est une fonctionnalité de gestion de la mémoire qui permet la réallocation dynamique de la mémoire entre les machines virtuelles.
XenCenter fournit un affichage graphique de l’utilisation de la mémoire dans son onglet Mémoire. Pour plus d’informations, consultez la documentation XenCenter.
Dynamic Memory Control (DMC) offre les avantages suivants :
-
Vous pouvez ajouter ou supprimer de la mémoire sans redémarrer les machines virtuelles, offrant ainsi une expérience fluide à l’utilisateur.
-
Lorsque les hôtes sont pleins, le DMC vous permet de démarrer davantage de machines virtuelles sur ces hôtes, réduisant ainsi proportionnellement la quantité de mémoire allouée aux machines virtuelles en cours d’exécution.
Qu’est-ce que Dynamic Memory Control (DMC) ?
XenServer DMC fonctionne en ajustant automatiquement la mémoire des machines virtuelles en cours d’exécution, en maintenant la quantité de mémoire allouée à chaque machine virtuelle entre les valeurs de mémoire minimale et maximale spécifiées, en garantissant les performances et en permettant une plus grande densité de machines virtuelles par hôte.
Sans DMC, lorsqu’un hôte est plein, le démarrage de machines virtuelles supplémentaires échoue avec des erreurs de « mémoire insuffisante ». Pour réduire l’allocation de mémoire existante des machines virtuelles et faire de la place pour davantage de machines virtuelles, modifiez l’allocation de mémoire de chaque machine virtuelle, puis redémarrez la machine virtuelle. Lorsque vous utilisez DMC, XenServer tente de récupérer de la mémoire en réduisant automatiquement l’allocation de mémoire actuelle des machines virtuelles en cours d’exécution dans les plages de mémoire définies. XenServer tente de récupérer de la mémoire même lorsque l’hôte est plein.
Remarques :
Dynamic Memory Control n’est pas pris en charge avec les machines virtuelles dotées d’un GPU virtuel.
Le concept de plage dynamique
Pour chaque machine virtuelle, l’administrateur peut définir une plage de mémoire dynamique. La plage de mémoire dynamique est la plage dans laquelle de la mémoire peut être ajoutée/supprimée de la machine virtuelle sans nécessiter de redémarrage. Lorsqu’une machine virtuelle est en cours d’exécution, l’administrateur peut ajuster la plage dynamique. XenServer garantit toujours de maintenir la quantité de mémoire allouée à la machine virtuelle dans la plage dynamique. Par conséquent, l’ajuster pendant que la machine virtuelle est en cours d’exécution peut amener XenServer à ajuster la quantité de mémoire allouée à la machine virtuelle. Le cas le plus extrême est celui où l’administrateur définit le min/max dynamique à la même valeur, forçant XenServer à s’assurer que cette quantité de mémoire est allouée à la machine virtuelle. Si de nouvelles machines virtuelles doivent démarrer sur des hôtes « complets », les machines virtuelles en cours d’exécution voient leur mémoire « compressée » pour en démarrer de nouvelles. La mémoire supplémentaire requise est obtenue en pressant proportionnellement les machines virtuelles existantes en cours d’exécution dans leurs plages dynamiques prédéfinies
La console DMC vous permet de configurer les niveaux de mémoire minimum et maximum dynamiques, en créant une plage de mémoire dynamique (DMR) dans laquelle la machine virtuelle fonctionne.
-
Mémoire minimale dynamique : limite de mémoire inférieure que vous affectez à la machine virtuelle.
-
Limite supérieure dynamique : limite de mémoire supérieure que vous affectez à la machine virtuelle.
Par exemple, si la mémoire minimale dynamique a été définie sur 512 Mo et que la mémoire maximale dynamique a été définie sur 1 024 Mo, cela donne à la machine virtuelle une plage de mémoire dynamique (DMR) de 512 à 1 024 Mo, au sein de laquelle elle fonctionne. XenServer garantit de toujours attribuer de la mémoire à chaque machine virtuelle dans le DMR spécifié lors de l’utilisation de DMC.
Le concept de plage statique
De nombreux systèmes d’exploitation pris en charge par XenServer ne « comprennent » pas totalement la notion d’ajout ou de suppression dynamique de mémoire. Par conséquent, XenServer doit déclarer la quantité maximale de mémoire qu’une machine virtuelle est invitée à consommer au moment de son redémarrage. La déclaration de la quantité maximale de mémoire permet au système d’exploitation invité de dimensionner ses tables de pages et autres structures de gestion de la mémoire en conséquence. Cela introduit le concept d’une plage de mémoire statique dans XenServer. La plage de mémoire statique ne peut pas être ajustée lorsque la machine virtuelle est en cours d’exécution. Pour une chaussure particulière, la plage dynamique est limitée de manière à être toujours contenue dans cette plage statique. Le minimum statique (la limite inférieure de la plage statique) protège l’administrateur et est défini sur la quantité de mémoire minimale que le système d’exploitation peut exécuter avec XenServer.
Remarque :
Nous vous recommandons de ne pas modifier le niveau minimum statique car le niveau minimum statique est défini au niveau pris en charge par système d’exploitation. Consultez le tableau des contraintes de mémoire pour plus de détails.
La définition d’un niveau maximum statique supérieur à un maximum dynamique vous permet d’allouer plus de mémoire à une machine virtuelle à l’avenir sans redémarrer la machine virtuelle.
Comportement DMC
Compression automatique des machines virtuelles
-
Si DMC n’est pas activé, lorsque les hôtes sont pleins, les nouveaux démarrages de machines virtuelles échouent avec des erreurs de « mémoire insuffisante ».
-
Lorsque DMC est activé, même lorsque les hôtes sont pleins, XenServer tente de récupérer de la mémoire en réduisant l’allocation de mémoire des machines virtuelles en cours d’exécution dans les plages dynamiques définies. De cette manière, les machines virtuelles en cours d’exécution sont compressées proportionnellement à la même distance entre le minimum dynamique et le maximum dynamique pour toutes les machines virtuelles de l’hôte
Lorsque DMC est activé
-
Lorsque la mémoire de l’hôte est abondante : toutes les machines virtuelles en cours d’exécution reçoivent leur niveau de mémoire maximale dynamique
-
Lorsque la mémoire de l’hôte est rare : toutes les machines virtuelles en cours d’exécution reçoivent leur niveau de mémoire minimum dynamique.
Lorsque vous configurez DMC, n’oubliez pas que l’allocation d’une petite quantité de mémoire à une machine virtuelle peut avoir un impact négatif sur celle-ci. Par exemple, si vous allouez trop peu de mémoire :
-
L’utilisation du contrôle dynamique de la mémoire pour réduire la quantité de mémoire physique disponible pour une machine virtuelle peut entraîner un ralentissement de son redémarrage. De même, si vous allouez trop peu de mémoire à une machine virtuelle, elle peut démarrer lentement.
-
La définition de la mémoire dynamique minimale d’une machine virtuelle trop faible peut entraîner de mauvaises performances ou des problèmes de stabilité au démarrage de la machine virtuelle.
Comment fonctionne DMC ?
Grâce à DMC, il est possible de faire fonctionner une machine virtuelle invitée selon l’un des deux modes suivants :
-
Mode cible : l’administrateur spécifie une cible de mémoire pour l’invité. XenServer ajuste l’allocation de mémoire du client pour atteindre la cible. La spécification d’une cible est utile dans les environnements de serveurs virtuels et dans les situations où vous savez exactement quelle quantité de mémoire vous souhaitez qu’un invité utilise. XenServer ajuste l’allocation de mémoire du client pour atteindre la cible que vous spécifiez.
-
Mode plage dynamique : l’administrateur spécifie une plage de mémoire dynamique pour l’invité. XenServer sélectionne une cible dans la plage et ajuste l’allocation de mémoire du client pour atteindre la cible. La spécification d’une plage dynamique est utile dans toutes les situations où vous souhaitez que XenServer répartisse la mémoire hôte de manière dynamique en réponse à l’évolution du nombre d’invités ou à la modification de la pression de la mémoire hôte. XenServer sélectionne une cible dans la plage et ajuste l’allocation de mémoire du client pour atteindre la cible.
Remarque :
Il est possible de passer du mode cible au mode plage dynamique à tout moment pour tout invité en cours d’exécution. Spécifiez une nouvelle cible ou une nouvelle plage dynamique, et XenServer s’occupe du reste.
Contraintes de mémoire
XenServer permet aux administrateurs d’utiliser toutes les opérations de contrôle de la mémoire avec n’importe quel système d’exploitation client. Toutefois, XenServer applique la contrainte d’ordre des propriétés de mémoire suivante pour tous les invités :
0 < memory-static-min <= memory-dynamic-min <= memory-dynamic-max <= memory-static-max
XenServer permet aux administrateurs de modifier les propriétés de la mémoire client en fonction de toutes les valeurs qui répondent à cette contrainte, sous réserve de contrôles de validation. Cependant, en plus de la contrainte précédente, nous ne prenons en charge que certaines configurations de mémoire invité pour chaque système d’exploitation pris en charge. L’éventail des configurations prises en charge dépend du système d’exploitation invité utilisé. XenServer n’empêche pas les administrateurs de configurer les invités pour dépasser la limite prise en charge. Toutefois, il est conseillé aux clients de conserver les propriétés de mémoire dans les limites prises en charge pour éviter les problèmes de performances ou de stabilité. Pour obtenir des instructions détaillées sur les limites de mémoire minimale et maximale pour chaque système d’exploitation pris en charge, voir Prise en charge des systèmes d’exploitation invités.
Avertissement :
Lors de la configuration de la mémoire invité, nous vous conseillons de NE PAS dépasser la quantité maximale de mémoire physique adressable par votre système d’exploitation. La définition d’un maximum de mémoire supérieur à la limite prise en charge par le système d’exploitation peut entraîner des problèmes de stabilité chez votre invité.
Le minimum dynamique doit être d’au moins 75 % du maximum statique pour tous les systèmes d’exploitation pris en charge. Une limite inférieure peut entraîner des problèmes de stabilité. Les administrateurs sont invités à calibrer soigneusement la taille de leurs machines virtuelles et à s’assurer que leur ensemble d’applications de travail fonctionne de manière fiable au minimum dynamique.
Commandes xe CLI
Afficher les propriétés de mémoire statique d’une machine virtuelle
-
Recherchez l’UUID de la machine virtuelle requise :
xe vm-list <!--NeedCopy-->
-
Notez l’uuid, puis exécutez la commande
param-name=memory-static
xe vm-param-get uuid=uuid param-name=memory-static-{min,max} <!--NeedCopy-->
Par exemple, ce qui suit affiche les propriétés de mémoire maximale statique pour la machine virtuelle dont l’UUID commence par ec77 :
xe vm-param-get uuid= \ ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \ param-name=memory-static-max; 268435456 <!--NeedCopy-->
L’exemple montre que la mémoire statique maximale pour cette machine virtuelle est de 268 435 456 octets (256 Mo).
Afficher les propriétés de mémoire dynamique d’une machine virtuelle
Pour afficher les propriétés de mémoire dynamique, suivez la procédure ci-dessus mais utilisez la commande param-name=memory-dynamic
:
-
Recherchez l’UUID de la machine virtuelle requise :
xe vm-list <!--NeedCopy-->
-
Notez l’uuid, puis exécutez la commande
param-name=memory-dynamic
:xe vm-param-get uuid=uuid param-name=memory-dynamic-{min,max} <!--NeedCopy-->
Par exemple, ce qui suit affiche les propriétés de mémoire maximale dynamique pour la machine virtuelle dont l’UUID commence par ec77
xe vm-param-get uuid= \ ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 \ param-name=memory-dynamic-max; 134217728 <!--NeedCopy-->
L’exemple montre que la mémoire maximale dynamique pour cette machine virtuelle est de 134 217 728 octets (128 Mo).
Mise à jour des propriétés de mémoire
Avertissement :
Utilisez le bon ordre lorsque vous définissez les paramètres minimum/maximum statiques/dynamiques. En outre, vous ne devez pas invalider la contrainte suivante :
0 < memory-static-min <= memory-dynamic-min <= memory-dynamic-max <= memory-static-max
Mettez à jour la plage de mémoire statique d’une machine virtuelle :
xe vm-memory-static-range-set uuid=uuid min=value max=value
<!--NeedCopy-->
Mettez à jour la plage de mémoire dynamique d’une machine virtuelle :
xe vm-memory-dynamic-range-set \
uuid=uuid min=value \
max=value
<!--NeedCopy-->
La spécification d’une cible est utile dans les environnements de serveurs virtuels et dans toutes les situations où vous savez exactement quelle quantité de mémoire vous souhaitez qu’un invité utilise. XenServer ajuste l’allocation de mémoire du client pour atteindre la cible que vous spécifiez. Par exemple :
xe vm-memory-target-set target=value vm=vm-name
<!--NeedCopy-->
Mettez à jour toutes les limites de mémoire (statique et dynamique) d’une machine virtuelle :
xe vm-memory-limits-set \
uuid=uuid \
static-min=value \
dynamic-min=value \
dynamic-max=value static-max=value
<!--NeedCopy-->
Remarques :
- Pour allouer une quantité spécifique de mémoire à une machine virtuelle qui ne change pas, définissez Dynamic Maximum et Dynamic Minimum sur la même valeur.
- Vous ne pouvez pas augmenter la mémoire dynamique d’une machine virtuelle au-delà du maximum statique.
- Pour modifier le maximum statique d’une machine virtuelle, vous devez arrêter la machine virtuelle.
Mettre à jour les propriétés de mémoire individuelles
Avertissement :
Ne modifiez pas le niveau minimum statique car il est défini au niveau pris en charge par système d’exploitation. Pour plus d’informations, voir Contraintes de mémoire.
Mettez à jour les propriétés de mémoire dynamique d’une machine virtuelle.
-
Recherchez l’UUID de la machine virtuelle requise :
xe vm-list <!--NeedCopy-->
-
Notez l’uuid, puis utilisez la commande
memory-dynamic-{min,max}=value
xe vm-param-set uuid=uuid memory-dynamic-{min,max}=value <!--NeedCopy-->
L’exemple suivant modifie le maximum dynamique à 128 Mo :
xe vm-param-set uuid=ec77a893-bff2-aa5c-7ef2-9c3acf0f83c0 memory-dynamic-max=128MiB
<!--NeedCopy-->