- Implementação de tamanhos de página distintos para alocação e mapeamento virtual.
- Subsistema de gerenciamento de memória em arquiteturas x86 com muita RAM.
- Kirill A. Shutemov, engenheiro de software da Intel.
- Proposta inicial enviada para o ciclo de desenvolvimento do Kernel Linux 7.0.
O desenvolvedor Kirill A. Shutemov, da Intel, enviou uma proposta de patch para o Kernel Linux 7.0 que visa desacoplar o conceito de tamanho de página. A mudança permite que o sistema utilize páginas de 64 KB (ou 16 KB) para alocações internas, enquanto mantém a compatibilidade de mapeamento de 4 KB para os aplicativos. O objetivo principal é aumentar a escalabilidade em servidores que gerenciam múltiplos terabytes de memória RAM.
O que isso significa na prática
Atualmente, o Kernel Linux utiliza um tamanho padrão de 4 KB para quase tudo o que envolve memória no x86. Em máquinas modernas com volumes massivos de RAM, gerenciar bilhões dessas pequenas unidades cria uma sobrecarga imensa. O patch permite que o sistema operacional trabalhe com blocos maiores “por baixo do capô”. Para o usuário, isso resulta em um sistema mais rápido para alocar memória e uma redução significativa no desperdício de RAM que o próprio kernel consome para se organizar. No entanto, o custo é um aumento no consumo de memória para arquivos muito pequenos, que passarão a ocupar pelo menos 64 KB no cache.
Detalhes da implementação
A mudança técnica central reside na separação da macro PAGE_SIZE em dois valores distintos: o PTE_SIZE, que define a granularidade do mapeamento no espaço de endereçamento virtual, e o PG_SIZE, que define o tamanho da alocação no alocador buddy. No subsistema de memória (MM), os PFNs continuam utilizando unidades de PTE_SIZE, mas o cache de arquivos e as operações de I/O passam a operar em unidades de PG_SIZE.
| Métrica | Kernel Linux padrão (4k) | Proposta Shutemov (64k) |
| Sobrecarga de RAM (struct page) | ~1.6% da memória total | ~0.1% da memória total |
| Tamanho da alocação ordem-0 | 4 KB | 64 KB |
| Pressão no lock de zona | Alta | Reduzida |
| Alocação de 2M (THP) | Ordem-9 | Ordem-5 |
O patch exige uma reformulação profunda no tratamento de falhas de página (page faults) e nas VMAs, especialmente para lidar com casos onde o início de uma área de memória não está perfeitamente alinhado com o novo tamanho de página maior.
Curiosidades e bastidores da discussão
A recepção na LKML foi uma mistura de nostalgia e cautela técnica. Peter Zijlstra relembrou que propostas similares foram discutidas há quase duas décadas, em 2007. Dave Hansen trouxe uma análise pragmática sobre o desperdício de memória: ao testar em uma árvore do código-fonte do kernel, o cache de páginas subiu de 11 GB para 16 GB devido ao arredondamento de arquivos pequenos para 64 KB. A discussão agora foca em determinar se a economia de memória nas estruturas struct page (que pode chegar a centenas de gigabytes em servidores gigantes) compensa esse inchaço no cache de arquivos para o uso geral.
Quando isso chega no meu PC?
O patch está em estágio de Prova de Conceito (PoC) e foi enviado como um tópico para discussão no LSF/MM/BPF Summit. Como a mudança afeta o cerne do gerenciamento de memória, não deve ser integrada de imediato na versão estável. A expectativa é que, se aprovada, a base tecnológica comece a aparecer de forma experimental no Kernel Linux 7.0, mas a adoção em distribuições focadas em desktop como Ubuntu ou Fedora pode levar mais tempo, dado que o benefício é maior para datacenters do que para usuários domésticos.
