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

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

Quero desabilitar o Transparent_hugepage (THP) em uma instância do CentOS 7 EC2, que está 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.

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

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

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

edit: título alterado... preciso desabilitar o THPeDesfragmentação THP

Responder1

A solução está emsintonizado, conforme apontado por @michael-hampton. A parte complicada é que ovmplugin só pode definir a /sys/kernel/mm/transparent_hugepage/enabledconfiguração.

Para desabilitar a /sys/kernel/mm/transparent_hugepage/defragconfiguração também, tive que criar um script que é chamado pelo perfil na inicialização.

No final, a solução completa é:

passo 1: crie o diretório para armazenar 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 herda deconvidado virtual, que era meu perfil ativo, na verdade parecendo apropriado para servidor virtualizado (EC2). Você pode visualizar seu perfil ativo com o comando tuned-adm active. Se estiver curioso, você 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 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.

Responder2

Além de configurar a linha de comando do grub, você também precisa configurar o tuned. Mas não usando as instruções que você linkou, pois elas estão tão cheias de erros que demoraria meio dia só para explicar todas elas.

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

Crie o diretório para armazenar 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

Responder3

Experimente 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 desativar-transparentes-hugepages

Responder4

EDITAR:a resposta acima éerrado, porque os enormes botões de página transparentes estão faltando no sysctl no momento. Desculpe pelo barulho.


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

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

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

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

DESCRIÇÃO
       sysctl.conf é um arquivo simples contendo valores sysctl para serem lidos e definidos pelo sysctl. A sintaxe é simplesmente a seguinte:

              # Comente
              ; Comente

              token = valor

       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 # ou ; são considerados
       comentários e ignorados.

EXEMPLO
              # exemplo de sysctl.conf
              #
                kernel.nomedodomínio = exemplo.com
              ; este possui um espaço que será gravado no sysctl!
                kernel.modprobe = /sbin/mod sonda

informação relacionada