En savoir plus sur les pages énormes sous Linux. Comprenez ce qu’est une énorme page, comment la configurer, comment vérifier l’état actuel et comment la désactiver.
Dans cet article, nous allons vous guider à travers les détails sur les énormes pages afin que vous puissiez répondre: qu’est-ce que sont d’énormes pages sous Linux? Comment activer / désactiver les pages énormes? Comment déterminer une valeur de page énorme? sous Linux comme RHEL6, RHEL7, Ubuntu, etc.
Commençons par les bases des pages énormes.
Qu’est-ce qu’une énorme page sous Linux?
Les pages énormes sont utiles dans la gestion de la mémoire virtuelle dans le système Linux. Comme son nom l’indique, ils aident à gérer des pages de grande taille en mémoire en plus de la taille de page standard de 4 Ko. Vous pouvez définir une taille de page aussi énorme que 1 Go à l’aide de pages énormes.
Pendant le démarrage du système, vous réservez votre partie mémoire avec d’énormes pages pour votre application. Cette partie mémoire, c’est-à-dire occupée par de grandes pages, n’est jamais échangée hors de la mémoire. Il y restera jusqu’à ce que vous changiez votre configuration. Cela augmente les performances de l’application dans une large mesure comme la base de données Oracle avec des besoins en mémoire assez importants.
Pourquoi utiliser huge page?
Dans la gestion de la mémoire virtuelle, le noyau maintient une table dans laquelle il a un mappage de l’adresse de mémoire virtuelle à une adresse physique. Pour chaque transaction de page, le noyau doit charger le mappage associé. Si vous avez des pages de petite taille, vous devez charger plus de nombres de pages résultant du noyau pour charger plus de tables de mappage. Cela diminue les performances.
L’utilisation de pages énormes signifie que vous aurez besoin de moins de pages. Cela diminue dans une large mesure le nombre de tables de mappage à charger par le noyau. Cela augmente vos performances au niveau du noyau, ce qui profite finalement à votre application.
En bref, en activant des pages énormes, le système a moins de tables de pages à gérer et donc moins de frais généraux pour y accéder / les maintenir!
Comment configurer de grandes pages?
Exécutez la commande ci-dessous pour vérifier les détails actuels des grandes pages.
root@kerneltalks # grep Huge /proc/meminfoAnonHugePages: 0 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kB
Dans la sortie ci-dessus, vous pouvez voir que la taille d’une page est de 2 Mo Hugepagesize
et un total de 0 pages sur le système HugePages_Total
. Cette taille de page énorme peut être augmentée de 2 Mo à 1 Go maximum.
Exécutez le script ci-dessous pour obtenir le nombre de pages énormes dont votre système a actuellement besoin. Le script provient d’Oracle et peut être trouvé.
#!/bin/bash## hugepages_settings.sh## Linux bash script to compute values for the# recommended HugePages/HugeTLB configuration## Note: This script does calculation for all shared memory# segments available when the script is run, no matter it# is an Oracle RDBMS shared memory segment or not.# Check for the kernel versionKERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`# Find out the HugePage sizeHPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`# Start from 1 pages to be on the safe side and guarantee 1 free HugePageNUM_PG=1# Cumulative number of pages required to handle the running shared memory segmentsfor SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "*"`do MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q` if ; then NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` fidone# Finish with resultscase $KERN in '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; '2.6' | '3.8' | '3.10' | '4.1' ) echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;;esac# End
Vous pouvez l’enregistrer dans /tmp
sous hugepages_settings.sh
puis l’exécuter comme ci-dessous :
root@kerneltalks # sh /tmp/hugepages_settings.shRecommended setting: vm.nr_hugepages = 124
La sortie sera similaire à un certain nombre comme indiqué dans l’exemple de sortie ci-dessus.
Cela signifie que votre système a besoin de 124 pages énormes de 2 Mo chacune! Si vous avez défini 4 Mo comme taille de page, la sortie aurait été de 62. Tu as compris, non?
Configure hugepages in kernel
Maintenant, la dernière partie consiste à configurer le paramètre de noyau indiqué ci-dessus et à le recharger. Ajoutez la valeur ci-dessous dans /etc/sysctl.conf
et rechargez la configuration en émettant la commande sysctl -p
.
vm.nr_hugepages=126
Notez que nous avons ajouté 2 pages supplémentaires dans le noyau car nous voulons garder quelques pages de rechange par rapport au nombre requis.
Maintenant, d’énormes pages ont été configurées dans le noyau, mais pour permettre à votre application de les utiliser, vous devez également augmenter les limites de mémoire. La nouvelle limite de mémoire devrait être de 126 pages x 2 Mo chacune = 252 Mo soit 258048 Ko.
Vous devez modifier les paramètres ci-dessous dans /etc/security/limits.conf
soft memlock 258048 hard memlock 258048
Parfois, ces paramètres sont configurés dans des fichiers spécifiques à l’application comme pour Oracle DB its dans /etc/security/limits.d/99-grid-oracle-limits.conf
C’est tout! Vous voudrez peut-être redémarrer votre application pour utiliser ces nouvelles pages énormes.
Comment désactiver les pages énormes?
Les pages énormes sont généralement activées par défaut. Utilisez la commande ci-dessous pour vérifier l’état actuel des grandes pages.
root@kerneltalks # cat /sys/kernel/mm/transparent_hugepage/enabled madvise never
l’indicateur en sortie indique que d’énormes pages sont activées sur le système.
Pour les systèmes basés sur RedHat, le chemin du fichier est /sys/kernel/mm/redhat_transparent_hugepage/enabled
Si vous souhaitez désactiver d’énormes pages, ajoutez transparent_hugepage=never
à la fin de kernel
ligne dans /etc/grub.conf
et redémarrez le système.