54 votes

Comment modifier "/sys/kernel/mm/transparent_hugepage/enabled" ?

Je utilise mongodb 3.0 et Je trouve un avertissement:

Version de la shell MongoDB : 3.0.0
Connexion à : test
Le serveur a des avertissements au démarrage : 
2015-03-13T16:28:29.405+0800 I CONTROL  [initandlisten] 
2015-03-13T16:28:29.406+0800 I CONTROL  [initandlisten] ** ATTENTION : /sys/kernel/mm/transparent_hugepage/enabled est 'always'.
2015-03-13T16:28:29.406+0800 I CONTROL  [initandlisten] **        Nous vous suggérons de le définir sur 'never'
2015-03-13T16:28:29.406+0800 I CONTROL  [initandlisten] 
2015-03-13T16:28:29.407+0800 I CONTROL  [initandlisten] ** ATTENTION : /sys/kernel/mm/transparent_hugepage/defrag est 'always'.
2015-03-13T16:28:29.407+0800 I CONTROL  [initandlisten] **        Nous vous suggérons de le définir sur 'never'
2015-03-13T16:28:29.407+0800 I CONTROL  [initandlisten]

~# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

~# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

J'essaie d'utiliser echo, mais ce n'est pas permanent, après le redémarrage, il sera réinitialisé.

echo never > /sys/kernel/mm/transparent_hugepage/defrag

Comment modifier /sys/kernel/mm/transparent_hugepage/enabled de manière permanente?

75voto

David Foerster Points 34353

Vous pouvez

  1. installer le paquet sysfsutils :

    sudo apt install sysfsutils
  2. et ajouter une ligne avec ce paramètre dans /etc/sysfs.conf :

    kernel/mm/transparent_hugepage/enabled = never

Ceci est la solution la plus propre, car elle conserve toute la configuration sysfs au même endroit au lieu de compter sur des scripts de démarrage personnalisés. Les autres réponses, avec les scripts et les expressions conditionnelles, sont adaptées si vous ne savez pas par quel chemin le kernel exposera ce paramètre, c'est-à-dire si vous n'avez même pas une idée approximative de la version du kernel fonctionnant sur la machine affectée.

25voto

clayzermk1 Points 351

La documentation de MongoDB propose quelques suggestions. http://docs.mongodb.org/manual/reference/transparent-huge-pages/

La méthode "préférée" consiste à modifier /etc/default/grub et ajouter transparent_hugepage=never à GRUB_CMDLINE_LINUX_DEFAULT puis exécuter update-grub pour reconstruire la configuration de GRUB.

Les deux lignes suivantes feront exactement cela. Assurez-vous de vérifier la sortie !

sed -r 's/GRUB_CMDLINE_LINUX_DEFAULT="[a-zA-Z0-9_= ]*/& transparent_hugepage=never/' /etc/default/grub | sudo tee /etc/default/grub
sudo update-grub

Remarquez que update-grub est un alias pour grub-mkconfig. grub-mkconfig écrasera les entrées dans /etc/default/grub avec celles de /etc/default/grub.d/*. Si par hasard vous utilisez AWS, vous devrez modifier /etc/default/grub.d/50-cloudimg-settings.cfg à la place.

La méthode "alternative" consiste à modifier /etc/rc.local et ajouter ce qui suit avant exit 0:

if test -f /sys/kernel/mm/transparent_hugepage/khugepaged/defrag; then
  echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

Personnellement, j'ai fini par effectuer à la fois les méthodes "préférée" et "alternative" car elles ne sont pas mutuellement exclusives et cela élimine l'avertissement relatif à la défragmentation.

* A fonctionné pour moi sur Ubuntu 14.04, MongoDB 3.0.2 et AWS.

16voto

Badams Points 156

Voici une solution qui a été testée et fonctionne sur Ubuntu 16.04 sur AWS EC2. Ubuntu 16.04 utilise le système d'initialisation systemd, et ce fichier de configuration indique que ces paramètres doivent être modifiés avant le démarrage de MongoDB.

Créez un fichier nommé /etc/systemd/system/mongodb-hugepage-fix.service et ajoutez le contenu suivant :

[Unit]
Description="Désactiver les Transparent Hugepages avant le démarrage de MongoDB"
#AVERTISSEMENT : vérifiez le nom du service sur votre système
# Si vous utilisez MongoDB Cloud, le nom du service est "mongodb-mms-automation-agent.service"
Before=mongodb.service      

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
#AVERTISSEMENT : vérifiez le nom du service sur votre système
# Si vous utilisez MongoDB Cloud, le nom du service est "mongodb-mms-automation-agent.service"
RequiredBy=mongodb.service

Pour charger le fichier dans systemd :

systemctl daemon-reload

Pour activer le fichier en tant que dépendance au démarrage de MongoDB

systemctl enable mongodb-hugepage-fix

Si vous souhaitez activer les modifications immédiatement (avant le prochain démarrage)

systemctl start mongodb-hugepage-fix
systemctl restart mongod

Cette solution n'est pas adaptée pour Ubuntu 14.04, qui utilise la solution d'initialisation Upstart au lieu de systemd.

7voto

PKumar Points 2392

Ajoutez les lignes suivantes ci-dessous dans le fichier /etc/rc.local.

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

Ceci s'exécutera lorsque vous redémarrerez le serveur.

0voto

Edik Mkoyan Points 339

GRUB changera après la mise à niveau, et rc.local ne s'exécutera qu'après le démarrage de mongo, peut-être devrions-nous ajouter service mongo restart à la fin de rc.local comme ceci

if test -f /sys/kernel/mm/transparent\_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent\_hugepage/enabled
fi

if test -f /sys/kernel/mm/transparent\_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent\_hugepage/defrag
fi

wait 1 && servie mongod restart

ou peut-être quelqu'un a-t-il ajouté avec succès les lignes ci-dessus au script init dans Ubuntu 14.04?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X