20 pontos por GN⁺ 2025-08-16 | Ainda não há comentários. | Compartilhar no WhatsApp
  • What the Fork é uma ferramenta multiplataforma que visualiza em tempo real diversos processos de build, como C/C++/Rust
  • Permite identificar facilmente problemas estruturais em sistemas de build existentes, como falta de paralelismo e processos ineficientes
  • Funciona com qualquer sistema de build e linguagem de programação, com suporte a diversas ferramentas de build como make, ninja, gradle, zig e cargo
  • Por meio de monitoramento de chamadas de sistema, visualiza em caixas o tempo de execução, os comandos e as relações de dependência de cada processo
  • Uma ferramenta muito útil para otimização de builds, análise de gargalos e melhoria de desempenho de CI

Introdução e contexto

  • What the Fork é uma ferramenta de visualização de builds em tempo real criada para diagnosticar visualmente as causas de lentidão em builds
  • Em projetos como o LLVM, a compilação pode ser lenta pelo próprio volume de código, mas na maioria dos casos os builds demoram desnecessariamente por causa de configurações ineficientes
  • Até agora, era difícil verificar diretamente os problemas de um build ou enxergar rapidamente problemas estruturais de forma consolidada, por isso havia necessidade de uma ferramenta assim
  • A ferramenta foi projetada para ser multiplataforma e pode ser aplicada a qualquer sistema de build e linguagem

Principais recursos e modo de uso

  • What the Fork não é apenas um profiler de sistema genérico, mas uma ferramenta voltada ao diagnóstico de problemas específicos de build
  • Exemplos incluem detectar o não uso da flag -j no make, concentração excessiva de tempo em um arquivo ou etapa de compilação específica, e comandos que rodam em sequência mesmo quando poderiam ser paralelizados
  • É especialmente eficaz para análise e otimização do desempenho de clean builds em ambientes de CI
  • O modo de uso é executar o comando wtf antes do comando de build (ex.: wtf make, wtf cargo build, wtf npm run build)
  • Quando o build começa, a interface é iniciada e atualiza em tempo real o andamento de cada processo

UI e forma de visualização

  • Cada processo de build é exibido na linha do tempo em formato de caixa, com diferenciação por cores conforme o tipo
  • A relação entre processos pai e filho é representada por uma estrutura aninhada
  • No painel inferior, são exibidos o tempo de execução, o diretório de trabalho e os argumentos completos de comando do processo selecionado

Como funciona

  • Um build é uma combinação de vários processos (ex.: bash, clang, ld)
  • Builds de grande porte usam diversas ferramentas como cargo, make, bazel, gradle e xcodebuild, que na prática executam muitos comandos, dependências, cache e tarefas de agendamento
  • Apenas com a saída do terminal não é possível entender processos aninhados (por exemplo, ld sendo chamado internamente por clang) nem a estrutura detalhada de temporização
  • Para isso, a ferramenta utiliza chamadas de sistema que detectam o início e o fim de processos em cada sistema operacional (macOS: Endpoint Security API, Linux: ptrace(), Windows: Event Tracing for Windows etc.)
  • Dessa forma, é possível reconstruir todo o processo de build e sua linha do tempo, além de identificar o caminho de execução e o tempo de cada etapa
  • Também pode ser usado para rastrear diversos subprocessos além de builds

Casos reais e observações

  • Vários engenheiros (da Delta, Mozilla e Apple) aplicaram a ferramenta em projetos reais e encontraram problemas inesperados
  • Exemplo 1: em um projeto open source que usa Cargo, foi constatado que os arquivos estavam sendo compilados em sequência, revelando falta de paralelismo (com um CPU de 10 núcleos, havia potencial para mais de 10x de melhoria de velocidade)
  • Exemplo 2: em um build do LLVM com Ninja, todos os núcleos de CPU estavam executando tarefas em paralelo de forma eficiente, atingindo uma eficiência de build próxima do ideal
  • Exemplo 3: em um projeto baseado em CMake, foi descoberta uma estrutura ineficiente em que execuções aninhadas de cmake/make/clang e revalidações de versão de Xcode/OS se repetiam 85 vezes (o trabalho real era mínimo)
  • Exemplo 4: em um grande projeto Objective-C usando xcodebuild, foi observada falta de paralelismo no fim do build e um período de 6 segundos de inatividade antes do início; em comparação, o ninja começava a compilar após apenas 0,4 segundo
  • Exemplo 5: ao compilar o Orca Project com Zig, a ordem de build das dependências era definida aleatoriamente, fazendo com que a eficiência do paralelismo variasse conforme a sorte. Observou-se que algumas dependências eram executadas por último, reduzindo o paralelismo
  • Exemplo 6: no projeto GitHub CLI com make/go, o tempo de download de dependências era alto. Reduzir dependências pode melhorar a velocidade de build

Efeitos de uso e limitações

  • A análise visual da linha do tempo permite identificar gargalos inesperados, repetições desnecessárias de dependências e áreas com pouco paralelismo
  • É possível encontrar rapidamente pontos de melhoria estrutural, como problemas de dependência, retrabalho desnecessário e ineficiências de ferramentas específicas, usando isso diretamente para otimizar o desempenho do build
  • A visualização do comando completo de cada processo também permite análises mais detalhadas

Programa beta

  • What the Fork funciona em Windows, Linux e macOS
  • Pessoas e equipes que queiram enviar feedback podem se inscrever para a beta privada (há um link para formulário do Google)

Ainda não há comentários.

Ainda não há comentários.