Skip to content
Latchkey

O Que É um Flame Graph? Visualização de Profiling Explicada

Um flame graph é uma visualização que mostra como o tempo ou o uso de recursos se distribui em uma hierarquia de operações aninhadas, tornando os gargalos visualmente óbvios.

Um flame graph transforma uma pilha confusa de dados de tempo em uma imagem que você lê em segundos. Originalmente inventado para profiling de CPU, ele se tornou também a forma padrão de visualizar traces distribuídos. Uma vez que você sabe ler um, encontrar para onde o tempo vai, no código ou em um pipeline, torna-se um olhar em vez de uma caça.

Como ler um flame graph

Em um flame graph, cada caixa é uma operação, e sua largura representa quanto tempo ou recurso ela consumiu: mais larga significa mais. As caixas se empilham verticalmente para mostrar o aninhamento, uma caixa fica sobre aquela que a chamou. As caixas mais largas são para onde o tempo vai, então seu olho é atraído direto para o gargalo.

A largura é o que importa

A regra crucial de leitura é que a largura, não a altura, sinaliza custo. Uma torre alta e estreita é um aninhamento profundo que leva pouco tempo; uma caixa larga, por mais rasa que seja, está consumindo recurso significativo. Escanear em busca das caixas mais largas é a forma mais rápida de encontrar o que otimizar.

Flame graphs para profiling

Em seu uso original, os flame graphs agregam stack traces amostrados de um profiler, de modo que a largura de cada função reflete quantas vezes ela esteve na CPU. Isso torna os caminhos quentes de um programa imediatamente visíveis, substituindo tabelas tediosas de profiler por uma imagem intuitiva.

Flame graphs para traces

A mesma forma visualiza um trace distribuído: cada span se torna uma caixa, a largura é sua duração, e o aninhamento segue a árvore de spans pai-filho. Um flame graph de trace mostra num relance qual chamada downstream domina uma requisição lenta, e é por isso que as ferramentas de tracing renderizam traces dessa forma.

Flame graphs em CI/CD

Aplique a ideia a uma execução de pipeline e você obtém um flame graph do build: a execução é a raiz, os jobs e steps são caixas aninhadas, e a largura é o tempo de relógio. O step mais largo é a parte mais lenta do seu build, tornando os flame graphs uma forma direta de ver onde o tempo do pipeline é gasto e o que otimizar primeiro.

Principais conclusões

  • Um flame graph mostra o uso de tempo ou recursos em operações aninhadas.
  • A largura sinaliza custo; as caixas mais largas são os gargalos.
  • Ele visualiza tanto profiles de CPU quanto traces distribuídos.
  • Aplicado a um pipeline, revela os passos de build mais lentos.

Guias relacionados