Je souhaite améliorer les performances de ma base de données ou de mon application hébergée sur une instance Linux Amazon Elastic Compute Cloud (Amazon EC2). Comment configurer des HugePages sur mon instance afin d'améliorer les performances ?
Brève description
Les HugePages sont des pages mémoire dont la taille est supérieure à la taille de page par défaut de 4 Ko. L'activation des HugePages dans le noyau de votre instance Linux, dans un environnement d'application ou de base de données volumineux, permet de réduire la charge sur le TLB. Ceci permet d'augmenter les performances de votre serveur, de votre application ou de votre base de données, car le TLB stocke moins de pages volumineuses.
Par exemple, si les entrées TLB sont à 512 sans HugePages configurées sur l'instance, la taille de la mémoire est approximativement égale à ce qui suit :
4096 o x 512 = mémoire de 2 Mo
Si les entrées TLB sont à 512 avec des HugePages configurées sur l'instance, la taille de la mémoire est approximativement égale à ce qui suit :
2 Mo x 512 = mémoire de 1 Go
Remarque : les valeurs valides pour des HugePages dans un système Linux sont 2 Mo et 1 Go. La valeur par défaut est 2 Mo.
Pour plus d'informations sur les HugePages, consultez HugePages sur le Centre d'aide Oracle.
Prenez en compte les éléments suivants avant d'activer les HugePages :
- Par défaut, le démarrage de votre système ne crée pas de HugePages. Pour activer la création après le démarrage du système, modifiez le nombre de pages disponibles ou modifiez la taille du pool HugePages.
- Si l'espace approprié pour l'allocation n'est pas disponible en mémoire lors du démarrage du système, l'allocation de HugePages échoue. La valeur hugepagesize (taille de HugePages) x nombre de HugePages doit toujours être inférieure à la mémoire totale de l'instance. Pour déterminer la quantité de mémoire qui doit être disponible, vérifiez la mémoire totale de l'instance en exécutant la commande free -m.
Remarque : obtenez la valeur hugepagesize auprès de votre fournisseur d'application ou de base de données, ou bien de votre administrateur système. Par exemple, pour activer les HugePages pour une base de données Oracle, vous pouvez obtenir le SGA à partir d'Oracle. Pour plus d'informations, consultez la section Viewing SGA Memory Allocation du guide Database Performance Tuning Guide, dédié au réglage des performances de bases de données.
- L'activation des Hugepages dans le noyau de l'instance nécessite que l'application ou la base de données sur l'instance prenne en charge les HugePages. Vérifiez auprès de votre fournisseur ou de votre administrateur système que votre application ou base de données prend en charge les HugePages.
Résolution
Remarque : une bonne pratique consiste à configurer les HugePages dans un environnement de test et à comparer les performances avant de les déployer en production.
1. Pour vérifier que les HugePages ne sont pas déjà activées sur votre noyau, exécutez la commande cat :
# sudo cat /proc/sys/vm/nr_hugepages
0
Dans l'exemple précédent, la valeur du paramètre nr_hugepages est 0, ce qui indique que les HugePages ne sont pas activées.
2. Pour activer les HugePages, exécutez la commande suivante pour définir la valeur du paramètre noyau sur 2048 :
# sudo sysctl -w vm.nr_hugepages=2048
vm.nr_hugepages = 2048
3. Pour vérifier que le système alloue les HugePages après le redémarrage, ajoutez l'entrée suivante à /etc/sysctl.conf :
# sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf
4. Exécutez la commande cat pour vérifier la modification :
# sudo cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.zone_reclaim_mode=1
vm.nr_hugepages=2048
5. Redémarrez votre instance.
6. Après le redémarrage, exécutez à nouveau la commande cat pour vérifier la valeur et la configuration des HugePages :
# sudo cat /proc/sys/vm/nr_hugepages
2048
7. Vérifiez les HugePages disponibles dans /proc/meminfo :
# sudo grep Huge /proc/meminfo
HugePages_Total: 2048
HugePages_Free: 2048
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Pour obtenir la définition de chaque variable dans l'exemple de sortie précédent, consultez HugePages sur kernel.org.
Les HugePages sont désormais activées sur votre serveur.
8. Configurez les HugePages sur d'autres applications en fonction des besoins.
Remarque : pour désactiver les HugePages :
1. Redéfinissez la valeur nr_hugepages sur 0.
2. Supprimez l'entrée dans sysctl.conf.
3. Redémarrez le serveur afin que les changements prennent effet.