Grafos de Flame

Cloud Profiler muestra los datos de creación de perfiles con gráficos tipo llama. A diferencia de los árboles y los gráficos, los gráficos tipo llama hacen un uso eficiente del espacio de la pantalla mediante la representación de una gran cantidad de información en un formato compacto y legible.

Con el objetivo de presentar los gráficos tipo llama, en esta página se brinda una ilustración de cómo convertir un árbol en un gráfico tipo llama y se resumen las características clave de este tipo de gráficos.

Crea un gráfico tipo llama

Para crear un gráfico tipo llama a partir de un árbol, completa los pasos que se muestran en el siguiente diagrama:

Crear un gráfico tipo llama

  1. Quita del árbol las flechas que indican las llamadas a función.

  2. Reemplaza cada nodo del árbol con un marco.

    Los marcos tienen forma rectangular y todos tienen la misma altura. Para el ejemplo de esta página, el tiempo de CPU total utilizado por la función nombrada en el marco determina el ancho del marco.

    En la siguiente tabla, se describe el seudocódigo de cada una de las funciones. El trabajo intensivo de CPU realizado durante la ejecución de una función define el tiempo de CPU propio:

    Seudocódigo de la función Tiempo de CPU propio
    (segundos)
    Tiempo 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. El siguiente paso es quitar el espacio vertical entre los marcos y alinearlos a la izquierda mientras se conservan las secuencias de llamadas. De manera opcional, puedes definir un esquema de colores y dar color a los marcos según la definición. Por ejemplo, puedes dar color a los marcos por paquete, por tiempo de CPU total, por tiempo de CPU propio o por una medida diferente.

    Después de quitar el exceso de espacios en blanco y de dar color a los marcos por tiempo de CPU propio, el gráfico tipo llama ahora se verá de la siguiente manera:

    Imagen detallada del gráfico tipo llama

    Ten en cuenta que las pilas de llamadas para foo1 y foo2 se conservaron, aunque la pila de llamadas que comienza con foo2 ahora está junto al marco foo1.

Resumen

Este ejemplo simple ilustra lo siguiente:

  • Los gráficos tipo llama son una representación compacta de un árbol, y puedes recrear una pila de llamadas mediante el seguimiento de marcos desde arriba hacia abajo.
  • Los marcos nombran una función, y el ancho del marco es la medida relativa del tiempo de CPU total de esa función. En este ejemplo, debido a que el tiempo de CPU total de foo2 equivale a un tercio del tiempo de CPU total de main, el marco foo2 tiene un tercio del ancho del marco main.
  • El ancho del espacio vacío debajo de un marco es la medida relativa del tiempo de CPU propio de la función nombrada en el marco. Por ejemplo, debajo del marco foo1, 1.5 unidades están vacías y 2.5 unidades están ocupadas por bar. Por lo tanto, el tiempo de CPU propio de foo1 equivale al 37.5% de su tiempo de CPU total, o 1.5 s.
  • A medida que sigues una pila de llamadas, el ancho de los marcos disminuye porque el tiempo de CPU total de un destinatario nunca puede ser superior al tiempo de CPU total del emisor. Este comportamiento es lo que causa la forma tipo llama.

    En el ejemplo, foo1 llama a bar, y el tiempo de CPU total de foo1 se define como el tiempo de CPU total de bar más el tiempo de CPU propio de foo1. Por lo tanto, el tiempo de CPU total de bar no puede ser superior al tiempo de CPU total de foo1.

¿Qué sigue?