Gráficos de chama

O Cloud Profiler exibe dados de criação de perfil usando Gráficos de chama. Ao contrário de árvores e gráficos, os gráficos de chama fazem uso eficiente do espaço da tela, representando uma grande quantidade de informações em um formato compacto e legível.

Para introduzir gráficos de chama, esta página ilustra como converter uma árvore em um gráfico de chama e resume os principais recursos dos gráficos de chama.

Como criar um gráfico de chama

Para criar um gráfico de chama a partir de uma árvore, conclua as etapas ilustradas neste diagrama:

Como criar um gráfico de chama.

  1. Remova da árvore as setas que indicam chamadas de função.

  2. Substitua cada nó da árvore por um frame.

    Os frames são retangulares e têm todos a mesma altura. Para o exemplo desta página, o tempo de CPU total usado pela função nomeada no frame determina a largura do frame.

    O pseudocódigo para cada uma das funções é descrito na tabela a seguir. O trabalho intensivo da CPU realizado durante a execução de uma função define o tempo de CPU próprio:

    Pseudocódigo da função Tempo de CPU próprio
    (segundos)
    Tempo de CPU total
    (segundos)
    
    func main():
         foo1()
         foo2()
         // CPU intensive work
         // for 2 seconds 
    2 4 + 3 + 2 = 9
    
    func foo1():
         bar()
         // CPU intensive work
         // for 1.5 seconds 
    1,5 2,5 + 1,5 = 4
    
    func foo2():
         bar()
         // CPU intensive work
         // for 0.5 seconds 
    0,5 2,5 + 0,5 = 3
    
    func bar():
         // CPU intensive work
         // for 2.5 seconds
    2,5 2,5

  3. A próxima etapa é remover o espaço vertical entre os frames e alinhar os frames à esquerda, preservando as sequências de chamada. Como opção, você pode estabelecer um esquema de cores e a cor dos frames de acordo com a definição. Por exemplo, é possível atribuir cores aos frames pelo pacote, pelo tempo de CPU total, pelo tempo de CPU próprio ou por uma medida diferente.

    Depois de remover o excesso de espaços em branco e definir as cores dos frames conforme o tempo de CPU próprio, o gráfico de chama ficará assim:

    Imagem detalhada do gráfico de chama.

    Observe que as pilhas de chamadas para foo1 e foo2 foram preservadas, mesmo que a pilha de chamadas que começa com foo2 esteja agora ao lado do frame para foo1.

Resumo

Este exemplo simples ilustra o seguinte:

  • Os gráficos de chama são uma representação compacta de uma árvore, e você pode recriar uma pilha de chamadas traçando frames de cima para baixo.
  • Os frames nomeiam uma função, e a largura do frame é a medida relativa do tempo de CPU total dessa função. Neste exemplo, como o tempo de CPU total de foo2 é um terço do tempo de CPU total de main, o frame para foo2 é um terço da largura do frame para main.
  • A largura do espaço vazio abaixo de um frame é a medida relativa do tempo de CPU próprio para a função nomeada no frame. Por exemplo, abaixo do frame foo1, 1,5 unidades estão vazias, e 2,5 unidades são ocupadas por bar. Portanto, o tempo de CPU próprio de foo1 é 37,5% do tempo de CPU total, ou 1,5 s.
  • À medida que você segue uma pilha de chamadas, as larguras dos frames diminuem porque o tempo de CPU total de um recebedor da chamada não pode ser maior que o tempo de CPU total do autor da chamada. É esse comportamento que causa a forma de chama.

    No exemplo, foo1 chama bar, e o tempo de CPU total de foo1 é definido como o tempo de CPU total de bar mais o tempo de CPU próprio de foo1. Portanto, o tempo de CPU total de bar não pode ser maior que o tempo de CPU total de foo1.

A seguir