Mémoire dynamique (RAM) sous Hyper-V

I. Présentation

La version 3 d’Hyper-V sortie avec Windows Server 2012 intègre une nouvelle fonctionnalité qui est l’allocation dynamique de mémoire (RAM) sur un ordinateur virtuel. En quoi ça consiste ? C’est simple, cela permet d’ajouter à un ordinateur virtuel de la mémoire vive selon ses besoins jusqu’à une certaine limite définie dans la configuration. L’ajout dynamique est en fait un ajout à chaud de mémoire sur la machine virtuelle.

Cette fonctionnalité permet de gérer plus efficacement l’allocation de mémoire sur les ordinateurs virtuels puisque sans cette fonctionnalité il faut obligatoirement éteindre l’ordinateur virtuel pour modifier la mémoire alloué. Là, tout est géré dynamiquement c’est-à-dire à chaud par le gestionnaire Hyper-V qui interagi avec les hôtes virtuels.

Hyper-V intègre cette fonctionnalité également dans Windows Server 2008 R2 avec le Service Pack 1. Les systèmes d’exploitations invités suivants sont pris en charge : Windows Server 2003 SP2, Windows Server 2003 R2 SP2, Windows Vista SP1, Windows Server 2008 SP2, Windows 7 SP1, Windows Server 2008 R2 SP1, Windows 8 et Windows Server 2012.

II. Exemple de fonctionnement

Afin que vous compreniez plus en détail comment cela fonctionne, voici un exemple illustrant l’ajout et la suppression de mémoire dynamiquement sur une VM.

Le serveur Hyper-V contient une machine virtuelle qui utilise la fonctionnalité de mémoire dynamique. Elle a 2 Go de mémoire minimale d’attribué et elle commence à saturer…

hyperv49
Heureusement, la fonctionnalité de mémoire dynamique est activée. Ainsi, Windows va avertir l’hyperviseur qu’il a besoin de mémoire supplémentaire par l’intermédiaire du pilote de mémoire dynamique : DMVSC, Dynamic Memory VSC.

Vous l’aurez compris, pour pouvoir utiliser cette fonctionnalité il faut que le système d’exploitation de l’hôte virtuel prenne en charge le pilote de mémoire dynamique compatible.

hyperv50
La machine dispose désormais de 3 Go de RAM grâce à la mémoire ajoutée à chaud. Les heures passent… le pic d’activité diminue, la charge également, la machine n’a plus besoin d’autant de mémoire.

Un signal est envoyé à l’hôte Hyper-V afin qu’il retire de la mémoire de la machine virtuelle, sauf qu’on ne peut pas enlever de la mémoire d’une machine Windows à chaud sinon on obtient un plantage avec un bel écran bleu – appelé blue screen.

Pour contrer ce problème, Microsoft a trouvé une solution de contournement. En fait, Hyper-V fait croire au système d’exploitation de la VM que la mémoire est indisponible, comme ça la VM n’utilise plus cette partie de mémoire et il est ensuite possible de la réaffecter sur une autre VM. On appelle cela de la « Memory Ballooning » c’est-à-dire de la mémoire gonflée.

La mémoire ajoutée en supplément dans la machine virtuelle c’est-à-dire 1 Go, est rendu indisponible dans la machine virtuelle pour ne plus qu’elle puisse l’utiliser. On lui laisse utilisable uniquement les 2 Go minimales.

hyperv51

III. Configuration sur une machine virtuelle

Pour activer la fonctionnalité de mémoire virtuelle sur une machine virtuelle, dans le gestionnaire Hyper-V, faites clic droit sur la VM concernée puis cliquez sur « Paramètres ». Ensuite, sur la gauche cliquez sur « Mémoire » et dans le volet de droite cochez la case à côté de « Activer la mémoire dynamique ».

Il y a alors différents champs :

- RAM minimale : Minimum de mémoire qui doit être toujours rendu disponible pour cette VM, la mémoire de la VM ne descendra pas sous cette valeur. Il s’agit de la mémoire minimum que la VM à besoin pour fonctionner.

- RAM maximale : Maximum de mémoire qui peut être affecté à la VM, la machine ne pourra pas avoir de mémoire disponible plus que la valeur que vous indiquez.

- Mémoire tampon : Cette mémoire tampon permettra d’allouer à la machine virtuelle de la mémoire très rapidement. Comment ? Grâce à une zone de mémoire pré-allouée sur chaque VM qui permet de réagir rapidement lors d’un pic de charge.

Il peut être intéressant de définir une valeur haute pour ce champ lorsque la VM fait tourner une application qui demande une quantité de RAM importante pendant un instant puis la relâche ensuite. Cela permettra de subvenir aux besoins de l’application. A l’inverse, définissez une valeur basse sur une VM si elle fait tourner une application qui cherchera toujours à utiliser le maximum de mémoire possible.

Pour déterminer cette valeur, Hyper-V utilise le pourcentage que vous lui indiquez ainsi que la quantité de mémoire utilisée à l’instant t par la machine virtuelle (Current Commit Charge). Après avoir fait un calcul, il en ressort une valeur qui correspondra alors à la mémoire tampon disponible.

- Poids de la mémoire : Permet de gérer la priorité de disponibilité de la mémoire d’une machine par rapport à l’autre, plus la priorité est haute, plus Hyper-V fera en sorte de prioriser l’allocation de mémoire pour cette machine virtuelle plutôt que pour une autre dont la priorité sera plus basse. Il est intéressant de prioriser les machines virtuelles critiques et qui ont des besoins importants en terme de mémoire.

hyperv52

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5560.Voir tous les posts

10 thoughts on “Mémoire dynamique (RAM) sous Hyper-V

  • Salut,

    J’ai rencontré une erreur windows 0xE0000100 en voulant installer windows server 2012 r2 sur un hôte virtuel.

    Le problème est que j’avais alloué seulement 512 mo de RAM et activé DMVSC (mémoire dynamique).

    Problème résolut en augmentant jusqu’a 2048 Mo de RAM.

    Donc cette gestion de la mémoire dynamique est opérationnelle seulement lorsqu’un OS est installé sur l’hôte?!

    Répondre
    • Salut Steve,

      C’est possible qu’il faut que l’hôte soit installé car c’est le pilote DMVSC de l’OS de l’hôte virtuel qui initie la demande de mémoire, or, si l’OS n’est pas encore installé cela ne peut pas fonctionner correctement. Cela me semble logique vu comment fonctionne la mémoire dynamique, après, dommage que ça ne fonctionne pas dès la création.

      Bonne journée !
      Florian

      Répondre
  • bonjour
    article très interressant…
    du coup je me demande s’il vaut mieux utliser la mémoire dynamique ou statique.
    y a t’il des contre indications à l’utilisation de cette option? je ne parle pas de l’interet de mettre plus de VM car cela je l’ai bien compris.
    et que ce passe t’il lorsque les VM demandent plus de mémoire que celle physique? comment se passe l’arbritage?
    Merci

    Répondre
  • Bonjour Gérard,

    Hyper-V reste maître de l’allocation dynamique donc logiquement il ne pourra pas donner plus de mémoire qu’il en a, il effectuera un arbitrage selon le paramètre « Poids de la mémoire » qui définit une priorité pour la machine.

    Ainsi, si l’hyperviseur est juste en mémoire il va prioriser l’allocation de mémoire aux VMs que vous souhaitez prioriser selon la configuration définie.

    La mémoire dynamique me semble intéressante dans le cas d’un serveur qui peut avoir des pics de charge qui entraîne un besoin en mémoire supplémentaire mais éphémère.

    En espérant avoir répondu à vos questions.
    Florian

    Répondre
  • Bonjour,
    J’aurais besoin d’un avis d’expert comme vous suite à un problème de gestion de mémoire que je rencontre sur un serveur virtuel Hyper-V. J’ai une application Java que j’ai limité en allocation mémoire (paramètres MMX) à 512 Mo max. Sur un serveur windows 2008 R2 ou 2012 R2 physique, je paramètre fonctionne correctement et lorsque je suis ma consommation mémoire je la vois monter jusqu’à 512 puis redescendre lorsque le garbage collector entre ne oeuvre (la mémoire « commit » respecte ce niveau max et la restitution se fait correctement en entrainant la baisse du % de RAM utilisée sur le serveur). Sur un environnement HyperV, la restitution de mémoire ne semble pas fonctionner et le % de mémoire utilisée reste bloquée à son maximum. Y a t-il un mécanisme de gestion de la RAM qui est différent entre un serveur physique sous 2008 R2 ou 2012 R2 et un environnement équivalent sous HyperV svp ?

    Répondre
    • Bonsoir,

      Je ne suis pas un expert mais, étant l’auteur de cet article, je vais tenter de vous aider 🙂
      L’utilisation d’Hyper-V implique l’installation des Services d’intégrations au sein des VMs afin d’optimiser la relation entre l’hyperviseur et l’OS de la VM. Est-ce que cette installation est bien effectuée ?

      Quand vous dîtes que le % reste bloqué à son maximum, vous voyez cela sur l’OS invité ou dans la console de gestion Hyper-V ?

      Florian

      Répondre
  • Bonjour,

    Super article!

    Existe-il la même option sous ESx 5.0?

    Merci d’avance et salutations.

    Répondre
  • C’est curieux! plus je supprime des VM sur mon Hyper-V, plus mon serveur physique baisse de performance et semble manquer de mémoire! Tout se passe comme si les mémoires allouées à mes VM ne sont pas libérées après chaque suppression. Ai-je manqué quelque chose dans la suppression de mes VM sur Hyper-V win2k12?

    Répondre
  • Bonjour
    C’est pour la 1ére fois que j’installe Hyper-V sur Windows 10. L’installation c’est très bien passée mais pour la suite l’erreur ci dessous m’empêche de poursuivre. Avec Windows 10 Professionnel – 4Go de RAM – 64 Bits.

    -L’application a rencontré une erreur lors de la tentative
    de modification de l’état de « TEST_VIRTU »
    -Echec du démarrage de « TEST_VIRTU ».
    -Mémoire insuffisante dans le système pour démarrer l’ordinateur virtuel « TEST_VIRTU »
    -Echec de l’initialisation de la mémoire: Mémoire insuffisante (0x8007000E)
    Pourriez vous m’aider ?
    Merci d’avance.

    Répondre
    • Bonjour
      C’est pour la 1ére fois que j’installe Hyper-V sur Windows 10. L’installation c’est très bien passée mais pour la suite l’erreur ci dessous m’empêche de poursuivre. Avec Windows 10 Professionnel – 4Go de RAM – 64 Bits.

      -L’application a rencontré une erreur lors de la tentative
      de modification de l’état de « TEST_VIRTU »
      -Echec du démarrage de « TEST_VIRTU ».
      -Mémoire insuffisante dans le système pour démarrer l’ordinateur virtuel « TEST_VIRTU »
      -Echec de l’initialisation de la mémoire: Mémoire insuffisante (0x8007000E)
      Pourriez vous m’aider ?
      Merci d’avance.
      j’ai
      le meme probleme

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.