As Transparent Huge Pages (THP) consolidam páginas de 4 KB em páginas de 2 MB para reduzir a pressão sobre a TLB e melhorar a eficiência do acesso à memória. Este tópico aborda as opções de configuração de THP, definições de desfragmentação e recomendações de ajuste para o Alibaba Cloud Linux.
Configurações de THP
No Alibaba Cloud Linux 2, o kernel 4.19.81-17.2 e versões anteriores definiam transparent_hugepage/enabled como madvise (THP seletivo). A partir do kernel 4.19.91-18, o padrão mudou para always visando compatibilidade com Red Hat Enterprise Linux 7, CentOS 7 e Amazon Linux 2. A configuração always ativa o THP em todo o sistema.
Configuração global
Configure o THP por meio de /sys/kernel/mm/transparent_hugepage/enabled:
-
alwaysO THP está ativado globalmente.
-
neverO THP está desativado globalmente.
-
madviseO THP é ativado apenas para regiões de memória marcadas com
MADV_HUGEPAGEviamadvise().NotaA flag
MADV_HUGEPAGEsinaliza ao kernel que uma aplicação pretende usar huge pages para uma região de memória específica.
Configuração de desfragmentação
Além das configurações globais de THP, dois mecanismos de desfragmentação também se aplicam:
Desfragmentação de THP: mescla pequenas páginas dispersas em huge pages para reduzir a fragmentação da memória.
Desfragmentação khugepaged: o daemon
khugepagedverifica periodicamente a memória e mescla pequenas páginas dispersas em huge pages contíguas.
O daemon khugepaged mescla páginas proativamente em segundo plano. A configuração defrag do THP controla a estratégia de desfragmentação no momento da alocação.
Desfragmentação de THP
Controla o comportamento da memória durante falhas de página (Direct Reclaim, Background Reclaim, Direct Compaction, Background Compaction). Configure escrevendo em /sys/kernel/mm/transparent_hugepage/defrag:
-
alwaysO sistema pausa o processo solicitante e executa Direct Reclaim e Direct Compaction síncronos. Se houver memória contígua suficiente disponível, a THP será alocada.
-
deferRetorna para uma página de 4 KB e aciona o
kswapd(Background Reclaim) e okcompactd(Background Compaction). Posteriormente, okhugepagedmescla as páginas de 4 KB em uma THP de 2 MB quando houver memória contígua disponível. -
madvisePara regiões de memória marcadas com
MADV_HUGEPAGEviamadvise(), comporta-se comoalways. Todas as outras regiões retornam para páginas de 4 KB.NotaNo Alibaba Cloud Linux 2 com versão de kernel 4.19.81-17.2 e posterior, o padrão do sistema para esta configuração é
madvise. -
defer+madvisePara regiões
MADV_HUGEPAGE(viamadvise()), comporta-se comoalways. Para todas as outras regiões, comporta-se comodefer. -
never
Desativa a desfragmentação no momento da alocação.
Desfragmentação khugepaged
Principais configurações do khugepaged:
-
Ativar ou desativar o recurso
Arquivo de configuração: /sys/kernel/mm/transparent_hugepage/khugepaged/defrag. Opções:
-
0Desativa a desfragmentação do
khugepaged. -
1Quando definido como
1, o daemonkhugepagedmescla periodicamente páginas de 4 KB dispersas em THPs de 2 MB durante períodos de ociosidade.NotaNo Alibaba Cloud Linux 2 com versão de kernel 4.19.91-18 e posterior, o padrão do sistema é
1.Esta operação adquire locks no caminho de memória. Se o
khugepagedexecutar varreduras em momentos inadequados, isso pode degradar o desempenho da aplicação.
-
-
Intervalo de nova tentativa
Tempo que o
khugepagedaguarda antes de tentar novamente após uma falha na alocação de THP. Padrão:60000ms (60 segundos). Arquivo de configuração:/sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs. -
Intervalo de varredura
Tempo entre as ativações do
khugepaged. Padrão:10000ms (10 segundos). Arquivo de configuração:/sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs. -
Número de páginas a verificar
Páginas verificadas por ativação do
khugepaged. Padrão: 4096. Arquivo de configuração:/sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan.
Recomendações de configuração de THP
Impacto do uso de THP
O THP melhora o desempenho aumentando as taxas de acerto da TLB e reduzindo a sobrecarga de PTE, sem exigir alterações no código da aplicação. No entanto, quando a alocação de THP falha, os mecanismos de recuperação acionados podem degradar o desempenho. A configuração padrão não atende a todas as cargas de trabalho. Por exemplo:
Com a desfragmentação de THP definida como
always, o sistema executa Direct Reclaim ou Direct Compaction síncronos sob pressão de memória, causando picos de latência.Com o
khugepagedativado (1), o daemon adquire locks no caminho de memória durante a consolidação, o que pode degradar aplicações sensíveis à memória se for acionado no momento errado.Com o THP ativado, mas ambos os recursos de desfragmentação desativados, a memória esgota as páginas livres mais rapidamente do que com páginas de 4 KB, acionando recuperação e compactação antecipadamente.
Recomendações de configuração
O impacto do THP no desempenho depende da sua carga de trabalho. Ajuste a configuração com base nos requisitos da sua aplicação.
Faça backup dos seus arquivos de configuração ou Crie um snapshot para um disco antes de fazer alterações.
-
Para equilibrar desempenho e estabilidade, considere a configuração experimental
defer+madvise. Isso permite quekswapd,kcompactdekhugepagedlidem com a compactação em segundo plano sem bloquear aplicações.sudo bash -c "echo 'defer+madvise' > /sys/kernel/mm/transparent_hugepage/defrag" -
Se o uso de CPU do
khugepagedestiver alto (próximo de 100%), aumente seu intervalo de varredura. Por exemplo, defina-o para 30 segundos:sudo sh -c 'echo 30000 > /sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs'Alternativamente, desative o
khugepaged:sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag' -
Para cargas de trabalho onde a estabilidade é mais importante que o throughput — como bancos de dados de alto volume, serviços sensíveis à latência ou alocações frequentes de curta duração — desative o THP. Para desativar em tempo de execução:
sudo sh -c 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled'NotaEssa alteração aplica-se apenas à sessão atual e é revertida na reinicialização. Para desativar o THP permanentemente, adicione um parâmetro de inicialização do kernel:
sudo grubby --args="transparent_hugepage=never" --update-kernel="/boot/vmlinuz-$(uname -r)" sudo reboot
Verificar o uso de THP
Verifique o uso de THP no nível do sistema ou do processo.
-
Nível do sistema
Os parâmetros de THP afetam todos os processos. Verifique o uso de THP em todo o sistema:
cat /proc/meminfo | grep AnonHugePagesExemplo de saída:
AnonHugePages: 614400 kBNotaUm valor diferente de zero indica que THPs estão em uso no sistema.
-
Nível do processo: as aplicações usam
madvise()comMADV_HUGEPAGEpara controlar o THP em suas próprias regiões de memória sem afetar outros processos. Verifique o uso de THP para um processo específico:sudo cat /proc/<PID>/smaps | grep AnonHugePagesNotaSubstitua
<PID>pelo ID real do processo.Exemplo de saída:
AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB
Referências
A funcionalidade e os riscos do THP estão documentados em Transparent Hugepage Support.
O Code Huge Page aplica o mesmo princípio de consolidação para mapear segmentos de código em regiões de 2 MB ou mais, reduzindo as falhas de TLB. O Alibaba Cloud Linux também oferece suporte a Huge Pages para código.
Ajuste de THP no Red Hat Enterprise Linux 7: Configuring Transparent Huge Pages.