1 votes

Comment savoir si mes serveurs doivent utiliser des pages énormes (taille des pages mémoire)

Nous avons plusieurs serveurs en cluster, et nous voulons savoir en général dans quels cas nous devons configurer des pages énormes ?

J'ai aussi quelques questions

  1. Est-ce que "la taille de page mémoire" est égale aux pages énormes ?

Dans mon serveur linux, j'ai entré la commande suivante pour vérifier la taille de page mémoire par défaut

grep Hugepagesize /proc/meminfo

Hugepagesize: 2048 kB

getconf PAGESIZE

4096
  1. mais comme vous pouvez le voir, nous obtenons des résultats différents ici, pourquoi ?

  2. Quels sont les risques lors de l'utilisation de pages énormes ?

  3. Est-ce que Désactiver la Transparence de la Page Énorme signifie désactiver l'option HUGE PAGES ?

6voto

Simon Richter Points 3161

Les hugepages sont intéressantes lorsque les applications ont besoin de grandes mappings sur lesquelles elles effectueront des accès aléatoires, car c'est le pire cas possible pour le Tampon de Recherche de Traduction (TLB). Vous échangez la granularité du mapping contre les entrées du TLB.

Les pages, y compris les hugepages, ne peuvent être mapées que sur un bloc de mémoire physique de la même taille et aligné sur cette taille. Ainsi, une hugepage de 2 MB doit être mappée sur une limite de 2MB dans la RAM physique, et une hugepage de 1 Go doit être mappée sur une limite de 1 Go, car les bits inférieurs adressent les données à l'intérieur de la page, et aucun décalage ne peut être ajouté ici.

Cela signifie que les hugepages sont généralement réservées au démarrage du système, lorsque la mémoire physique n'est pas encore fragmentée. Les applications qui prennent en charge les hugepages peuvent utiliser hugetlbfs pour les allouer.

Vous devez décider avec un paramètre du noyau si les hugepages doivent avoir une taille de 2MB ou de 1GB, vous ne pouvez pas les mélanger. Les pages normales de 4 Ko sont toujours disponibles.

Le cas d'utilisation le plus courant est celui des machines virtuelles (qemu/kvm peut utiliser les hugepages), où cela permet de conserver l'ensemble de la cartographie mémoire de la machine virtuelle dans un petit nombre d'entrées TLB, qui ne sont donc jamais invalidées, de sorte que les accès mémoire à l'intérieur de la machine virtuelle nécessitent une recherche dans la table des pages seulement dans le contexte invité.

Certains systèmes de bases de données prennent également en charge les hugepages, mais cela n'est généralement utile que si vous travaillez avec de grands ensembles de données et d'index.

Les questions :

  1. Il y a des pages normales (4 Ko) et des pages énormes (2 MB ou 1 GB). Lorsque vous interrogez la taille de la page, vous obtenez la taille des pages normales, lorsque vous interrogez la taille de la huge page, vous obtenez le réglage des huge pages. Les pages normales et énormes peuvent être utilisées en parallèle, mais vous ne pouvez pas mélanger différentes tailles de huge pages.

  2. Vous obtenez des résultats différents car ce sont deux choses différentes. La taille des pages normales est fixée dans le matériel, donc ce n'est pas un réglage.

  3. Les hugepages doivent être allouées tôt, et bien que la mémoire soit techniquement "libre", elle ne peut être utilisée que pour les applications qui prennent en charge les hugepages, donc toutes sauf ces applications auront moins de mémoire disponible. Cela n'est généralement pas un problème, car vous utiliseriez les hugepages sur des machines dédiées aux applications gourmandes en mémoire comme les machines virtuelles ou les bases de données.

  4. Les hugepages transparentes essaient de rendre la mémoire disponible sous forme de tampons et de caches (contrairement au point 3), et essaient de donner des hugepages aux applications qui mapent de grands blocs de mémoire, de sorte que les applications qui ne prennent pas en charge les hugepages puissent en profiter -- fondamentalement, une application qui demande un bloc de mémoire de 2MB/1GB se verra attribuer une hugepage si possible. Que cela améliore ou affecte les performances dépend de vos applications. Si vous avez une application prenant en charge les hugepages et que vous souhaitez attribuer la mémoire manuellement, vous devez désactiver THP, tandis qu'un système ayant une application de base de données qui ne comprend pas les hugepages en bénéficierait probablement.

3voto

John Mahowald Points 28597

Les cas d'utilisation évidents des grosses pages surviennent lorsque les tables de pages (visibles dans /proc/meminfo) deviennent des dizaines de gigaoctets. Cela signifie une mémoire importante et des surcharges CPU juste pour suivre votre mémoire. Cela se produit avec des morceaux de mémoire gigantesques, un grand nombre de processus, ou les deux. Souvent dans les applications de base de données.

Les grosses pages réduisent considérablement cette surcharge car une seule entrée de table de pages adresse maintenant beaucoup plus de mémoire, disons 2 048 Ko au lieu de 4 Ko. (Il existe différentes tailles sur d'autres plates-formes, AIX sur POWER prend en charge des grosses pages de 16 Mo par exemple.)

Les grosses pages sur Linux ne peuvent pas être utilisées pour le cache de fichiers et sont ennuyeuses et inefficaces pour quelques Mo à malloc() pour une mémoire non partagée. Ainsi, l'administrateur doit allouer des pools de grosses pages qui ne peuvent être utilisés que pour certaines fins. C'est un inconvénient de l'utilisation de grosses pages.

Les grosses pages transparentes (THP) tentent de rendre l'administration moins ennuyeuse en "défragmentant" automatiquement la mémoire contiguë en grosses pages. L'idée était que cela rend les grosses pages pré-allouées optionnelles. Les avantages sont très spécifiques à la charge de travail, il est possible qu'il consomme trop de CPU pour en valoir la peine. Désactiver THP signifie que vous pouvez toujours allouer des grosses pages manuellement. Parfois, il est utile de désactiver THP et de mettre simplement les segments de mémoire partagée de la base de données en grosses pages.

Un dernier reproche à propos des grosses pages Linux : je trouve leur gestion ennuyeuse.

  • La mémoire partagée utilise une interface, mais pour les autres, vous utilisez une bibliothèque et un système de fichiers hugetlbfs.
  • Vous pouvez "gaspiller" de la mémoire en allouant trop de grosses pages et ne pas configurer votre application pour les utiliser.
  • Le nombre de pages doit être adapté à la taille de chaque hôte, car c'est un nombre de pages et pas un pourcentage de mémoire.
  • La capacité à allouer des grosses pages est souvent limitée à un groupe, passer d'un utilisateur de base de données à un autre peut entraîner un gaspillage de mémoire surprise.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X