Les HugePages sont une fonctionnalité du noyau Linux qui permet de gérer la mémoire autrement que par page de 4KB. Cette fonctionnalité est importante pour les performances des bases de données Oracle si vous disposez d’assez de mémoire (à partir de 24Go par exemple).

Avantages

  • Une taille de page plus grande et moins de pages

La taille de page par défaut est de 4K alors que la taille de HugeTLB est 2048K. Cela signifie que le système devrait gérer 512 fois moins de pages.

  • Moins de surcharge pour les opérations de mémoire

Sur les systèmes de mémoire virtuelle (tous les OS modernes) chaque opération de mémoire correspond en réalité à deux opérations de mémoire abstraite. Avec les HugePages, étant donné qu’il y a moins de pages à gérer, le goulot d’étranglement possible sur l’accès à la table de page est évité.

  • Moins de mémoire utilisée

Du point de vue de la base de données Oracle, avec les HugePages, le noyau Linux utilisera moins de mémoire pour maintenir des mappings virtuels à physiques pour la plage d’adresses SGA. Cela laisse plus de mémoire disponible pour les autres processus ou la PGA.

  • Pas de swap

Il n’y a donc pas de mécanisme de remplacement de page. Les HugePages sont considérées comme épinglées.

Exemple de gain de mémoire

Supposons que la consommation de la mémoire SGA (mémoire partagée) d’une base Oracle est de 24Go sur un système disposant de 32Go de RAM (environnement standalone, dédié à Oracle). Dans le présent système de 32Go, il faut donc un PageTables contenant 8388608 pages contenant la relation entre l’adressage virtuel et physique des pages en mémoire (appelé Page Table Entry : PTE).

Chaque « single PTE » consomme 8 bytes de gestion administrative pour le mapping des données de pages virtuelles sous Linux. Dans ce contexte, cela signifie que pour Oracle (24Go) cela correspond à 6291456 pages * 8 bytes, soit 48Mo par process. En supposant la présence de 200 processus, la consommation serait de 48Mo * 200 processes = 9600Mo.

Pour rappel, nous avons 6291456 pages utilisées dans le PageTables pour l’allocation de la mémoire physique Oracle par les pages par défaut de 4K. En utilisant les HugePages, l’allocation du HugePages serait de 2M (24Go = 12288 pages * 2Mo). La consommation PTE serait de 12288 pages * 8 bytes, soit 96Ko par process. La consommation de 200 processus serait de 18,75 Mo.

Sur cet environnement, le fait d’utiliser le HugePages pour la base de données Oracle permettrait de passer de quelques Go d’utilisations mémoires (PTE) à quelques dizaines de Mo.

Inconvénients

  • Les Hugepages ne sont pas compatibles avec la gestion automatique (Automatic Memory Management – AMM, paramètres MEMORY_MAX_TARGET et MEMORY_TARGET).
  • Selon la version de Linux ou de la base de données (10g par exemple), la prise en compte n’est pas automatique et vous pourriez passer un peu de temps à trouver la bonne configuration.

Configuration

  • Modifier le fichier /etc/security/limits.conf, exemple pour 64G de RAM
*   soft   memlock    60397977
*   hard   memlock    60397977
  • Se reconnecter et vérifier la prise en compte des limites mémoire
    $ ulimit -l
    60397977
  • A partir de la version 11g, désactiver la gestion automatique de la mémoire
  • Vérifier que toutes les instances sont démarrées, lancer le script hugepages_settings.sh (fourni par Oracle dans la note 401749.1) et compléter le fichier /etc/sysctl.conf avec les valeurs fournies par le script
  • Redémarrer le serveur
  • Vérifier la prise en compte par le système et les instances
   # grep HugePages /proc/meminfo
   HugePages_Total:    1496
   HugePages_Free:      485
   HugePages_Rsvd:      446
   HugePages_Surp:        0

Dans le fichier d’alert des instances, exemple :

    Starting ORACLE instance (normal)
   ************************ Large Pages Information *******************
   Per process system memlock (soft) limit = 112 GB
         
   Total Shared Global Region in Large Pages = 4098 MB (11%)

   Large Pages used by this instance: 2049 (4098 MB)
   Large Pages unused system wide = 32 (64 MB)
   Large Pages configured system wide = 29740 (58 GB)
   Large Page size = 2048 KB
   ********************************************************************

Références

749851.1 « HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux »
HugePages on Oracle Linux 64-bit (Doc ID 361468.1)
http://www.puschitz.com/TuningLinuxForOracle.shtml#LargeMemoryOptimization
Oracle Not Utilizing Hugepages (Doc ID 803238.1)
HugePages on Linux: What It Is… and What It Is Not… (Doc ID 361323.1)

Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)