Linux e performance

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

Engenheiros do Google trabalham em otimização da compilação do kernel Linux usando ThinLTO distribuído com LLVM Clang
Google propõe build distribuído com ThinLTO para acelerar a compilação do kernel Linux.

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.

Emanuel Negromonte Autor
Autor
Jornalista especialista em Linux a mais de 20 anos. Fundador do SempreUpdate e entusiasta do software livre.