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:
- Menganalisis konsumsi resource gabungan dari fungsi tertentu yang dipanggil dari beberapa tempat.
- 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?
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:
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:
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
:
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:
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:
Dengan menggunakan daftar fokus
Untuk memfokuskan flame graph pada fungsi tertentu, lakukan hal berikut:
- Klik Daftar list untuk membuka tabel Pilih fungsi fokus.
- Pilih nama fungsi dari tabel atau, untuk fungsi tertentu, klik Actions more_vert, lalu pilih Focus:
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 arrow_upward menaik atau menurun arrow_downward 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 close pada filter.