Desabilitar páginas grandes transparentes (THP)
Nesta página
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.
Crie um arquivo de serviço
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:
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
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.