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

Desativar hugepages transparentes (THP) para implantações autogerenciadas

Nesta página

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

Importante

Atualizou TCMalloc no MongoDB 8.0

A partir do MongoDB 8.0, O MongoDB usa uma versão atualizada do TCMalloc que melhora o desempenho com o Transparent Hugepages habilitado. Se você estiver usando o MongoDB 8.0 ou posterior, consulte Habilitar hugepages transparentes (THP).

Transparent Hugepages (THP) é um sistema de gerenciamento de memória Linux que reduz a sobrecarga de pesquisas de TRB (Translation Lookaside Buffer). O THP consegue isso combinando páginas pequenas e fazendo com que apareçam como páginas de memória maiores para o aplicação.

Ao executar o MongoDB 7.0 ou anterior no Linux, o THP deve ser desabilitado para melhor desempenho. Em versões anteriores do MongoDB, as cargas de trabalho do banco de dados de dados geralmente apresentam um desempenho reduzido com o THP ativado porque geralmente usam padrões de acesso à memória não contíguos.

Observação

Você pode ativar o THP no nível do sistema e desativá-lo no nível do processo. Se você tiver vários processos do MongoDB em um único computador, certifique-se de que os processos na versão 8.0 habilitem o THP, enquanto os processos na 7.0 ou anterior desabilitem o THP.

Para garantir que o THP esteja desativado antes do início do mongod , crie um arquivo de serviço para seu sistema operacional que desative o THP na inicialização. As instruções a seguir incluem exemplos para os sistemas de inicialização systemd e System V init .

Além disso, para sistemas RHEL e CentOS que usam perfis de desempenho ktune e tuned , você também deve criar um perfil tuned personalizado.

Para criar um arquivo de serviço que desabilita THP, use o sistema de inicialização integrado para seu sistema operacional. Versões recentes do Linux normalmente utilizam systemd, que utiliza o comando systemctl . Versões mais antigas do Linux utilizam o System V init, que utiliza o comando service . Para obter mais informações, consulte a documentação do seu sistema operacional.

Use o sistema de inicialização do seu sistema operacional:

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

Se você usar tuned ou ktune, execute as etapas nesta seção após criar o arquivo de serviço.

tuned e ktune são utilitários de ajuste do kernel que podem afetar a configuração de Transparent Hugepages em seu sistema. Se você usar tuned ou ktune no seu sistema RHEL ou CentOS enquanto estiver executando mongod, deverá criar um perfil tuned personalizado para garantir que o THP permaneça desativado.

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 do TCMalloc