Quiero deshabilitar transparent_hugepage (THP) en una instancia CentOS 7 EC2, que está habilitada de forma predeterminada:
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
Esta configuración se puede cambiar manualmente:
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
... pero los cambios se pierden después del reinicio.
Intenté poner las echo never [...]
instrucciones en mis archivos rc.local
y cloud.cfg
, pero no funcionó.
También intenté agregar la configuración transparent_hugepage=never
a la línea del kernel /etc/grub.conf
(como se explicaallá), pero no funcionó mejor.
Entonces... ¿cómo puedo desactivar THP en CentOS 7 ejecutándose en una instancia AWS EC2?
editar: título cambiado... Necesito desactivar THPydesfragmentación THP
Respuesta1
La solución está ensintonizado, como lo señala @michael-hampton. La parte complicada es que elvmEl complemento solo puede configurar la /sys/kernel/mm/transparent_hugepage/enabled
configuración.
Para deshabilitar /sys/kernel/mm/transparent_hugepage/defrag
también la configuración, tuve que crear un script al que llama el perfil al inicio.
Al final, la solución completa es:
paso 1: cree el directorio para contener el perfil personalizado:
mkdir /etc/tuned/custom
paso 2: Crear el perfil /etc/tuned/custom/tuned.conf
:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
[script]
script=script.sh
Tenga en cuenta que este perfil hereda deinvitado virtual, que era mi perfil activo y que en realidad parecía apropiado para un servidor virtualizado (EC2). Puedes ver tu perfil activo con el comando tuned-adm active
. Si tienes curiosidad, puedes consultar el contenido de los perfiles predefinidos en/usr/lib/tuned/
paso 3: Crear el guión /etc/tuned/custom/script.sh
:
#!/bin/sh
. /usr/lib/tuned/functions
start() {
echo never > /sys/kernel/mm/transparent_hugepage/defrag
return 0
}
stop() {
return 0
}
process $@
Hazlo ejecutable:
sudo chmod 755 /etc/tuned/custom/script.sh
etapa 4: Activar el nuevo perfil:
tuned-adm profile custom
Ahora deberías obtener:
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
Persistirá después del reinicio.
Respuesta2
Además de configurar la línea de comando de grub, también necesita configurar tuned. Pero no utilices las instrucciones a las que has vinculado, ya que están tan llenas de errores que tomaría medio día explicarlas todas.
Cree un perfil personalizado (al que llamaré custom
) y luego configure el perfil. Lo basará en un perfil existente, por ejemplo, virtual-guest
si está ejecutando en una máquina virtual (EC2, por supuesto), o throughput-performance
si está en una máquina física.
Cree el directorio para contener el perfil personalizado:
mkdir /etc/tuned/custom
Cree el perfil personalizado /etc/tuned/custom/tuned.conf
, por ejemplo:
[main]
include=virtual-guest
[vm]
transparent_hugepages=never
Ahora configura el perfil:
tuned-adm profile custom
Respuesta3
Prueba también esto
nano /etc/init.d/disable-transparent-hugepages
#!/bin/sh
### BEGIN INIT INFO
# Provides: disable-transparent-hugepages
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: mongod mongodb-mms-automation-agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description: Disable Linux transparent huge pages, to improve
# database performance.
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
thp_path=/sys/kernel/mm/transparent_hugepage
elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
thp_path=/sys/kernel/mm/redhat_transparent_hugepage
else
return 0
fi
echo 'never' > ${thp_path}/enabled
echo 'never' > ${thp_path}/defrag
unset thp_path
;;
esac
sudo chmod 755 /etc/init.d/disable-transparent-hugepages
sudo chkconfig --añadir deshabilitar-transparentes-enormes páginas
Respuesta4
EDITAR:la respuesta de arriba esequivocado, porque los botones de página enormes y transparentes faltan en sysctl en este momento. Perdón por el ruido.
Puedes poner los valores deseados en /etc/sysctl.conf
.
Desde la página del manual sysctl.conf(5):
SYSCTL.CONF(5) Formatos de archivo SYSCTL.CONF(5) NOMBRE sysctl.conf - archivo de configuración/precarga de sysctl DESCRIPCIÓN sysctl.conf es un archivo simple que contiene valores sysctl que sysctl debe leer y configurar. La sintaxis es simplemente la siguiente: # comentario ; comentario ficha = valor Tenga en cuenta que se ignoran las líneas en blanco y los espacios en blanco antes y después de un token o valor, aunque un valor puede contener espacios en blanco. Líneas que comienzan con # o ; son considerados comentarios e ignorados. EJEMPLO # muestra sysctl.conf # kernel.nombredominio = ejemplo.com ; ¡Este tiene un espacio que se escribirá en sysctl! kernel.modprobe = /sbin/mod sonda