ESXi: Occupation RAM avec VM_Windows et VM_Linux R. Babel, A. Ouadahi April 10, 2011 1
Contents 1 Introduction 3 2 TPS 3 2.1 Principe................................ 3 2.2 L'implémentation ESXi....................... 3 3 Large Pages 4 3.1 Principe................................ 4 3.2 Compatibilité avec TPS....................... 4 3.3 Conditions d'utilisation des Large Pages sous ESX........ 4 4 Conguration 5 5 Mesures expérimentales 5 6 Conclusion 7 7 Synthèse 7 7.1 Best Practices............................. 7 A Bibliographie 9 B Annexes 10 2
1 Introduction Lors des laboratoires, nous avons pu observer un comportement inattendu du mécanisme Transparent Page Sharing (TPS). Alors que sur les VM Windows XP, les eets du TPS sont notables dès leur mise en marche, il demeure presque totalement inecace sur les VM Linux (kernel 2.6.24). Pour comprendre ce phénomène nous avons commencé par étudier le fonctionnement de TPS ainsi que la gestion de la mémoire d'esxi, puis nous chercherons à déterminer les solutions d'utilisation de TPS les plus adaptées. 2 TPS 2.1 Principe Du fait des pages de mémoire read-only et du code redondant, la mémoire comporte de nombreuses pages identiques. Partant de ce constat, le TPS permet de fusionner ces pages pour gagner en espace mémoire. Ce phénomène est d'autant plus vrai dans le cas des machines virtuelles, ou plusieurs systèmes d'exploitation identiques peuvent fonctionner en simultané. 2.2 L'implémentation ESXi Lors des accès mémoire en écriture, ESX va intervenir pour tenter de partager cette page. Figure 1: Mécanisme du TPS Un hash de la page est tout d'abord eectué, puis utilisé comme clef pour chercher dans une table contenant les pages qui ont déjà été référencées. Si la valeur du hash correspond à une entrée existante, une comparaison complète de 3
leur contenus est alors eectuée, et si les deux pages sont eectivement identiques, un label copy-on-write est appliqué, et la page redondante supprimée. Le copy-on-write (COW) implique que lorsqu'une demande d'accès en écriture sur la page est faite, une copie est crée et attribuée en lieu et place de la page demandée. Si aucune correspondance n'est trouvée dans la table, une Hint Frame est créée. Si par la suite une comparaison positive avec la Hint frame est réalisée, son contenu est alors hashé à nouveau. Dans le cas ou le hash a changé, la Hint Frame est simplement supprimée. Dans le cas contraire, une comparaison complète des contenus est eectuée, et les pages sont partagées si ils sont identiques. L'overhead total du au TPS est inférieur à 0.5% de la mémoire totale du système[11]. 3 Large Pages 3.1 Principe Certaines architectures d'instructions CPU peuvent supporter plusieures tailles de pages, notament des tailles très supérieures à celle standard de 4kB. L'utilisation des Large Pages (ou Huge Pages) permet de réduire la charge du cache TLB (Translation Lookaside Buer), ce qui peut augmenter les performances jusqu'à 15%[7] pour de grandes allocations, tout en conservant un usage de la mémoire raisonable pour des petites allocations. En eet, avec l'augmentation de la taille de la mémoire, des pages plus grandes permettent de diminuer le nombre d'entrées dans le TLB, et donc de diminuer la quantité de misses. 3.2 Compatibilité avec TPS Le mécanisme de TPS a été conçu pour fonctionner avec des pages de 4kB; en eet, les probabilités de présence de pages identiques sont beaucoup plus faibles avec des Large Pages (entre 2 et 4MB). Pour parer à ce problème, VMware a fait le choix d'une stratégie pouvant donner à penser que le TPS est désactivé. En eet le TPS se contente d'analyser les Large Pages à la recherche de blocs de mémoire identiques à l'intérieur de celle ci, puis, lorsque la mémoire vient à manquer, le mécanisme de share-before-swap va casser les Large Pages en blocs de 4kB pour que TPS puisse fonctionner normalement. Il est a noté qu'à partir des versions les plus récentes d'esx 4.0, les zeroed pages (pages ne contenant que des 0), sont directement cassées en blocs de 4kB et partagées. 3.3 Conditions d'utilisation des Large Pages sous ESX ESX peut utiliser les Large Pages pour deux raisons : premièrement si l'os de la VM guest en demande l'utilisation, et deuxièmement si c'est le MMU qui le fait. Le MMU (Memory Management Unit) est responsable de l'accès à la mémoire demandée par le processeur. Il se charge notament de la translation entre adresse logique et adresse physique. De nos jours, ESX a le choix entre un MMU logiciel, ou un MMU matériel mis à disposition dans le CPU. C'est le VMM qui décide lequel choisir en fonction de la machine de l'host. Intel ore une solution de support hardware de la virtualisation du MMU sous le nom de EPT, et AMD fait de même sous le nom de RVI. La solution hardware permet d'économiser le temps CPU que le MMU software d'esx utilisait pour 4
la translation d'adresses, mais force par défaut l'utilisation des Large Pages pour des questions de performances. En eet, en hardware on accède plus souvent au TLB qu'en software, ou une partie des informations nécéssaires à la translation d'adresse sont stockées en dehors du CPU (Shadow Page Table). Les Larges Pages permettent alors de diminuer le stress sur le TLB. Des tableaux indiquant le choix par défaut du VMM selon le CPU et l'os sont disponibles en annexe (gures 5, 6 et 7). 4 Conguration Le choix par défaut du mode de MMU utilisé peut être modié de deux façons : Via vsphere, en eectuant pour la VM voulue Edit Setting, puis l'onglet Options et règler l'entrée CPU/MMU Virtualization (gure 2). Via le chier de conguration de la VM (*.vmx), à l'aide des lignes suivantes : monitor.virtual_exec = software hardware automatic monitor.virtual_mmu = software hardware automatic Les logs permettent de connaître la conguration actuelle. Figure 2: Conguration du mode de MMU sous vsphere On peut également forcer l'utilisation ou non des Large Pages, soit au niveau global via le paramètre du Mem.AllocGuestLargePage situé dans l'onglet Con- guration/logiciel/paramètres avancés/mem, soit au niveau d'une VM via le chier de conguration avec la ligne : monitor_control.disable_mmu_largepages = TRUE 5 Mesures expérimentales Nous avons procédé à des tests sur une machine avec un CPU Intel sans EPT. Nous n'avons lancé que des VM Linux (car il n'y a pas de Large Pages sous 5
Windows XP, et seul un MMU hardware permet de forcer leur utilisation), et fait varier le paramètre Mem.AllocGuestLargePage qui permet ou interdit l'utilisation des Large Pages sur toutes les VM lancées. Les résulats sont conformes à nos prédictions : sans Large Page (gure 3), on a de la mémoire partagée dès le départ, alors qu'avec Large Page (gure 4) on en a que lorsque la mémoire est overcommited (lors de nos mesure, la mémoire partagée est montée jusqu'à 1Go avec 8 VM Ubuntu congurées à 512Mo de RAM chacune). En outre, il est a noté qu'avec les Large Pages, la quantitée de mémoire partagée augmente beaucoup plus lentement, et ne prévient pas totalement le swap. Figure 3: TPS sans Large Pages 6
Figure 4: TPS avec Large Pages 6 Conclusion 7 Synthèse Les avancées dans la virtualisation matérielle on poussé VMware à modier le comportement de certaines fonctions d'esx. La documentation sur les changements eectués n'est pas forcémment très accessible, et on pourrait croire à la présence de bugs dans certaines fonctionnalités d'esx alors que leur comportement est simplement diérent. C'est l'un des défaut des solutions non Open-Source, où certains détails techniques restent opaques à l'utilisateur, comme certains détails de l'implémentation du TPS. Par exemple, durant nos recherches pour comprendre le fonctionnement de ce mécanisme, nous n'avons pas su répondre à la question suivante : Lors de l'exécution du mécanisme copy-on-write, un compteur est décrémenté pour chaque copie créée. Lorsque le compteur arrive à 1, est ce que la frame est transformée en Hint, Supprimée, ou laissée telle quelle? 7.1 Best Practices De nombreux systèmes d'exploitation (Windows Server 2003 SP1, 2008, 2008 R2, Windows XP 64 bits, Windows Vista, Windows Seven, Linux à partir du 7
noyau 2.6) sont capables de tirer partie des "super pages". Ceci peut nous permettre de choisir la bonne stratégie selon nos objectifs. On peut soit privilégier l'économie de RAM en désactivant les larges pages ce qui permettra à TPS de fonctionner normalement, soit vouloir privilègier les performances et laisser le support des Large Pages actifs (15% de performances en plus), sachant que de toute façon, TPS se mettra automatiquement en marche en cas d'overcommitment (mais son fonctionnement est dans ce cas moins ef- cace, et il est probable d'avoir tout de même du swap). Ces choix peuvent être fait soit au niveau global, soit au niveau de chaque VM (paramètres Mem.AllocGuestLargePage et monitor_control.disable_mmu_largepages). En résumé, il y a deux cas de gure, soit on veut bénécier des performances des Large Pages, auquel cas il n'y a rien à paramètrer (en sachant que seule la présence d'un MMU hardware permet de forcer l'utilisation des Large Pages pour un OS qui n'en dispose pas), soit on veut proter au maximum du mécanisme de TPS, et dans ce cas il sut de désactiver le support des Large Pages. 8
A Bibliographie References [1] Jean-Baptiste Emeriau. La gestionde la memoire dans ESX 4. 2010. url: http://wattmil.dyndns.org/technique?start=1. [2] Duncan Epping. Virtualized MMU and Transparent page sharing. 2009. url: http://www.yellow-bricks.com/2009/03/06/virtualized-mmuand-tp/. [3] Andre Leibovici. TPS, Large Memory Pages and your VDI environment. 2011. url: http://myvirtualcloud.net/?p=1797. [4] NiTRo. TPS & vmmu (le retour) - MAJ. 2010. url: http : / / www. hypervisor.fr/?p=1879. [5] NiTRo. Virtualized MMU, RVI & TPS. 2009. url: http : / / www. hypervisor.fr/?p=580. [6] Liz Stinson. esx.txt. 2004. url: http://stanford.edu/~stinson/cs240/ cs240_1/revs/esx.txt. [7] Various. Page (computer memory). 2011. url: http://en.wikipedia. org/w/index.php?title=page_(computer_memory)&oldid=420138187. [8] VMware. Large Page Performance. 2008. url: http://www.vmware.com/ files/pdf/large_pg_performance.pdf. [9] VMware. Performance Evaluation of AMD RVI Hardware Assist. 2009. url: http://www.vmware.com/pdf/rvi_performance.pdf. [10] VMware. Virtual Machine Monitor Execution Modes in VMware vsphere TM 4.0. 2009. url: http://www.vmware.com/files/pdf/perfvsphere-monitor_modes.pdf. [11] Carl A. Waldspurger. Memory Resource Management in VMware ESX Server. 2002. url: http://www.waldspurger.org/carl/papers/esxmem-osdi02.pdf. 9
B Annexes Figure 5: Technologies des processeurs AMD Opteron 10
Figure 6: Modes par défaut du VMM pour les processeurs AMD 11
Figure 7: Modes par défaut du VMM pour les processeurs Intel 12