Desativar hugepages transparentes (THP) para implantações autogerenciadas
Nesta página
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.
Crie um arquivo de serviço
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:
Crie o systemd
arquivo de unidade
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.
Iniciar o serviço
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
Crie o init.d
script
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
Execute o script
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
Configure seu sistema operacional para executá-lo na inicialização.
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 |
| |
SUSE |
| |
Red Hat, CentOS, Amazon Linux e derivados |
|
Uso de e tuned
ktune
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.