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:
Remova da árvore as setas que indicam chamadas de função.
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 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:
Observe que as pilhas de chamadas para
foo1
efoo2
foram preservadas, mesmo que a pilha de chamadas que começa comfoo2
esteja agora ao lado do frame parafoo1
.
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 demain
, o frame parafoo2
é um terço da largura do frame paramain
. - 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 porbar
. Portanto, o tempo de CPU próprio defoo1
é 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
chamabar
, e o tempo de CPU total defoo1
é definido como o tempo de CPU total debar
mais o tempo de CPU próprio defoo1
. Portanto, o tempo de CPU total debar
não pode ser maior que o tempo de CPU total defoo1
.
A seguir
- Selecionar os perfis a serem analisados
- Interagir com o gráfico de chama
- Filtrar o gráfico de chama
- Como focar o gráfico de chama
- Comparar perfis