Alterado na versão 8.0.
A partir do MongoDB 8.0, O MongoDB usa uma versão atualizada do TCMalloc que usa caches por CPU, em vez de caches por thread, para reduzir a fragmentação da memória e tornar seu banco de dados de dados mais resiliente a cargas de trabalho de alto estresse.
Para usar a nova versão do TCMalloc:
Suporte a plataformas
Os sistemas operacionais compatíveis com o MongoDB 8.0 também oferecem suporte ao TCMalloc atualizado, exceto para o seguinte:
RHEL 9 / CentOS 9 / Oracle 9 na arquitetura PPC64LE
Esses sistemas operacionais usam a versão legado do TCMalloc. Se você usar esses sistemas operacionais, desative o THP.
O Windows usa a versão legado do TCMalloc e não oferece suporte ao TCMalloc atualizado.
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.
No MongoDB 8.0 e posterior, certifique-se de que o THP esteja ativado antes mongod começar criando um arquivo de serviço para o sistema de inicialização da sua plataforma. Se você estiver usando o MongoDB 7.0 ou anterior, desative o THP.
Observação
O THP opera no nível do sistema, portanto, se aplica a todos os processos do sistema. Você não pode habilitar ou desabilitar o nível por processo do THP.
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 habilite THP, use o sistema de inicialização integrado para sua plataforma. Versões recentes do Linux normalmente utilizam systemd, que utiliza o comando systemctl . Versões mais antigas do Linux tendem a usar o System V init, que usa o comando service . Para obter mais informações, consulte a documentação do seu sistema operacional.
Use o sistema de inicialização para sua plataforma:
Crie o systemd arquivo de unidade
Crie o seguinte arquivo e salve-o em /etc/systemd/system/enable-transparent-huge-pages.service:
[Unit] Description=Enable Transparent Hugepages (THP) DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'echo always | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo defer+madvise | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null && echo 0 | tee /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /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 enable-transparent-huge-pages.service de acordo.
Iniciar o serviço
Executar:
sudo systemctl start enable-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 && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory
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 && cat /sys/kernel/mm/redhat_transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory
A saída deve se assemelhar ao seguinte:
always defer+madvise 0 1
Crie o init.d script
Crie o seguinte arquivo e salve-o em /etc/init.d/enable-transparent-hugepages:
!/bin/bash ## BEGIN INIT INFO Provides: enable-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: Enable Linux Transparent Hugepages Description: Enable 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 'always' | tee ${thp_path}/enabled > /dev/null && echo defer+madvise | tee ${thp_path}/defrag > /dev/null && echo 0 | tee ${thp_path}/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /dev/null' unset thp_path ;; esac
Execute o script
Executar:
sudo /etc/init.d/enable-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 && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory
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
A saída deve se assemelhar ao seguinte:
always defer+madvise 0 1
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ê estiver usando tuned ou ktune no seu sistema RHEL ou CentOS enquanto estiver executando mongod, será necessário criar um perfil tuned personalizado para garantir que o THP permaneça ativado.
Habilitar caches por CPU
Para verificar se o TCMalloc está em execução com caches por CPU, certifique-se de que:
tcmalloc.usingPerCPUCachesétrue.tcmalloc.tcmalloc.cpu_freeé superior a0.
Se os caches por CPU não estiverem ativados, certifique-se de que:
Você desabilita o rseq do glibc.
Você estiver usando o Linux kernel versão 4.18 ou posterior.
Desativar rseq do Glibc
O novo TCMalloc requer Restartable Sequences (rseq) para implementar caches por CPU. Se outro aplicação, como a biblioteca glibc, registrar uma estrutura rseq antes do TCMalloc, o TCMalloc não poderá usar o rseq. Sem rseq, o TCMalloc usa caches por thread, que são usados pela versão legado do TCMalloc.
Para garantir que o TCMalloc possa usar o rseq para habilitar caches por CPU, você pode desabilitar o registro de Glibc de uma estrutura rseq. Para desativar o glibc rseq, defina a seguinte variável de ambiente antes de iniciar o mongod:
GLIBC_TUNABLES=glibc.pthread.rseq=0 export GLIBC_TUNABLES
Verificar versão do kernel
Se você desativou o glibc rseq e os caches por CPU ainda não estiverem ativados, verifique se está usando o Linux kernel versão 4.18 ou posterior. Para verificar sua versão do kernel, execute o seguinte comando:
uname -r