Para hacer que opciones como esta sean permanentes, normalmente las agregará al archivo /etc/sysctl.conf
. Puede ver una lista completa de las opciones disponibles usando este comando:
$ sysctl -a
Ejemplo
$ sudo sysctl -a | head -5
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 6000000
kernel.sched_latency_ns = 18000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_shares_ratelimit = 750000
Puedes buscar hugepage
en la salida así:
$ sudo sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0
¿No está ahí?
Sin embargo, mirando a través de la salida no vi transparent_hugepage
. Buscando en Google un poco más, encontré esta página de Oracle que analiza este mismo tema. La página se titula:Configuración de HugePages para Oracle en Linux (x86-64).
Específicamente en esa página mencionan cómo deshabilitar la función de página enorme.
extracto
El método preferido para deshabilitar Transparent HugePages es agregar "transparent_hugepage=never" a la línea de inicio del kernel en el archivo "/etc/grub.conf".
title Oracle Linux Server (2.6.39-400.24.1.el6uek.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.39-400.24.1.el6uek.x86_64 ro root=/dev/mapper/vg_ol6112-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=uk
LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_DM rd_LVM_LV=vg_ol6112/lv_swap rd_LVM_LV=vg_ol6112/lv_root rhgb quiet numa=off
transparent_hugepage=never
initrd /initramfs-2.6.39-400.24.1.el6uek.x86_64.img
El servidor debe reiniciarse para que esto surta efecto.
Alternativamente, puede agregar el comando a su /etc/rc.local
archivo.
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
Creo que optaría por la segunda opción, ya que la primera correrá el riesgo de desactivarse cuando actualice de un kernel al siguiente.
Puede confirmar que funcionó con el siguiente comando después de reiniciar:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
Solo quería agregar a esta pregunta ya que estaba tratando de deshabilitar las páginas gigantes transparentes en CentOS v6 para habilitar TokuDB para MariaDB. Agregué el script mencionado por @slm a /etc/rc.local
y deshabilitó las páginas gigantes transparentes. Sin embargo, debido a la forma en que funcionan los scripts de inicio en Linux, /etc/rc.local
se ejecuta después de que se inician todos los servicios. Por lo tanto, las páginas grandes transparentes se deshabilitaban después de que MariaDB ya se había iniciado y el motor TokuDB no se inicializaba. La única otra forma de deshabilitar las páginas gigantes transparentes es agregando transparent_hugepage=never
al parámetro del núcleo.
Noté el comentario de @Rwky You can make the first option survive kernel updates by adding transparent_hugepage=never to the GRUB_CMDLINE_LINUX_DEFAULT option in /etc/default/grub on most distributions.
y descubrí que CentOS no es compatible con /etc/default/grub
archivo y estaba preocupado por transparent_hugepage=never
desapareciendo de los parámetros del kernel cuando se actualiza. Pero no se preocupe, CentOS está configurado para mantener los cambios realizados en los parámetros del kernel en grub, de modo que cuando se actualice se mantengan.
Para agregar también, la forma correcta de modificar los parámetros del kernel para grub es con grubby
. Creé este script simple para agregar transparent_hugepage=never
a cada kernel con grubby
:
#!/bin/sh
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
for KERNEL in /boot/vmlinuz-*; do
grubby --update-kernel="$KERNEL" --args='transparent_hugepage=never'
done
Todo lo anterior no funcionó para mí en un EC2 Ubuntu 16.04, pero esto sí:
sudo apt install hugepages
sudo hugeadm --thp-never