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


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.


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

¿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


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.


-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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.