Gráficos de rastreio em pilhas sobrepostas
O Cloud Profiler apresenta dados de criação de perfis através de gráficos de chamas. Ao contrário das árvores e dos gráficos, os gráficos de chamas usam o espaço do ecrã de forma eficiente, representando uma grande quantidade de informações num formato compacto e legível.
Para apresentar os gráficos de chamas, esta página ilustra como converter uma árvore num gráfico de chamas e resume as principais funcionalidades dos gráficos de chamas.
Criar um gráfico de rastreio em pilhas sobrepostas
Para criar um gráfico de chamas a partir de uma árvore, conclua os passos ilustrados no diagrama seguinte:
Remova da árvore as setas que indicam chamadas de funções.
Substitua cada nó da árvore por uma moldura.
Os frames têm uma forma retangular e todos os frames têm a mesma altura. Para o exemplo nesta página, o tempo total da CPU usado pela função com o nome no frame determina a largura do frame.
O pseudocódigo de cada uma das funções está descrito na tabela seguinte. O trabalho intensivo da CPU realizado durante a execução de uma função define o tempo da CPU próprio:
Pseudocódigo de função Tempo da CPU próprio
(segundos)Tempo total da CPU
(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 O passo seguinte é remover o espaço vertical entre os frames e alinhar os frames à esquerda, mantendo as sequências de chamadas. Opcionalmente, pode definir um esquema de cores e colorir as frames de acordo com a definição. Por exemplo, pode colorir os frames pelo respetivo pacote, pelo tempo total da CPU, pelo tempo da CPU próprio ou por uma medida diferente.
Depois de remover os espaços em branco excessivos e colorir os frames pelo tempo de CPU próprio, o gráfico de chamas aparece agora da seguinte forma:
Repare que as pilhas de chamadas para
foo1
efoo2
foram preservadas, mesmo que a pilha de chamadas que começa comfoo2
esteja agora junto ao frame defoo1
.
Resumo
Este exemplo simples ilustra o seguinte:
- Os gráficos de chamas são uma representação compacta de uma árvore e pode recriar uma pilha de chamadas rastreando frames de cima para baixo.
- Os frames dão nome a uma função e a largura do frame é a medida relativa
do tempo total da CPU dessa função.
Neste exemplo, uma vez que o tempo total da CPU de
foo2
é um terço do tempo total da CPU demain
, o frame defoo2
tem um terço da largura do frame demain
. - A largura do espaço vazio abaixo de um frame é a medida relativa do tempo de CPU próprio para a função com o nome no frame.
Por exemplo, abaixo da moldura
foo1
, 1,5 unidades estão vazias e 2,5 unidades estão ocupadas porbar
. Assim, o tempo da CPU próprio defoo1
é de 37,5% do respetivo tempo total da CPU ou 1,5 s. À medida que segue uma pilha de chamadas, as larguras dos frames diminuem porque o tempo total da CPU de um destinatário nunca pode ser superior ao tempo total da CPU do autor da chamada. Este comportamento é o que causa a forma de chama.
No exemplo,
foo1
chamabar
e o tempo total da CPU defoo1
é definido como o tempo total da CPU debar
mais o tempo da CPU próprio defoo1
. Por conseguinte, o tempo total de CPU debar
não pode ser superior ao tempo total de CPU defoo1
.
O que se segue?
- Selecione os perfis a analisar
- Interaja com o gráfico de rastreio em pilhas sobrepostas
- Filtre o gráfico de rastreio em pilhas sobrepostas
- Foque o gráfico de rastreio em pilhas sobrepostas
- Compare perfis