Usando o Multi-Gen LRU (MGLRU) em kernels AL2023 - Amazon Linux 2023

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando o Multi-Gen LRU (MGLRU) em kernels AL2023

O LRU multigeracional é um algoritmo moderno de recuperação de páginas no kernel do Linux, projetado para melhorar o desempenho do gerenciamento de memória sob pressão da memória. Ele substitui o mecanismo tradicional de LRU (menos acessado recentemente) usado para determinar quais páginas da memória devem ser recuperadas quando o sistema está com pouca memória.

O mecanismo tradicional de LRU usa um modelo de duas listas (ativa e inativa) para rastrear o uso de páginas, o que pode se tornar ineficiente em workloads modernas com grandes conjuntos de trabalho. O MGLRU substitui esse método por várias “gerações” de páginas, permitindo que o kernel tome decisões mais inteligentes com base em informações mais refinadas sobre o envelhecimento.

Os benefícios do MGLRU incluem:

  • Melhores decisões de recuperação: identificação mais precisa de páginas frias (não utilizadas).

  • Menor latência e melhor throughput: especialmente para workloads com grandes espaços de endereço ou muitos processos simultâneos.

  • Retenção de cache aprimorada: páginas usadas recentemente têm menos probabilidade de serem removidas prematuramente.

  • Design escalável e eficiente em termos de bloqueio: funciona melhor em máquinas com muitos. CPUs

Configuração e ajuste

A configuração do kernel CONFIG_LRU_GEN está habilitada nos AL2023 kernels. Ela é compilada no MGLRU, mas não o habilita por padrão.

O MGLRU pode ser habilitado e ajustado usando o arquivo /sys/kernel/mm/lru_gen/enabled. O valor é uma máscara de bits. Recomenda-se ativar todos os componentes, a menos que alguns deles tenham efeitos colaterais indesejáveis.

Bit Componentes
0 O interruptor principal para o LRU multigeracional.
1 Limpando o bit acessado nas entradas da tabela de páginas folhas em grandes lotes, quando o MMU o definir (por exemplo, em x86). Teoricamente, esse comportamento pode piorar a contenção de bloqueios (mmap_lock). Se estiver desabilitado, o LRU multigeracional sofrerá uma pequena degradação de desempenho para workloads que mapeiam páginas ativas de forma contígua, cujos bits acessados podem ser eliminados por menos lotes maiores.
2 Limpando também o bit acessado nas entradas da tabela de páginas não folhas, quando o MMU o definir (por exemplo, em x86). Esse comportamento não foi verificado em variações x86 além da Intel e da AMD. Se estiver desabilitado, o LRU multigeracional sofrerá uma degradação de desempenho insignificante.
[yYnN] Enable/disable todos os componentes acima.

Um exemplo de como o MGLRU pode ser habilitado:

[ec2-user ~]$ echo y >/sys/kernel/mm/lru_gen/enabled

Isto habilita todos os componentes:

[ec2-user ~]$ cat /sys/kernel/mm/lru_gen/enabled 0x0007