Grafik flame

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

Untuk memperkenalkan flame graph, halaman ini mengilustrasikan cara mengonversi hierarki menjadi flame graph dan meringkas fitur utama flame graph.

Membuat grafik api

Untuk membuat grafik api dari hierarki, selesaikan langkah-langkah yang diilustrasikan dalam diagram berikut:

Membuat grafik api.

  1. Hapus panah yang menunjukkan panggilan fungsi dari hierarki.

  2. Ganti setiap node hierarki dengan frame.

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

    Kode pseudo 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 spasi vertikal di antara frame dan frame rata kiri sambil mempertahankan urutan panggilan. Secara opsional, Anda dapat menentukan skema warna dan mewarnai frame sesuai dengan definisi. Misalnya, Anda dapat mewarnai frame berdasarkan paketnya, berdasarkan total waktu CPU, berdasarkan waktu CPU mandiri, atau berdasarkan ukuran yang berbeda.

    Setelah menghapus spasi kosong yang berlebihan dan mewarnai frame berdasarkan waktu CPU mandiri, diagram api kini muncul sebagai berikut:

    Gambar mendetail dari flame graph.

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

Ringkasan

Contoh sederhana ini mengilustrasikan hal berikut:

  • Grafik api adalah representasi ringkas dari hierarki dan Anda dapat membuat ulang stack panggilan dengan melacak frame dari atas ke bawah.
  • Frame memberi nama fungsi dan lebar frame adalah pengukuran 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 pengukuran relatif waktu CPU mandiri untuk fungsi yang dinamai dalam frame. Misalnya, di bawah frame foo1, 1,5 unit kosong dan 2,5 unit diisi oleh bar. Oleh karena itu, waktu CPU mandiri foo1 adalah 37,5% dari total waktu CPU-nya, atau 1,5 s.
  • Saat Anda mengikuti stack panggilan, lebar frame akan berkurang karena total waktu CPU pemanggil tidak boleh lebih dari total waktu CPU pemanggil. Perilaku ini yang menyebabkan bentuk api.

    Dalam contoh, 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