Deshabilite THP y THP defrag en la instancia de CentOS 7 EC2

9

Quiero deshabilitar transparent_hugepage (THP) en una instancia de CentOS 7 EC2, que está habilitada de manera 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 de reiniciar.

Traté de poner la echo never [...]instrucción en mi rc.localy cloud.cfgarchivos, pero no funcionó.

También intenté agregar la configuración transparent_hugepage=nevera la línea del kernel de /etc/grub.conf(como se explica allí ), pero no funcionó mejor.

Entonces ... ¿cómo puedo desactivar THP en CentOS 7 que se ejecuta en una instancia de AWS EC2?

editar: título cambiado ... Necesito deshabilitar THP y THP defrag

vcarel
fuente
Por el bien del interés, ¿puedo preguntarle por qué desea desactivar THP?
Cameron Kerr
Después de reiniciar su instancia no funcionará si "anexa transparent_hugepage = never a la línea del núcleo de /etc/grub.conf" y necesitará eliminar esta línea del archivo grub. Para este propósito, podemos adjuntar una instancia existente a una nueva y montar la partición en la carpeta
Artem.Borysov

Respuestas:

14

La solución está en sintonía , como lo señaló @ michael-hampton. La parte difícil es que el complemento vm solo puede configurar la /sys/kernel/mm/transparent_hugepage/enabledconfiguración.

Para deshabilitar la /sys/kernel/mm/transparent_hugepage/defragconfiguración también, tuve que crear una secuencia de comandos que el perfil llama al inicio.

Al final, la solución completa es:

Paso 1 : crea el directorio para contener el perfil personalizado:

mkdir /etc/tuned/custom

Paso 2 : crea 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 de virtual-guest , que era mi perfil activo, en realidad parece apropiado para el servidor virtualizado (EC2). Puede ver su perfil activo con el comando tuned-adm active. Si tiene curiosidad, puede consultar el contenido de los perfiles predefinidos en/usr/lib/tuned/

Paso 3 : crea el script /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

Paso 4 : activa 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.

vcarel
fuente
Descubrimos que esto funcionaba en una VM AWS Redhat 7.4. ¡Gracias!
Jon Sampson
2

Además de configurar la línea de comandos de grub, también necesita configurar sintonizado. Pero no utiliza las instrucciones a las que se vinculó, ya que están tan llenas de errores que tomaría medio día explicarlas todas.

Cree un perfil personalizado (que llamaré custom) y luego configure el perfil. Lo basará en un perfil existente, como virtual-guestsi está ejecutando en una máquina virtual (EC2 es, por supuesto), o throughput-performancesi 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 configure el perfil:

tuned-adm profile custom
Michael Hampton
fuente
¿Esas instrucciones llenas de errores? ¿Tardaría medio día en explicarlo? Eso es lo que estoy tratando de entender.
vcarel
Por cierto, no entiendo tu respuesta. ¿Por qué tengo que configurar grub y usar tuned por completo?
vcarel
1
Porque está activado de forma predeterminada en la configuración del núcleo y activado de forma predeterminada en la configuración ajustada. Debe cambiar ambos para que sea completamente efectivo.
Michael Hampton
1
Configurar sintonizado parece suficiente ... No tuve que cambiar la configuración de grub. Por cierto, ¿hay otra configuración ajustada para deshabilitar la desfragmentación de THP también?
vcarel
@vcarel ¡No es necesario porque las enormes páginas transparentes ya están deshabilitadas!
Michael Hampton
1

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 --add disable-transparent-hugepages

Artem.Borysov
fuente
0

Puede editar el archivo /etc/rc.local y agregar el siguiente comando a ese archivo:

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

y ejecutar chmod +x /etc/rc.d/rc.localpara garantizar que el script se ejecutará durante el arranque. probado en Amazon Linux 2.

Yuda Prawira
fuente
-2

EDITAR: la respuesta anterior es incorrecta , porque en este momento faltan los botones de página enormes transparentes de sysctl. Perdón por el ruido.


Puede poner los valores deseados en /etc/sysctl.conf.

Desde la página del comando man sysctl.conf (5):

SYSCTL.CONF (5) Formatos de archivo SYSCTL.CONF (5)

NOMBRE
       sysctl.conf: archivo de precarga / configuración de sysctl

DESCRIPCIÓN
       sysctl.conf es un archivo simple que contiene valores sysctl para ser leídos y establecidos por sysctl. La sintaxis es simplemente la siguiente:

              # comentario
              ; comentario

              token = valor

       Tenga en cuenta que las líneas en blanco se ignoran y los espacios en blanco antes y después de un token o valor se ignoran, aunque un valor puede contener espacios en blanco. Líneas que comienzan con un # o; son considerados
       comentarios e ignorados.

EJEMPLO
              # muestra sysctl.conf
              # #
                kernel.domainname = example.com
              ; ¡éste tiene un espacio que se escribirá en el sysctl!
                kernel.modprobe = / sbin / mod sonda
shodanshok
fuente
1
Esto no se puede configurar con sysctl.
Michael Hampton
¿Por qué? A menudo modifico / sys / knowbs usando sysctl.conf ... ¿Me falta algo aquí? EDITAR: no importa, lo encontré en la documentación de RHEL. Gracias por señalarme eso;)
shodanshok