Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Desabilitar páginas grandes transparentes (THP)

Nesta página

  • Crie um arquivo de serviço
  • Usando tuned e ktune

Transparent Huge Pages (THP) é um sistema de gerenciamento de memória Linux que reduz a sobrecarga de pesquisas de TLB (Translation Lookaside Buffer) em máquinas com grandes quantidades de memória usando páginas de memória maiores.

No entanto, as cargas de trabalho do banco de dados geralmente funcionam mal com o THP ativado, porque elas tendem a ter padrões de acesso à memória esparsos em vez de contíguos. Ao executar MongoDB no Linux, THP deve ser desabilitado para melhor desempenho.

Para garantir que o THP esteja desativado antes do início do mongod, você deve criar um arquivo de serviço para o sistema de inicialização da sua plataforma que desabilite o THP na inicialização. As instruções são fornecidas abaixo para os sistemas de inicialização systemd e System V init.

Além disso, para sistemasRHEL / CentOS que fazem uso de perfis de desempenho ktune e tuned, você também deve criar um perfil de tuned personalizado.

Para criar um arquivo de serviço que desabilita THP, você usará o sistema de inicialização integrado para sua plataforma. Versões recentes do Linux tendem a utilizar systemd (que utiliza o comando systemctl), enquanto versões mais antigas do Linux tendem a utilizar System V init (que utiliza o comando service). Consulte a documentação do seu sistema operacional para obter mais informações.

Escolha o sistema de inicialização adequado para sua plataforma:

1

Crie o seguinte arquivo e salve-o em /etc/systemd/system/disable-transparent-huge-pages.service:

[Unit]
Description=Disable Transparent Hugepages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null'
[Install]
WantedBy=basic.target

Observação

Algumas versões do Red Hat Enterprise Linux, e possivelmente outros derivados baseados no Red Hat, usam um caminho diferente para o arquivo THP enabled:

/sys/kernel/mm/redhat_transparent_hugepage/enabled

Verifique qual caminho está em uso em seu sistema e atualize o arquivo disable-transparent-huge-pages.service de acordo.

2

Para recarregar os arquivos de unidade systemd e disponibilizar disable-transparent-huge-pages.service para uso, execute o seguinte comando:

sudo systemctl daemon-reload
3

Executar:

sudo systemctl start disable-transparent-huge-pages

Para verificar se as configurações relevantes do THP foram alteradas, execute o seguinte comando:

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

No Red Hat Enterprise Linux, e possivelmente em outros derivados baseados no Red Hat, talvez você precise usar o seguinte:

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

A saída deve se assemelhar ao seguinte:

never
never
4

Para garantir que essa configuração seja aplicada sempre que o sistema operacional for iniciado, execute o seguinte comando:

sudo systemctl enable disable-transparent-huge-pages
5

Se você usar perfis tuned ou ktune no RHEL/ CentOS, também deverá criar um perfil tuned personalizado.

1

Crie o seguinte arquivo e salve-o em /etc/init.d/disable-transparent-hugepages:

#!/bin/bash
### 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 Hugepages
# Description: Disable Linux Transparent Hugepages, 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' | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo 'never' | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null
unset thp_path
;;
esac
2

Executar:

sudo chmod 755 /etc/init.d/disable-transparent-hugepages
3

Executar:

sudo /etc/init.d/disable-transparent-hugepages start

Para verificar se as configurações relevantes do THP foram alteradas, execute o seguinte comando:

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

No Red Hat Enterprise Linux, e possivelmente em outros derivados baseados no Red Hat, talvez você precise usar o seguinte:

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

A saída deve se assemelhar ao seguinte:

never
never
4

Para garantir que essa configuração seja aplicada sempre que o sistema operacional for iniciado, execute o seguinte comando para sua distribuição Linux:

Distribuição
Comando
Ubuntu e Debian
sudo update-rc.d disable-transparent-hugepages defaults
SUSE
sudo insserv /etc/init.d/disable-transparent-hugepages
Red Hat, CentOS, Amazon Linux e derivados
sudo chkconfig --add disable-transparent-hugepages
5

Se você estiver usando perfis tuned ou ktune no RHEL/ CentOS, também deverá criar um perfil tuned personalizado.

Importante

Ao usar tuned ou ktune, você também deverá executar as etapas nesta seção após criar o arquivo de serviço acima.

tuned e ktune são ferramentas dinâmicas de ajuste de configurações do kernel, que podem afetar a configuração da transparent huge pages no seu sistema. Se você estiver usando tuned / ktune no seu sistema RHEL / CentOS enquanto estiver executando mongod, será necessário criar um perfil tuned personalizado para garantir que a THP permaneça desativada.

1

Crie um novo perfil utilizando um perfil existente copiando o diretório relevante. Este exemplo utiliza o perfil virtual-guest como base e utiliza virtual-guest-no-thp como o novo perfil:

sudo cp -r /etc/tune-profiles/virtual-guest /etc/tune-profiles/virtual-guest-no-thp
2

Edite /etc/tune-profiles/virtual-guest-no-thp/ktune.sh e altere a configuração set_transparent_hugepages para o seguinte:

set_transparent_hugepages never
3

Habilite o novo perfil:

sudo tuned-adm profile virtual-guest-no-thp
1

Crie um novo diretório para manter o perfil tuned personalizado. Este exemplo herda do perfil virtual-guest existente e usa virtual-guest-no-thp como o novo perfil:

sudo mkdir /etc/tuned/virtual-guest-no-thp
2

Crie e edite /etc/tuned/virtual-guest-no-thp/tuned.conf de forma que contenha o seguinte:

[main]
include=virtual-guest
[vm]
transparent_hugepages=never

Este exemplo herda do perfil virtual-guest existente. Selecione o perfil mais apropriado para o seu sistema.

3

Habilite o novo perfil:

sudo tuned-adm profile virtual-guest-no-thp

Voltar

Desempenho