Mémoire : Utilisation des Huge Pages et implémentation

27 juin 2025 — par admin_libra

Les Huge Pages sont une fonctionnalité importante de la gestion de la mémoire sous Linux, particulièrement sur des systèmes avec des bases de données volumineuses comme PostgreSQL. Leur utilisation permet d’optimiser la gestion de la mémoire, de réduire les latences et d’améliorer les performances, surtout pour les charges de travail lourdes.

Cet article détaille l’intérêt des Huge Pages, leur mise en œuvre sur un système Linux (Debian/Ubuntu), et fournit un exemple concret d’implémentation avec PostgreSQL.

1. Qu’est-ce que les Huge Pages ?

Les Huge Pages sont une extension du système de gestion de la mémoire sous Linux qui permet de manipuler des pages mémoire de taille plus grande que les pages classiques (généralement 4 Ko). Par défaut, Linux utilise des pages de 4 Ko pour allouer de la mémoire, mais cela peut entraîner des problèmes d’efficacité, notamment dans les systèmes avec de grandes quantités de RAM et des applications gourmandes en mémoire comme les bases de données.

Taille des pages classiques vs Huge Pages :

  • Pages classiques : 4 Ko

  • Huge Pages : 2 Mo, 1 Go (selon l’architecture du processeur et la configuration du noyau)

Avantages des Huge Pages :

Réduction de la surcharge de gestion des pages : Lorsque l’on utilise des pages plus grandes, il y a moins de pages à gérer, ce qui réduit la surcharge du système liée à la gestion de la mémoire.

  1. Réduction des accès aux tables de pages : Moins de pages signifie moins d’entrées dans les tables de pages, ce qui améliore les performances de la gestion mémoire.

  2. Optimisation du TLB (Translation Lookaside Buffer) : Le TLB est un cache qui mémorise les correspondances entre les adresses virtuelles et physiques des pages. Les Huge Pages, étant plus grandes, permettent de réduire le nombre de fois où le système doit chercher dans le TLB, augmentant ainsi la vitesse des accès mémoire.

  3. Réduction des « page faults » : Le système peut avoir à effectuer moins de « page faults » (demandes de pages mémoire qui ne sont pas présentes en mémoire) avec des pages plus grandes.

 

2. Quand utiliser les Huge Pages

Les Huge Pages sont particulièrement utiles dans les cas suivants :

  • Applications gourmandes en mémoire : Comme les bases de données (PostgreSQL, MySQL, Oracle), les systèmes de virtualisation, ou les applications de calcul scientifique.

  • Systèmes avec de grandes quantités de RAM : Sur les serveurs avec plus de 16 Go de RAM, l’utilisation des Huge Pages peut avoir un impact important sur les performances.

  • Réduction de la latence : Dans les environnements où la latence est cruciale (par exemple les applications financières ou les serveurs de bases de données), les Huge Pages permettent de maintenir des performances constantes.

 

3. Implémentation des Huge Pages sous Debian/Ubuntu

3.1. Pré-requis

  • Linux Kernel : Assurez-vous d’utiliser un noyau Linux récent (la fonctionnalité Huge Pages est disponible depuis longtemps, mais il est toujours préférable d’avoir une version à jour).

  • Permissions : Vous devez être root ou avoir des privilèges sudo pour configurer les Huge Pages.

3.2. Vérification de la prise en charge des Huge Pages

Avant de configurer les Huge Pages, vérifiez que votre système prend en charge cette fonctionnalité. Utilisez la commande suivante pour voir si votre noyau supporte les Huge Pages : 

grep Huge /proc/meminfo

La sortie devrait ressembler à ceci :

HugePages_Total:   0

HugePages_Free: 0

HugePages_Rsvd: 0

HugePages_Surp: 0

Hugepagesize: 2048 kB
  • Si le nombre de pages totales (HugePages_Total) est à 0, cela signifie que les Huge Pages ne sont pas encore activées.

  • Hugepagesize vous montre la taille des pages disponibles (en général, 2 Mo pour les systèmes modernes).

3.3. Activation des Huge Pages

Étape 1 : Allouer des Huge Pages

Vous pouvez allouer des Huge Pages manuellement en utilisant la commande suivante pour allouer 100 pages de 2 Mo chacune :

echo 100 | sudo tee /proc/sys/vm/nr_hugepages

Cela alloue 100 pages de 2 Mo. Vous pouvez vérifier que les pages ont été allouées avec :

 
grep Huge /proc/meminfo

Cela devrait afficher que vous avez désormais 100 pages allouées.

Étape 2 : Configurer la persistance des Huge Pages

Pour rendre cette allocation permanente, vous devez modifier le fichier /etc/sysctl.conf et ajouter la ligne suivante :

vm.nr_hugepages=100

Ensuite, appliquez les modifications avec la commande :

 
sudo sysctl -p

Étape 3 : Activation de la prise en charge du montage hugetlbfs

Il est nécessaire de monter le système de fichiers hugetlbfs, qui est utilisé pour accéder aux Huge Pages. Ajoutez la ligne suivante dans /etc/fstab pour rendre le montage persistant : 

hugetlbfs   /dev/hugepages   hugetlbfs   defaults   0   0

Ensuite, créez le répertoire pour le montage et montez le système de fichiers :

sudo mkdir /dev/hugepages
sudo mount /dev/hugepages

 

4. Exemple d’application : Optimisation de PostgreSQL avec Huge Pages

PostgreSQL, étant une base de données souvent utilisée pour des applications exigeantes, bénéficie particulièrement de l’utilisation des Huge Pages. En effet, PostgreSQL est conçu pour tirer parti des optimisations du cache mémoire, et l’utilisation de Huge Pages réduit les coûts liés à la gestion de la mémoire et permet une meilleure gestion du cache.

4.1. Configuration de PostgreSQL pour utiliser Huge Pages

  1. Vérifier la configuration du noyau :
    Tout d’abord, assurez-vous que le noyau utilise bien les Huge Pages allouées. Vous pouvez le vérifier avec la commande suivante :

    cat /proc/meminfo | grep HugePages

    Vous devez voir les pages Huge allouées.

  2. Activer l’utilisation des Huge Pages dans PostgreSQL :
    PostgreSQL a un paramètre spécifique pour l’utilisation des Huge Pages, qui est huge_pages. Par défaut, ce paramètre est désactivé. Vous devez l’activer dans le fichier de configuration postgresql.conf

    # Éditer le fichier de configuration
    sudo nano /etc/postgresql/12/main/postgresql.conf

    Ajoutez ou modifiez la ligne suivante pour activer les Huge Pages :

    huge_pages = on

    Si vous utilisez PostgreSQL avec un système multi-instance, vous pouvez également définir cette option pour chaque instance de base de données

  3. Redémarrer PostgreSQL :
    Une fois les modifications effectuées, redémarrez PostgreSQL pour que les changements prennent effet :

    # Redémarrer le service
    sudo systemctl restart postgresql

4.2. Optimisation des paramètres de mémoire dans PostgreSQL

Une fois les Huge Pages activées, vous pouvez également ajuster certains paramètres dans postgresql.conf pour tirer pleinement parti des Huge Pages :

 

5. Conclusion

L’utilisation des Huge Pages sur un serveur Linux (Debian/Ubuntu) peut grandement améliorer les performances des applications nécessitant une gestion intensive de la mémoire, comme les bases de données PostgreSQL. En réduisant la surcharge de gestion des pages, en optimisant l’utilisation du TLB, et en réduisant les page faults, vous pouvez obtenir des performances significativement améliorées, surtout sur des serveurs avec beaucoup de RAM.

En suivant les étapes ci-dessus, vous pouvez configurer vos serveurs pour utiliser efficacement les Huge Pages et tirer parti de cette fonctionnalité pour des applications à haute performance.

Index complet

Tous les articles (48)

Date Article Tags
30/06/2026 PHP : gérer plusieurs versions PHP-FPM avec les dépôts Sury sur Debian/Ubuntu administration apache debian 22/06/2026 OS : Cycle de vie LTS et mise à jour des distributions — apt dist-upgrade et do-release-upgrade sous Debian / Ubuntu apt cycle-de-vie debian 17/06/2026 APT : Guide complet de la gestion des paquets sous Debian et Ubuntu administration apt debian 17/06/2026 SHELL : Guide des commandes les plus usuelles et commandes couteau suisse awk bash commandes 17/06/2026 SUDO : implémentation et sécurisation des accès sur Debian/Ubuntu administration audit authentification 17/06/2026 ProFTPd : authentification MySQL centralisée, FTPs (SSL) et SFTP sur Debian/Ubuntu authentification debian ftp 09/06/2026 Fail2ban — configuration avancée et filtres personnalisés bruteforce debian fail2ban 07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs