Memfokuskan grafik flame

Saat menggunakan filter Fokus, Anda memilih satu fungsi, dan flame graph menampilkan jalur kode yang mengalir ke dalam, dan keluar dari, fungsi tertentu tersebut. Grafik yang difokuskan memungkinkan Anda melakukan dua tugas umum:

  1. Menganalisis konsumsi resource gabungan dari fungsi tertentu yang dipanggil dari beberapa tempat.
  2. Menganalisis proporsi waktu yang dihabiskan dalam fungsi untuk berbagai pemanggil fungsi.

Misalnya, bagaimana cara menganalisis konsumsi resource di sekitar fungsi Sort menggunakan flame graph standar?

Fungsi pengurutan dalam grafik flame.

Di bagian berikutnya, kita akan memfokuskan grafik pada Sort dan menjawab pertanyaan ini. Flame graph di halaman ini dibuat dengan Mode warna dan Bandingkan dengan ditetapkan ke nilai default Nama dan Tidak ada.

Penjelasan grafik yang difokuskan

Grafik yang dibuat oleh filter Fokus secara efektif membuat dua grafik api untuk fungsi yang ditentukan dan menggabungkannya:

Flame graph untuk berfokus pada fungsi pengurutan.

Pada grafik sebelumnya, bingkai yang sesuai dengan fungsi Sort adalah lebar penuh dan ditandai. Teks frame mencakup nama fungsi, persentase, dan jumlah profil yang digunakan untuk analisis. Dalam hal ini, metrik menunjukkan bahwa fungsi Sort, secara agregat, menghabiskan 8,85% waktu CPU.

Bagian bawah grafik sebelumnya memperlakukan fungsi Sort sebagai titik awal grafik api standar dan menampilkan semua pemanggilnya. Anda dapat membuat bagian ini dengan flame graph standar menggunakan filter Tampilkan dari frame:

Bagian bawah grafik flame yang menampilkan pemanggilan pengurutan.

Paruh atas grafik menampilkan pemanggil Sort dengan pemanggil tersembunyi. Anda dapat membuat perkiraan paruh atas menggunakan serangkaian filter. Mulai dengan menambahkan filter Show stacks untuk Sort. Selanjutnya, untuk setiap fungsi yang dipanggil oleh Sort, tambahkan Sembunyikan stack atau Sembunyikan frame. Dalam situasi ini, Anda akan menambahkan Sembunyikan stack untuk quickSort guna menghilangkan fungsi ini dan turunannya, lalu menambahkan Sembunyikan frame untuk Len dan maxDepth:

Bagian atas grafik flame yang menampilkan pemanggil pengurutan.

Dengan menggunakan filter ini, perkiraan paruh atas grafik yang difokuskan menunjukkan bahwa fungsi Sort dijangkau melalui stack panggilan yang berbeda. Namun, metrik tidak digabungkan sehingga grafik tidak menggambarkan konsumsi metrik secara keseluruhan menurut Sort.

Grafik yang difokuskan sedikit berbeda dengan grafik yang hanya menggabungkan kedua perkiraan:

  • Ada satu frame untuk fungsi fokus Sort.
  • Frame fungsi fokus ditandai, merupakan frame lebar penuh, dan menampilkan metrik yang merupakan agregasi dari semua stack panggilan.
  • Ada beberapa stack panggilan, masing-masing dimulai dengan frame root, sehingga Anda dapat melihat seluruh stack panggilan.

Memilih bingkai

Jika Anda memilih frame dalam grafik yang difokuskan, flame graph akan digambar ulang dengan stack panggilan frame tersebut ditampilkan secara lebih mendetail. Jika frame dicapai melalui beberapa stack panggilan, setiap stack panggilan tersebut akan ditampilkan. Stack panggilan yang tidak menyertakan frame akan disembunyikan dari tampilan. Untuk memulihkan grafik ke status awalnya, pilih frame yang sesuai dengan fungsi fokus.

Pada contoh sebelumnya, Sort dipanggil oleh (*byFreq).sort dan oleh (*byLiteral).sort. Untuk melihat stack panggilan (*byLiteral).sort secara lebih mendetail, pilih frame tersebut. Anda dapat memilih frame lain dan lebih memfilter stack panggilan yang ditampilkan:

Grafik flame diperluas tentang pengurutan.

Untuk memulihkan flame graph yang difokuskan ke status aslinya, pilih frame yang menampilkan nilai filter Focus. Dalam hal ini, pilih bingkai abu-abu dengan label Sort. Perhatikan bahwa untuk memulihkan flame graph standar ke status aslinya, Anda harus memilih frame root.

Menganalisis grafik

Untuk menganalisis flame graph yang difokuskan, Anda menggunakan kontrol dan filter yang sama dengan yang Anda gunakan untuk menganalisis flame graph standar. Namun, ada perbedaan dalam cara grafik berinteraksi dengan pointer:

  • Jika pointer diarahkan ke frame, tooltip akan menampilkan data metrik. Untuk flame graph standar, data metrik total untuk frame akan ditampilkan. Untuk flame graph yang difokuskan, data metrik gabungan untuk fungsi akan ditampilkan.

  • Jika Anda memilih frame, grafik api akan digambar ulang dengan frame tersebut ditampilkan dengan lebar penuh. Untuk memulihkan flame graph standar ke bentuk aslinya, Anda harus memilih frame atas. Untuk memulihkan flame graph yang difokuskan ke bentuk aslinya, Anda harus memilih frame yang menampilkan nilai filter fokus.

Untuk informasi tentang grafik yang difokuskan saat Anda membandingkan profil, lihat Memfokuskan perbandingan.

Menetapkan filter fokus

Ada berbagai metode yang dapat Anda gunakan untuk menetapkan filter fokus, tetapi hasilnya adalah grafik yang sama.

Dengan menggunakan grafik

Arahkan kursor ke bingkai yang diinginkan, lalu klik Fokus di tooltip bingkai. Fungsi fokus diekstrak dari frame. Dalam contoh ini, flame graph, yang diperluas di sekitar fungsi (*huffmanBitWriter).write, menampilkan tiga stack panggilan yang berbeda:

Flame graph yang berfokus pada frame kecil.

Dengan menggunakan daftar fokus

Untuk memfokuskan flame graph pada fungsi tertentu, lakukan hal berikut:

  1. Klik Daftar untuk membuka tabel Pilih fungsi fokus.
  2. Pilih nama fungsi dari tabel atau, untuk fungsi tertentu, klik Actions , lalu pilih Focus:

Pilih tabel fungsi fokus.

Jika fungsi yang Anda pilih dapat dipanggil melalui stack panggilan yang berbeda, setiap stack panggilan akan ditampilkan dalam grafik api.

Anda dapat mengurutkan baris tabel dalam urutan menaik atau menurun dengan memilih elemen header tabel. Setiap baris dalam tabel menampilkan nama fungsi dan statistik yang terkait dengan eksekusi fungsi. Tabel ini menunjukkan bahwa fungsi (*compressor).deflate memerlukan waktu 2,78 detik untuk dijalankan, dengan 1,8 detik dihabiskan dalam fungsi itu sendiri dan sisa waktu dihabiskan dalam stack panggilannya. Satu kolom persentase melaporkan bahwa 57% dari total waktu eksekusi dihabiskan dalam fungsi (*compressor).deflate. Kolom lain melaporkan bahwa 89% dari waktu, (*compressor).deflate atau fungsi dalam stack panggilannya, sedang dieksekusi. Terakhir, kolom jumlah melaporkan bahwa ada tiga urutan yang memanggil fungsi (*compressor).deflate.

Saat Anda membandingkan profil, konten daftar fokus akan berbeda. Untuk mengetahui informasi selengkapnya, lihat Memfokuskan perbandingan.

Dengan menggunakan panel filter

Klik teks abu-abu Tambahkan filter data profil di panel filter, lalu masukkan Focus: dan string yang mengidentifikasi fungsi yang akan difokuskan. Anda dapat menggunakan substring, termasuk awalan paket, atau nama lengkap. Saat Anda memberikan string yang ambigu, fungsi yang merupakan kecocokan terbaik dengan string akan dipilih.

Jika mau, Anda dapat mengklik Filters, memilih Focus, lalu memasukkan string identifikasi.

Jika fungsi yang Anda pilih dapat dipanggil melalui stack panggilan yang berbeda, setiap stack panggilan akan ditampilkan dalam grafik api.

Menghapus filter fokus

Untuk menghapus filter fokus, klik Tutup pada filter.

Langkah selanjutnya