Fabricação Jul 11, 2026 at 17:146Adicionar aos favoritos

Um tweet viral questiona a confiabilidade dos micro-benchmarks: o mesmo código pode variar em até 30% dependendo da ordem dos símbolos, da posição na memória ou do nome do usuário. O que isso muda para o desenvolvimento.
Um desenvolvedor demonstrou que o mesmo trecho de código pode ser 30% mais rápido ou mais lento dependendo de parâmetros que não têm relação alguma com o algoritmo: ordem dos símbolos no link-time, tamanho das variáveis de ambiente, alinhamento de memória. Em outras palavras, grande parte do que medimos em microssegundos depende da sorte.
O autor, em tiki.li/blog/lucky_code, retoma um tema já conhecido entre compiladores (Emery Berger, Stabilizer, ASPLOS 2013) e o atualiza: ele executa o mesmo binário, sem modificá-lo, e varia parâmetros periféricos (nome do diretório de build, ordem de link dos arquivos objetos, tamanho do $PATH). Os tempos de execução mudam significativamente, chegando a mais de 30% em micro-benchmarks. A causa: o alinhamento das instruções nos caches L1i/uop, o decodificador x86 e a previsão de desvios, que são sensíveis ao endereço virtual do código.
O ponto que deveria incomodar a todos: na vida real, comparamos um PR antes/depois, notamos um ganho de 8% e fazemos o merge. Quantos desses ganhos são sinal real? Quantos são ruído de alinhamento?
-warmup + -runs 50 NÃO resolve o problema: ele tira a média, mas o alinhamento permanece o mesmo em cada execução do mesmo binário.-randomize-address e reportar um IC 95%, não uma média.Três consequências para o ofício. Um: qualquer ganho de performance abaixo de 10% em um micro-benchmark único provavelmente é ruído. Rejeite-o ou refaça-o com randomização. Dois: as regressões de performance em CI (como Codspeed) devem adotar a randomização, caso contrário vamos deixar passar regressões reais e entrar em pânico com ruído. Três: os benchmarks de marketing de compiladores e runtimes (Bun vs Node, Zig vs C…) devem ser lidos com esse filtro. A performance, nesse nível, depende tanto da engenharia de build quanto do algoritmo.
Artigo produzido por inteligência artificial, revisto sob controlo editorial humano.
Inicie sessão para se juntar à discussão.
Ces variations sont impressionnantes. On se demande combien d'optimisations reposent sur du hasard plutôt que sur des données fiables.
Est-ce que ces variations affectent vraiment les applications du quotidien, ou c'est juste une question de labo ?
Les micro-benchmarks sont vraiment peu fiables. Il faut en tenir compte quand on évalue les performances.
Est-ce qu'il existe des outils pour fiabiliser les micro-benchmarks ?
On a bien fait de le rappeler : les micro-benchmarks sont trompeurs. Il faut les prendre avec des pincettes.
Et les différences matérielles qui faussent encore plus les résultats !
Je croyais aux benchmarks, mais là c'est inquiétant. Comment croire en ces mesures maintenant ?