Engenheiros do Google estão propondo uma mudança significativa na forma como o kernel Linux é compilado com LLVM/Clang. A ideia é adotar o modo distribuído do ThinLTO — uma técnica de otimização em tempo de linkagem — para substituir o atual modelo “in-process”.
Essa mudança visa reduzir o tempo de build, melhorar a escalabilidade e facilitar a integração com ferramentas como o KPatch para live-patching do kernel.
Entendendo as diferenças entre ThinLTO in-process e distribuído
O ThinLTO pode funcionar em dois modos distintos:
- In-process: A compilação backend (BE) e o thin-link são acionados diretamente pelo linker, com execução multithread.
- Distribuído: O linker gera arquivos de índice ThinLTO, e a compilação backend ocorre em etapas separadas, podendo ser distribuída entre diferentes máquinas.
Embora o modo in-process seja mais simples de configurar, ele oferece menos controle sobre os passos do build e consome mais memória. Já o modo distribuído permite customização por etapa, uso eficiente de recursos e paralelização real.
Benefícios práticos do modo distribuído
Segundo os engenheiros da Google, o ThinLTO distribuído é mais adequado ao modelo de build do kernel, conhecido como KBuild. Com ele, cada etapa da compilação fica registrada, facilitando o debug. Além disso, é possível manter opções de compilação específicas para cada arquivo.
Outro ponto positivo é a compatibilidade com ferramentas como o objtool e o livepatch, que exigem acesso aos objetos finais da compilação.
Como a abordagem funciona na prática
Na proposta da Google, os arquivos intermediários de IR (Intermediate Representation) ganham extensões específicas como .final_o
para evitar conflitos com regras existentes nos Makefiles. Dessa forma, o processo de compilação se adapta ao fluxo tradicional do kernel sem comprometer sua estrutura.
A equipe também introduziu um novo parâmetro no Kconfig
: CONFIG_LTO_CLANG_THIN_DIST
. Quando ativado, o Makefile
principal passa a gerar os objetos finais seguindo o fluxo ThinLTO distribuído.
Explicação para quem é iniciante ou não está familiarizado com os termos
Para quem não está familiarizado com termos como “compilação” ou “otimização em tempo de linkagem”, vale imaginar o seguinte: compilar um sistema como o Linux é como montar um carro do zero, peça por peça. O que o Google propõe com o ThinLTO distribuído é uma forma mais organizada e eficiente de montar esse “carro”, separando algumas etapas e distribuindo tarefas entre várias “oficinas” (computadores ou núcleos de processamento).
Em vez de fazer tudo em sequência em um só lugar — o que pode demorar muito e consumir mais energia — o processo é dividido, permitindo que várias partes sejam montadas ao mesmo tempo, economizando tempo e memória. É como preparar um almoço em equipe: enquanto uma pessoa faz o arroz, outra corta os legumes e uma terceira grelha a carne. No final, tudo fica pronto mais rápido. Assim funciona o ThinLTO distribuído — ele ajuda a construir o sistema de forma mais ágil, sem sobrecarregar o computador.
Desafios enfrentados durante a implementação
Para integrar essa abordagem ao KBuild, os engenheiros precisaram ajustar:
- O uso de arquivos
.a
e.o
, criando índices individuais para cada objeto; - As opções de compilador, filtrando flags incompatíveis com o backend;
- O tratamento de arquivos que não passam pelo LTO, como os em assembly;
- A padronização de paths, evitando erros em módulos importados com nomes diferentes.
Esses ajustes foram fundamentais para garantir a estabilidade do build distribuído sem quebrar regras existentes do sistema de compilação.
Comparativo de desempenho entre os modos de compilação
Testes feitos com o kernel Linux em arquitetura x86_64 e LLVM 20.1 mostraram que:
- O ThinLTO distribuído aumentou o tempo de build em apenas 33% em relação ao modo tradicional (non-LTO).
- Já o ThinLTO in-process foi 168% mais lento, além de exigir mais RAM.
Quando comparados diretamente, ambos entregam código final equivalente, mas o modo distribuído oferece mais controle e menor impacto no sistema.
Google já utiliza ThinLTO distribuído internamente
A própria Google já adota o modelo distribuído do ThinLTO em sua infraestrutura. Essa decisão se baseia em fatores como escalabilidade, economia de memória e compatibilidade com ferramentas internas.
Para o kernel Linux, a empresa espera que essa abordagem torne a compilação mais previsível, rápida e fácil de integrar com sistemas complexos de build, como o Bazel.
O próximo passo: suporte a módulos
Neste momento, o patch desenvolvido cobre apenas a imagem principal do kernel (vmlinux
). Entretanto, os engenheiros já planejam uma extensão para suportar também os módulos do kernel. Essa etapa virá em atualizações futuras, após revisão e aceitação da proposta inicial.
Conclusão: um avanço promissor para o build do Linux
A proposta da Google de adotar o ThinLTO distribuído representa um avanço técnico importante para o kernel Linux. Com ganhos em desempenho, escalabilidade e controle, a ideia tem potencial para se tornar o novo padrão de builds otimizados com LLVM/Clang.
Além de acelerar os tempos de compilação, a abordagem melhora a integração com ferramentas de depuração e manutenção, tornando o desenvolvimento do kernel mais eficiente.
Quer conhecer os detalhes técnicos da proposta? Acesse a discussão oficial no LLVM Discourse e acompanhe os próximos passos da integração do ThinLTO distribuído ao kernel Linux.