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.local
e cloud.cfg
, mas não funcionou.
Eu também tentei anexar a configuração transparent_hugepage=never
à linha do kernel /etc/grub.conf
(conforme explicadolá), 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/enabled
configuração.
Para desabilitar a /sys/kernel/mm/transparent_hugepage/defrag
configuraçã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-guest
se você estivesse executando em uma máquina virtual (EC2, é claro) ou throughput-performance
se 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