Categorias
Kernel Linux

Google propõe uso do ThinLTO distribuído para acelerar a compilação do kernel Linux com LLVM

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.

Por Emanuel Negromonte

Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.

Sair da versão mobile