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


9

Desejo desativar o transparent_hugepage (THP) em uma instância do CentOS 7 EC2, que é ativada por padrão:

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

Essa 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.

Tentei colocar as echo never [...]instruções nos meus arquivos rc.locale cloud.cfg, mas não funcionou.

Também tentei anexar a configuração transparent_hugepage=neverà linha do kernel de /etc/grub.conf(como explicado ), 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?

editar: título alterado ... Preciso desativar a desfragmentação THP e THP


Por interesse, posso perguntar por que você deseja desativar o THP?
Cameron Kerr #


Após a reinicialização, o instasnce não funcionará se você "anexar transparent_hugepage = nunca à linha do kernel do /etc/grub.conf" e precisar remover essa linha do arquivo grub. Para este fim, podemos anexar instância existente para um novo e montar a partição para a pasta
Artem.Borysov

Respostas:


14

A solução está sintonizada , como apontado por @ michael-hampton. A parte complicada é que o plugin vm pode apenas definir a /sys/kernel/mm/transparent_hugepage/enabledconfiguração.

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

No final, a solução completa é:

etapa 1 : Crie o diretório para armazenar o perfil personalizado:

mkdir /etc/tuned/custom

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

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

Observe que esse perfil é herdado do convidado virtual , que era meu perfil ativo, na verdade parecendo apropriado para o servidor virtualizado (EC2). Você pode ver o seu perfil ativo com o comando tuned-adm active. Se você estiver curioso, verifique 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 executável:

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

etapa 4 : ative o novo perfil:

tuned-adm profile custom

Agora você deve obter:

# 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.


Descobrimos que isso funcionava em uma VM do AWS Redhat 7.4. Obrigado!
precisa saber é o seguinte

2

Além de definir a linha de comando do grub, você também precisa configurar o tuned. Mas não usando as instruções às quais você vinculou, 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 custom) e defina o perfil. Você o baseará em um perfil existente, como virtual-guestse você estiver executando em uma máquina virtual (é claro que o EC2 está) ou throughput-performancese estiver em uma máquina física.

Crie o diretório para armazenar o perfil customizado:

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

Essas instruções cheias de erros? Levaria meio dia para explicar? É isso que estou tentando entender.
Vcarel

A propósito, não entendo sua resposta. Por que tenho que configurar o grub e usar o tuned completamente?
Vcarel

1
Porque está ativado por padrão na configuração do kernel e ativado por padrão na configuração ajustada. Você precisa alterar os dois para que seja completamente eficaz.
Michael Hampton

1
Configurar o ajuste parece suficiente ... Não precisei alterar a configuração do grub. BTW, há outra configuração ajustada para desativar a desfragmentação do THP também?
Vcarel

@vcarel Não é necessário porque páginas enormes e transparentes já estão desativadas!
Michael Hampton

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


0

Você pode editar o arquivo /etc/rc.local e adicionar o seguinte comando a esse arquivo:

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

e execute chmod +x /etc/rc.d/rc.localpara garantir que o script seja executado durante a inicialização. testado no Amazon Linux 2.


-2

Edição: a resposta acima está errada , porque os botões de página enorme transparente estão faltando sysctl no momento. Desculpe pelo barulho.


Você pode inserir os valores desejados /etc/sysctl.conf.

Na página do manual sysctl.conf (5):

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

NOME
       sysctl.conf - arquivo de pré-carregamento / configuração do sysctl

DESCRIÇÃO
       O sysctl.conf é um arquivo simples que contém valores sysctl para serem lidos e configurados pelo sysctl. A sintaxe é simplesmente a seguinte:

              # Comente
              ; Comente

              token = value

       Observe que as linhas em branco são ignoradas e os espaços em branco antes e depois de um token ou valor são ignorados, embora um valor possa conter espaços em branco. Linhas que começam com um # ou; são considerados
       comentários e ignorados.

EXEMPLO
              Amostra # sysctl.conf
              #
                kernel.domainname = example.com
              ; este tem um espaço que será gravado no sysctl!
                kernel.modprobe = probe sbin / mod

1
Isso não pode ser configurado usando o sysctl.
Michael Hampton

Por quê? Costumo ajustar / sys / knowbs usando sysctl.conf ... Estou perdendo alguma coisa aqui? EDIT: não importa, eu encontrei na documentação do RHEL. Obrigado-me que apontando;)
shodanshok
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.