XenServer

Mémoire de VM

Lorsque vous créez une VM, une quantité fixe de mémoire lui est allouée. 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®. Le DMC est une fonctionnalité de gestion de la mémoire qui permet la réaffectation dynamique de la mémoire entre les VM.

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.

Le contrôle dynamique de la mémoire (DMC) offre les avantages suivants :

  • Vous pouvez ajouter ou supprimer de la mémoire sans redémarrer les VM, offrant ainsi une expérience utilisateur fluide.

  • Lorsque les hôtes sont pleins, le DMC vous permet de démarrer plus de VM sur ces hôtes, en réduisant proportionnellement la quantité de mémoire allouée aux VM en cours d’exécution.

Qu’est-ce que le contrôle dynamique de la mémoire (DMC) ?

Le DMC de XenServer fonctionne en ajustant automatiquement la mémoire des VM en cours d’exécution, en maintenant la quantité de mémoire allouée à chaque VM entre des valeurs de mémoire minimale et maximale spécifiées, garantissant les performances et permettant une plus grande densité de VM par hôte.

Sans DMC, lorsqu’un hôte est plein, le démarrage de VM supplémentaires échoue avec des erreurs de « mémoire insuffisante ». Pour réduire l’allocation de mémoire existante des VM et faire de la place pour d’autres VM, modifiez l’allocation de mémoire de chaque VM, puis redémarrez la VM. Lorsque le DMC est utilisé, XenServer tente de récupérer de la mémoire en réduisant automatiquement l’allocation de mémoire actuelle des VM en cours d’exécution dans leurs 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 :

Le contrôle dynamique de la mémoire n’est pas pris en charge avec les VM qui ont un GPU virtuel.

Le concept de plage dynamique

Pour chaque VM, l’administrateur peut définir une plage de mémoire dynamique. La plage de mémoire dynamique est la plage dans laquelle la mémoire peut être ajoutée/supprimée de la VM sans nécessiter de redémarrage. Lorsqu’une VM 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 VM dans la plage dynamique. Par conséquent, l’ajustement de cette plage pendant l’exécution de la VM peut amener XenServer à ajuster la quantité de mémoire allouée à la VM. Le cas le plus extrême est celui où l’administrateur définit les valeurs min/max dynamiques à la même valeur, forçant XenServer à s’assurer que cette quantité de mémoire est allouée à la VM. Si de nouvelles VM doivent démarrer sur des hôtes « pleins », la mémoire des VM en cours d’exécution est « compressée » pour démarrer les nouvelles. La mémoire supplémentaire requise est obtenue en compressant proportionnellement les VM existantes en cours d’exécution dans leurs plages dynamiques prédéfinies.

Le DMC vous permet de configurer des niveaux de mémoire minimum et maximum dynamiques – créant une plage de mémoire dynamique (DMR) dans laquelle la VM fonctionne.

  • Mémoire minimale dynamique : Une limite de mémoire inférieure que vous attribuez à la VM.

  • Limite supérieure dynamique : Une limite de mémoire supérieure que vous attribuez à la machine virtuelle.

Par exemple, si la mémoire minimale dynamique était définie à 512 Mo et la mémoire maximale dynamique à 1 024 Mo, cela donne à la machine virtuelle une plage de mémoire dynamique (DMR) de 512 à 1024 Mo, dans laquelle elle fonctionne. XenServer garantit toujours d’attribuer à chaque machine virtuelle de la mémoire dans sa DMR spécifiée 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 entièrement 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 au sein de XenServer. La plage de mémoire statique ne peut pas être ajustée lorsque la machine virtuelle est en cours d’exécution. Pour un démarrage particulier, la plage dynamique est contrainte 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 la plus faible avec laquelle le système d’exploitation peut fonctionner avec XenServer.

Remarque :

Nous vous recommandons de ne pas modifier le niveau minimum statique, car il 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.

Définir 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 de la DMC

Compression automatique des machines virtuelles

  • Si la DMC n’est pas activée, lorsque les hôtes sont pleins, les démarrages de nouvelles machines virtuelles échouent avec des erreurs de « mémoire insuffisante ».

  • Lorsque la DMC est activée, 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 leurs 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 sur l’hôte.

Lorsque la DMC est activée

  • 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 minimale dynamique.

Lorsque vous configurez la DMC, n’oubliez pas qu’allouer seulement une petite quantité de mémoire à une machine virtuelle peut avoir un impact négatif sur celle-ci. Par exemple, allouer 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 VM peut entraîner un redémarrage lent. De même, si vous allouez trop peu de mémoire à une VM, elle peut démarrer lentement.

  • Définir le minimum de mémoire dynamique pour une VM trop bas peut entraîner des problèmes de performances ou de stabilité lors du démarrage de la VM.

Comment fonctionne le DMC ?

En utilisant le DMC, il est possible d’exploiter une machine virtuelle invitée dans l’un des deux modes suivants :

  1. Mode Cible : L’administrateur spécifie une cible de mémoire pour l’invité. XenServer ajuste l’allocation de mémoire de l’invité 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 la quantité de mémoire que vous souhaitez qu’un invité utilise. XenServer ajuste l’allocation de mémoire de l’invité pour atteindre la cible que vous spécifiez.

  2. 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 de l’invité pour atteindre la cible. La spécification d’une plage dynamique est utile dans toute situation où vous souhaitez que XenServer repartitionne dynamiquement la mémoire de l’hôte en réponse à un nombre changeant d’invités ou à une pression de mémoire hôte changeante. XenServer sélectionne une cible dans la plage et ajuste l’allocation de mémoire de l’invité 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 invité. Cependant, XenServer applique la contrainte d’ordre de propriété 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 mémoire des invités à toute valeur satisfaisant cette contrainte, sous réserve de vérifications de validation. Cependant, en plus de la contrainte précédente, nous ne prenons en charge que certaines configurations de mémoire invitée pour chaque système d’exploitation pris en charge. La plage de 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 qu’ils dépassent la limite prise en charge. Cependant, il est conseillé aux clients de maintenir les propriétés de mémoire dans les limites prises en charge afin d’éviter les problèmes de performances ou de stabilité. Pour des directives détaillées sur les limites de mémoire minimale et maximale pour chaque système d’exploitation pris en charge, consultez Prise en charge des systèmes d’exploitation invités.

Avertissement :

Lors de la configuration de la mémoire invitée, nous vous conseillons de NE PAS dépasser la quantité maximale de mémoire physique adressable par votre système d’exploitation. Définir 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é au sein de 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 encouragés à calibrer soigneusement la taille de leurs VM et à s’assurer que leur ensemble d’applications de travail fonctionne de manière fiable au minimum dynamique.

Commandes CLI xe

Afficher les propriétés de mémoire statique d’une machine virtuelle

  1. Recherchez l’UUID de la machine virtuelle requise :

    xe vm-list
    <!--NeedCopy-->
    
  2. 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 statique maximale 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 :

  1. Recherchez l’UUID de la machine virtuelle requise :

    xe vm-list
    <!--NeedCopy-->
    
  2. 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 dynamique maximale 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 dynamique maximale pour cette machine virtuelle est de 134 217 728 octets (128 Mo).

Mettre à jour les propriétés de mémoire

Avertissement :

Utilisez l’ordre correct lors de la définition des paramètres statiques/dynamiques minimum/maximum. De plus, vous ne devez pas invalider la contrainte suivante :

0 < memory-static-min <= memory-dynamic-min <= memory-dynamic-max <= memory-static-max

Mettre à jour la plage de mémoire statique d’une machine virtuelle :

xe vm-memory-static-range-set uuid=uuid min=value max=value
<!--NeedCopy-->

Mettre à 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 toute situation où vous savez exactement la quantité de mémoire que vous souhaitez qu’un invité utilise. XenServer ajuste l’allocation de mémoire de l’invité pour atteindre la cible que vous spécifiez. Par exemple :

xe vm-memory-target-set target=value vm=vm-name
<!--NeedCopy-->

Mettre à jour toutes les limites de mémoire (statiques et dynamiques) 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é de mémoire spécifique à une machine virtuelle qui ne change pas, définissez le maximum dynamique et le minimum dynamique à 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, consultez Contraintes de mémoire.

Mettre à jour les propriétés de mémoire dynamique d’une machine virtuelle.

  1. Recherchez l’UUID de la machine virtuelle requise :

    xe vm-list
    <!--NeedCopy-->
    
  2. 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-->
Mémoire de VM