Deshabilite THP y la desfragmentación de THP en la instancia CentOS 7 EC2

Deshabilite THP y la desfragmentación de THP en la instancia CentOS 7 EC2

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.localy cloud.cfg, pero no funcionó.

También intenté agregar la configuración transparent_hugepage=nevera 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/enabledconfiguración.

Para deshabilitar /sys/kernel/mm/transparent_hugepage/defragtambié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-guestsi está ejecutando en una máquina virtual (EC2, 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 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

información relacionada