Article
· Nov 11, 2022 5m de lecture

Linux Transparent HugePages et l’impact sur InterSystems IRIS

** Révisé le 12 février 2018

Bien que cet article concerne InterSystems IRIS, il s’applique également aux distributions Caché, Ensemble et HealthShare.

Introduction

La mémoire est gérée en pages.  La taille de page par défaut est de 4 Ko sur les systèmes Linux.  Red Hat Enterprise Linux 6, SUSE Linux Enterprise Server 11 et Oracle Linux 6 ont introduit une méthode permettant d’augmenter la taille des pages en 2 Mo ou 1 Go en fonction de la configuration du système, connue sous le nom de HugePages.

Au début, les HugePages devaient être attribuées au démarrage et, si elles ne sont pas gérées ou calculées correctement, elles pourraient entraîner un gaspillage de ressources.  En conséquence, diverses distributions Linux ont introduit Transparent HugePages avec le noyau 2.6.38 activé par défaut.  Il s’agissait d’un moyen d’automatiser la création, la gestion et l’utilisation de HugePages.  Les versions antérieures du noyau peuvent également avoir cette fonctionnalité, mais peuvent ne pas être marquées comme [toujours] et potentiellement définies sur [madvise].

Transparent Huge Pages (THP) est un système de gestion de la mémoire Linux qui réduit la surcharge des recherches TLB (Translation Lookaside Buffer) sur les machines avec de grandes quantités de mémoire en utilisant des pages de mémoire plus grandes.  Cependant, dans les versions Linux actuelles, THP ne peut mapper que l’espace de tas et de pile de processus individuels.

Le problème

La majorité de l’allocation de mémoire dans n’importe quel système de cache est constituée des segments de mémoire partagée (pools de tampons globaux et de routine) et parce que THP ne gère pas ces segments de mémoire partagée.  Par conséquent, les THP ne sont pas utilisés pour la mémoire partagée et ne sont utilisés que pour chaque processus individuel.  Cela peut être confirmé à l’aide d’une simple commande shell.

Voici un exemple d’un système de test chez InterSystems qui montre 2 Mo de THP alloués aux processus du cache :

# grep -e AnonHugePages /proc/*/smaps | awk '{ if($2>4) print $0} ' |  awk -F  « / » '{print $0; system(« ps -fp " $3)} '

/proc/2945/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

racine 2945 1 0 2015 ?        01:35:41 /usr/sbin/rsyslogd -n

 

/proc/70937/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70937 70897 0  janv.27 pts/0 00:01:58 /bench/EJR/ycsb161b641/bin/cache WD

 

/proc/70938/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70938 70897 0  janv.27 pts/0 00:00:00 /bench/EJR/ycsb161b641/bin/cache GC

 

/proc/70939/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70939 70897 0  janv.27 pts/0 00:00:39 /bench/EJR/ycsb161b641/bin/cache JD

 

/proc/70939/smaps:AnonHugePages: 4096 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70939 70897 0  janv.27 pts/0 00:00:39 /bench/EJR/ycsb161b641/bin/cache JD

 

/proc/70940/smaps:AnonHugePages: 2048 Ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70940 70897 0  janv.27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 1

 

/proc/70941/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70941 70897 0  janv.27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 2

 

/proc/70942/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70942 70897 0  janv.27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 3

 

/proc/70943/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70943 70897 0  janv.27 pts/0 00:00:33 /bench/EJR/ycsb161b641/bin/cache SWD 7

 

/proc/70944/smaps:AnonHugePages: 2048 Ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70944 70897 0  janv.27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 4

 

/proc/70945/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70945 70897 0  janv.27 pts/0 00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 5

 

/proc/70946/smaps:AnonHugePages: 2048 ko

 

UID PID PPID C STIME TTY TIME CMD

 

root 70946 70897 0  janv.27 pts/0 00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 6

 

/proc/70947/smaps:AnonHugePages: 4096 ko

En outre, il existe des pénalités potentielles de performances sous la forme de retards d’allocation de mémoire au moment de l’exécution, en particulier pour les applications qui peuvent avoir un taux élevé de création de tâches ou de processus.

La recommandation

InterSystems recommande pour le moment de désactiver THP car le gain de performance prévu n’est pas applicable au segment de mémoire partagée IRIS et le potentiel d’un impact négatif sur les performances dans certaines applications.

Vérifiez si Transparent HugePages est activé sur votre système Linux en exécutant les commandes suivantes :

Pour les noyaux Red Hat Enterprise Linux :

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

Pour les autres noyaux :

# cat /sys/kernel/mm/transparent_hugepage/enabled

La commande ci-dessus affiche si l’indicateur [toujours], [madvise] ou [jamais] est activé.   Si THP est supprimé du noyau, les fichiers /sys/kernel/mm/redhat_transparent_hugepage ou /sys/kernel/mm/redhat/transparent_hugepage n’existent pas.

Pour désactiver Transparent HugePages pendant le démarrage, effectuez les opérations suivantes :

1. Ajoutez l’entrée suivante à la ligne de démarrage du noyau dans le fichier /etc/grub.conf :

transparent_hugepage=jamais

2. Redémarrez le système d’exploitation

Il existe une méthode pour désactiver également THP à la volée, mais cela peut ne pas fournir le résultat souhaité car cette méthode ne fera qu’arrêter la création et l’utilisation de THP pour de nouveaux processus.  THP déjà créé ne sera pas désassemblé en pages mémoire régulières.  Il est conseillé de redémarrer complètement le système pour désactiver THP au démarrage.

*Remarque: Il est recommandé de confirmer auprès de votre distributeur Linux respectif pour confirmer les méthodes utilisées pour désactiver THP.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer