Grafik flame

Cloud Profiler menampilkan data pembuatan profil menggunakan Flame Graphs. Tidak seperti hierarki dan grafik, grafik api memanfaatkan ruang layar secara efisien dengan menampilkan sejumlah besar informasi dalam format yang ringkas dan mudah dibaca.

Untuk menampilkan grafik flame, halaman ini menggambarkan cara mengonversi hierarki menjadi grafik flame dan merangkum fitur utama dari grafik flame.

Membuat flame graph

Untuk membuat grafik flame dari hierarki, selesaikan langkah-langkah yang ditunjukkan dalam diagram berikut:

Membuat flame graph.

  1. Hapus panah yang menunjukkan panggilan fungsi dari hierarki.

  2. Ganti setiap node pohon dengan frame.

    Frame berbentuk persegi panjang dan semua frame memiliki tinggi yang sama. Untuk contoh di halaman ini, total waktu CPU yang digunakan oleh fungsi yang dinamai dalam frame menentukan lebar frame.

    Kode semu untuk setiap fungsi dijelaskan dalam tabel berikut. Pekerjaan intensif CPU yang dilakukan selama eksekusi fungsi menentukan waktu CPU mandiri:

    Kode semu fungsi waktu CPU mandiri
    (detik)
    total waktu CPU
    (detik)
    
    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. Langkah berikutnya adalah menghapus ruang vertical antara frame dan frame perataan kiri sekaligus mempertahankan urutan panggilan. Secara opsional, Anda dapat menentukan skema warna dan mewarnai frame sesuai dengan definisi. Misalnya, Anda dapat mewarnai frame menurut paketnya, menurut total waktu CPU, menurut waktu CPU mandiri, atau dengan ukuran yang berbeda.

    Setelah menghapus kelebihan spasi kosong dan pewarnaan frame oleh waktu CPU mandiri, grafik flame kini muncul sebagai berikut:

    Gambar detail grafik flame.

    Perhatikan bahwa stack panggilan untuk foo1 dan foo2 telah dipertahankan, meskipun stack panggilan yang dimulai dengan foo2 kini berada di samping frame untuk foo1.

Ringkasan

Contoh sederhana ini menggambarkan hal berikut:

  • Grafik Flame adalah representasi ringkas dari sebuah hierarki dan Anda dapat membuat ulang stack panggilan dengan merekam aktivitas frame dari atas ke bawah.
  • Frame memberi nama fungsi dan lebar frame adalah ukuran relatif dari total waktu CPU fungsi tersebut. Dalam contoh ini, karena total waktu CPU foo2 adalah sepertiga dari total waktu CPU main, frame untuk foo2 adalah sepertiga lebar frame untuk main.
  • Lebar ruang kosong di bawah frame adalah ukuran relatif waktu CPU mandiri untuk fungsi yang disebutkan dalam frame. Misalnya, di bawah frame foo1, 1,5 unit kosong dan 2,5 unit ditempati oleh bar. Oleh karena itu, waktu CPU mandiri foo1 adalah 37,5% dari total waktu CPU-nya, atau 1,5 dtk.
  • Saat Anda mengikuti stack panggilan, lebar frame akan berkurang karena total waktu CPU tujuan panggilan tidak boleh melebihi total waktu CPU pemanggil. Perilaku inilah yang menyebabkan api terbentuk.

    Dalam contoh ini, foo1 memanggil bar dan total waktu CPU foo1 ditentukan sebagai total waktu CPU bar ditambah waktu CPU mandiri foo1. Oleh karena itu, total waktu CPU bar tidak boleh lebih dari total waktu CPU foo1.

Langkah selanjutnya