Desativar a desfragmentação THP e THP na instância do CentOS 7 EC2

9

Eu quero desabilitar o transparent_hugepage (THP) em uma instância do CentOS 7 EC2, que é habilitada por padrão:

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

Esta configuração pode ser alterada 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]

... mas as alterações são perdidas após a reinicialização.

Eu tentei colocar a instrução echo never [...] em meus arquivos rc.local e cloud.cfg , mas não funcionou.

Eu também tentei acrescentar a configuração transparent_hugepage=never à linha do kernel de /etc/grub.conf (como explicado em ), mas não funcionou melhor.

Então ... como posso desativar o THP no CentOS 7 em execução em uma instância do AWS EC2?

edit: mudou o título ... Preciso desabilitar o THP e THP defrag

    
por vcarel 04.05.2015 / 11:09

4 respostas

12

A solução está em sintonizado , conforme destacado por @ michael-hampton. A parte complicada é que o plugin vm só pode configurar o /sys/kernel/mm/transparent_hugepage/enabled configuração.

Para desativar também a configuração /sys/kernel/mm/transparent_hugepage/defrag , tive que criar um script chamado pelo perfil no início.

No final, a solução completa é:

passo 1 : crie o diretório para manter o perfil personalizado:

mkdir /etc/tuned/custom

passo 2 : crie o perfil /etc/tuned/custom/tuned.conf :

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Observe que este perfil é herdado de virtual-guest , que era meu perfil ativo, na verdade parecendo adequado para o servidor virtualizado (EC2). Você pode ver seu perfil ativo com o comando tuned-adm active . Se você está curioso, pode conferir o conteúdo dos perfis predefinidos em /usr/lib/tuned/

etapa 3 : crie o 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 $@

Torne-o executável:

sudo chmod 755 /etc/tuned/custom/script.sh

passo 4 : ative o novo perfil:

tuned-adm profile custom

Agora você deve receber:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Ele persistirá após a reinicialização.

    
por 04.05.2015 / 17:46
2

Além de definir a linha de comando do grub, você também precisa configurar o ajuste. Mas não usando as instruções que você ligou, pois elas são tão cheias de erros que levaria meio dia apenas para explicar todas elas.

Crie um perfil ajustado personalizado (que chamarei de custom ) e defina o perfil. Você o baseará em um perfil existente, como virtual-guest se estiver executando em uma máquina virtual (é claro que o EC2) ou throughput-performance se você estiver em uma máquina física.

Crie o diretório para manter o perfil personalizado:

mkdir /etc/tuned/custom

Crie o perfil personalizado /etc/tuned/custom/tuned.conf , por exemplo:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

Agora defina o perfil:

tuned-adm profile custom
    
por 04.05.2015 / 11:25
1

Tente também isso

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

    
por 29.02.2016 / 13:51
-2

EDIT: a resposta acima está errada , porque os botões de páginas grandes e transparentes estão faltando no sysctl no momento. Desculpe pelo barulho.

Você pode colocar os valores desejados em /etc/sysctl.conf .

Da página man do sysctl.conf (5):

SYSCTL.CONF(5)                                                                                 File Formats                                                                                 SYSCTL.CONF(5)

NAME
       sysctl.conf - sysctl preload/configuration file

DESCRIPTION
       sysctl.conf is a simple file containing sysctl values to be read in and set by sysctl.  The syntax is simply as follows:

              # comment
              ; comment

              token = value

       Note  that  blank  lines  are ignored, and whitespace before and after a token or value is ignored, although a value can contain whitespace within.  Lines which begin with a # or ; are considered
       comments and ignored.

EXAMPLE
              # sysctl.conf sample
              #
                kernel.domainname = example.com
              ; this one has a space which will be written to the sysctl!
                kernel.modprobe = /sbin/mod probe
    
por 04.05.2015 / 11:25