• Aucun résultat trouvé

Illustration du ballooning [ Wal02 ]

dant, tant que l’hyperviseur ne peut identifier ces deux pages mémoire libres, il ne peut pas libérer les pages mémoire de la mémoire physique machine associées. En supposant que l’hyperviseur doit récupérer deux pages, il va donner au pilote présent dans la machine virtuelle une valeur cible de 2 pages. Après l’obtention de la taille cible du ballon, le pilote va "épingler" deux pages mémoire de la mémoire physique cliente à l’intérieur de la machine virtuelle (les deux pages mémoires "libres"). "Épingler" des pages mémoire signi- fie dans ce contexte, le fait que le système d’exploitation invité s’assure qu’elles ne soient pas accédées par une application pendant tout le processus de réclamation. Le pilote informe ensuite l’hyperviseur des pages mémoire qui ont été "épinglées" dans le but que ce dernier puisse libérer les pages mémoire physique ma- chine associées. L’hyperviseur peut récupérer en toute sécurité ces pages mémoire dans la mesure où aucun processus de la machine virtuelle n’accédera intentionnellement à ces pages. Lorsque l’hyperviseur décide de dégonfler le ballon, en fixant une taille cible du ballon plus petite, le pilote libère les pages mémoire "épinglées" au niveau de la mémoire physique cliente, les rendant à nouveau disponibles.

Le principe du ballooning expliqué, nous nous intéressons maintenant aux compteurs qui permettent de suivre son utilisation :

• Taille cible du ballon : Ce compteur permet d’obtenir la taille cible du ballon affectée à la machine virtuelle par l’hyperviseur. Il s’agit de la quantité de mémoire réclamée par l’hyperviseur, qui doit être libérée par la machine virtuelle.

• Taille du ballon : Ce compteur permet d’obtenir la mémoire physique cliente actuellement libérée par la machine virtuelle. Il s’agit des pages mémoire qui ont été "épinglées" par le driver, c’est à dire celles qui ont été swappées par la machine virtuelle et déclarées comme disponible pour l’hyperviseur. Si la taille du ballon est inférieure à la taille cible, cela signifie que le ballon est en train de se gonfler ("inflate") dans le but d’atteindre cette valeur cible. A l’inverse si la taille du ballon est supérieure à la cible, cela signifie que le ballon est en train de se dégonfler ("deflate").

Le ballooning permet de libérer de la mémoire physique machine à moindre coût. Cependant, ce mé- canisme impose l’installation d’un pilote au sein des machines virtuelles. Cette solution n’est alors pas toujours envisageable. Le mécanisme de la compression mémoire est une autre technique d’optimisation de

l’utilisation mémoire, agissant de manière plus transparente et ne nécessitant aucune installation de pilote dans les systèmes d’exploitation invités. Cette technique est expliquée dans la sous-section suivante. 3.1.2.5 Compression mémoire

En utilisant la compression mémoire [TG05], l’hyperviseur va stocker dans une zone mémoire des pages

mémoires qui auraient dû être swappées. Seules ces pages mémoires sont sujettes à la compression. L’hy- perviseur détermine si une page mémoire peut être compressée en contrôlant le taux de compression de cette dernière. La page mémoire est compressée si son taux de compression est au moins supérieur à 50%, sinon cette dernière est swappée.

Afin d’expliquer son fonctionnement, nous allons détailler les différentes étapes dans un exemple. Une machine virtuelle dispose de quatre pages mémoire physique cliente mappées sur la mémoire physique machine. L’hyperviseur a besoin d’une quantité de mémoire de 8 Kb (kilo-bytes) au niveau de la mémoire physique machine. Sans compression mémoire, deux pages seraient swappées. En effet, chaque page mé- moire ayant une taille de 4 Kb, il faut donc deux pages pour obtenir les 8 Kb. En utilisant la compression mémoire, les quatre pages mémoires seront compressées. Chaque page mémoire compressée a une taille passant de 4 Kb à 2 Kb. Pour obtenir les 8 Kb, il faut donc compresser les 4 pages mémoires (4*2 Kb). La compression mémoire est plus performante que le swapping dans la mesure où le prochain accès à la page mémoire compressée ne provoque uniquement qu’une décompression de cette dernière. Cette dé- compression reste plus rapide qu’un accès au fichier de swap dans la mesure où ce dernier implique des entrées/sorties importantes. Certes, la décompression implique une consommation processeur. Cependant, nous verrons dans la suite de cette thèse que la consommation processeur liée à cette décompression n’est pas un problème. Les compteurs qui permettent ainsi de détecter l’utilisation de la compression mémoire sont : la "mémoire compressée", qui correspond à la quantité de mémoire stockée dans le cache de com- pression ; le débit de compression mémoire exprimé en ko/s et le débit de décompression mémoire exprimé en ko/s.

Lorsque l’hyperviseur ne peut plus utiliser cette technique, le mécanisme classique du swapping est alors employé.

3.1.2.6 Swapping

Lorsqu’une machine virtuelle est démarrée, l’hyperviseur créé un fichier séparé, utilisé en cas de besoin. Ainsi, lorsque nécessaire, l’hyperviseur peut utiliser ce fichier en complément de la mémoire physique cliente en déplaçant les pages de cette mémoire dans un espace d’échange, appelé swap. Lorsque des pages mémoire sont écrites dans le swap (swap out), elles libèrent de la mémoire physique machine qui peut être utilisée pour d’autres machines virtuelles. Si une application tente d’accéder à une page mémoire swappée, l’hyperviseur déclenchera une faute de page, qui sera traitée par le système d’exploitation de la machine virtuelle. Ce dernier recherchera la page mémoire souhaitée depuis le fichier de swap (swap in). Le swapping est une technique très coûteuse en performances. En effet, au lieu d’impacter uniquement la mémoire comme c’est le cas pour le partage mémoire et le balloonning, il nécessite également l’accès au disque dur pour lire les informations stockées dans le fichier de swap. La latence correspondante peut être de quelques millisecondes, impactant donc les performances de la machine virtuelle. Cette technique est donc utilisée en dernier recours par l’hyperviseur. Les compteurs à suivre pour la détection du swapping sont la "mémoire swappée", qui correspond à la quantité de mémoire physique client actuellement écrite sur un fichier de swap (ce fichier de swap est stocké durant toute la durée d’exécution de la machine virtuelle), le taux de lecture (swapin), correspondant au taux de lecture du fichier de swap (l’information étant alors transférée depuis le fichier de swap vers la mémoire active) et le taux d’écriture (swapout), correspondant au taux d’écriture dans le fichier de swap (l’information étant alors transférée depuis la mémoire active vers le fichier de swap).

3.1. ÉTUDES DES COMPTEURS DE PERFORMANCES 47