As Transparent Huge Pages (THP) são uma das otimizações de performance mais poderosas do kernel Linux — elas reduzem consideravelmente a sobrecarga do TLB e aceleram cargas de trabalho intensivas em memória. Ainda assim, muitos administradores conhecem bem o “efeito colateral”: picos imprevisíveis de latência e consumo excessivo de memória que podem paralisar serviços críticos. Por anos, o controle do THP se resumia a dois modos globais (always/madvise) ou a ajustes por madvise em nível de aplicação — um verdadeiro “tudo ou nada” que subutiliza o potencial do THP em ambientes heterogêneos e containerizados.
BPF ao resgate: Políticas dinâmicas de memória

Uma série de patches v8 de Yafang Shao propõe uma solução elegante: integrar um hook BPF para decidir, em tempo real, o tamanho (ordem) ideal das THP ou até desabilitá-las conforme o contexto. A nova struct_ops BPF, denominada bpf_thp_ops, expõe um ponto de extensão sempre que o kernel avalia a alocação de uma folio (página grande). Um programa BPF anexado aqui pode inspecionar qualquer informação acessível — cgroup, flag madvise em cada VMA, métricas de PSI, nome do executável, entre outros — e retornar:
- A ordem de página desejada (por exemplo, 2 MB, 1 GB)
- “0” para recusar a THP e forçar página padrão
Esse modelo transforma o THP de uma opção estática em uma política dinâmica, aplicável por carga de trabalho, namespace de cgroup ou até nível de pressão de memória.
Implementação técnica da bpf_thp_ops
Para habilitar esse comportamento, o patchset:
- Introduz o struct_ops bpf_thp_ops e pontos de hook em
mm/huge_memory.c
- Refatora trechos de khugepaged e rotinas de madvise para invocar o hook BPF
- Adiciona autodocs e selftests que exercitam cenários de cgroup, VMA e PSI
- Inclui Tested-by e Acked-by de desenvolvedores experientes, comprovando maturidade
Como resultado, qualquer administrador pode compilar o kernel com CONFIG_BPF_THPOPS=y
, escrever um programa BPF que use helpers padrão e anexá-lo via bpf_thp_ops
— sem precisar patchar o kernel novamente.
Validação em ambiente de produção
Segundo Shao, uma variação desta abordagem já está operando em numerosos servidores de produção Kubernetes, trazendo benefícios concretos:
- Aplicações Java com ZGC ganham THP de 1 GB para reduzir overhead de page fault
- Serviços sensíveis à latência (e.g., proxies HTTP) recebem sempre páginas padrão, evitando stalls
- Estratégias híbridas que ajustam política conforme PSI detecta pressão de memória
Na prática, é possível manter a eficiência do THP onde faz diferença e mitigar seus riscos onde ele atrapalha — tudo isso sem reiniciar serviços ou rearranjar configurações globais.
Um passo à frente no tuning do kernel
Essa integração de BPF ao subsistema de THP é, sem dúvida, um grande avanço para performance tuning em ambientes complexos e conteinerizados. Em vez de confiar em configurações globais — que muitas vezes deixam um pé atrás, forçando trade-offs —, operadores agora dispõem de uma ferramenta programável, leve e extensível. Por se tratar de uma feature ainda experimental, a interface pode evoluir, mas o design modular garante que futuras versões do kernel continuem suportando políticas BPF sem grandes rupturas.