
Proyek ini adalah upaya R&D KDAB untuk membuat GUI mandiri untuk data kinerja. Sebagai tujuan pertama, kami ingin menyediakan UI seperti kcachegrind di sekitar Linux Perf. Ke depan, kami bermaksud mendukung berbagai format data kinerja lainnya di bawah payung ini.
Berikut adalah beberapa tangkapan layar yang menunjukkan fitur terpenting dari hotspot dalam aksi:
Fitur utama hotspot adalah visualisasi grafis dari file perf.data .


CATATAN: Fungsi inline memiliki perbatasan yang lebih gelap daripada yang tidak ditentukan.





Garis waktu memungkinkan penyaringan hasil berdasarkan waktu, proses atau utas. Tampilan data diperbarui sesuai.



Anda juga dapat meluncurkan perf dari hotspot, untuk membuat profil aplikasi yang baru dimulai atau untuk melampirkan proses yang sudah berjalan (ES). Namun, pertimbangkan peringatan di bawah ini.


Catatan: Hotspot belum dikemas pada semua distribusi Linux. Dalam kasus seperti itu, atau jika Anda ingin menggunakan versi terbaru, silakan gunakan AppImage yang akan berfungsi pada distro Linux baru -baru ini dengan baik.
Hotspot tersedia di AUR (https://aur.archlinux.org/packages/hotspot).
Hotspot tersedia di Debian (https://packages.debian.org/hotspot) dan ubuntu (https://packages.ubuntu.com/hotspot).
Ebuild Hotspot tersedia dari overlay kami (https://github.com/kdab/kdab-overlay).
Hotspot tersedia di fedora (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/).
Anda dapat menuju ke rilis terbaru atau build kontinu. Dalam kedua kasus, Anda akan menemukan appImage di bawah "aset" yang dapat Anda unduh. Untar file appImage (dalam hal rilis terbaru), kemudian dapat dieksekusi dan kemudian jalankan.
Silakan gunakan build terbaru untuk mendapatkan versi terbaru. Jika tidak berhasil, silakan laporkan bug dan uji versi stabil terbaru.
Catatan: Perpustakaan atau preferensi sistem Anda tidak diubah. Jika Anda ingin menghapus hotspot lagi, cukup hapus file yang diunduh. Pelajari lebih lanjut tentang AppImage di sini.
Untuk mengetahui cara men -debug appImage, lihat peretasan.
Membangun hotspot dari sumber memberi Anda yang terbaru dan terhebat, tetapi Anda harus memastikan semua dependensinya tersedia. Sebagian besar pengguna mungkin harus menginstal hotspot dari manajer paket distro atau sebagai appImage.
Untuk semua orang yang ingin berkontribusi pada hotspot atau menggunakan versi terbaru tanpa nada terperinci appImage ditemukan di peretasan.
Pertama -tama, catat beberapa data dengan perf . Untuk mendapatkan backtraces, Anda perlu mengaktifkan mode CallGraph Dwarf:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] Sekarang, jika Anda memiliki hotspot yang tersedia di mesin yang sama, yang perlu Anda lakukan adalah meluncurkannya. Ini akan secara otomatis membuka file perf.data di direktori saat ini (mirip dengan perf report ).
Atau, Anda dapat menentukan jalur ke file data di konsol:
hotspot /path/to/perf.data Bergantung pada kebutuhan Anda, Anda mungkin ingin melewati opsi baris perintah tambahan ke hotspot. Hal ini memungkinkan untuk satu kali opsi konfigurasi yang ditetapkan yang ditemukan di GUI di bawah "Pengaturan" dan juga memungkinkan untuk mengonversi file data Linux Perf menjadi format perfData yang lebih kecil dan portabel (lihat Impor / Ekspor untuk detail tentang itu). Semua opsi baris perintah ditampilkan dengan --help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
Hotspot mendukung cara yang sangat kuat untuk melakukan analisis waktu tunggu, atau profil di luar-CPU. Analisis ini didasarkan pada tracepoints kernel di penjadwal Linux. Dengan merekam data itu, kita dapat menemukan waktu Delta di mana utas tidak berjalan di CPU, tetapi malah di luar-CPU. Mungkin ada beberapa alasan untuk itu, yang semuanya dapat ditemukan menggunakan teknik ini:
read() atau write()mmap()nanosleep() atau yield()futex() dll.Dengan memanfaatkan poin jejak kernel dalam penjadwal, overhead cukup mudah dikelola dan kami hanya membayar harga, ketika prosesnya benar -benar dialihkan. Terutama kami tidak membayar harga ketika misalnya operasi kunci mutex dapat ditangani secara langsung di ruang pengguna.
Untuk melakukan analisis di luar-CPU dengan hotspot, Anda perlu merekam data dengan perintah yang sangat spesifik:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >Atau, Anda dapat menggunakan kotak centang Off-CPU di halaman catatan terintegrasi Hotspot.
Selama analisis, Anda kemudian dapat beralih di antara tampilan biaya "siklus" untuk data ON-CPU ke tampilan biaya "off-cpu" untuk analisis waktu tunggu. Seringkali, Anda akan ingin berubah di antara keduanya, misalnya untuk menemukan tempat dalam kode Anda yang mungkin memerlukan paralelisasi lebih lanjut (lihat juga hukum Amdahl).
Biaya "SCHART: SCARD_SWITCH" juga akan ditunjukkan kepada Anda. Tetapi menurut saya itu kurang berguna, karena hanya menunjukkan jumlah sakelar penjadwal. Panjang waktu di antara sering kali lebih menarik bagi saya - dan itulah yang ditunjukkan kepada Anda dalam metrik "off -cpu".
Jika Anda merekam pada sistem tertanam, Anda ingin menganalisis data pada mesin pengembangan Anda dengan hotspot. Untuk melakukannya, pastikan sysroot Anda berisi informasi debug yang diperlukan untuk bersantai (lihat di bawah). Kemudian catat data pada sistem tertanam Anda:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real fileTidak apa -apa jika mesin tertanam Anda menggunakan platform yang berbeda dari host Anda. Pada host Anda, lakukan langkah -langkah berikut kemudian untuk menganalisis data:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataJika Anda secara manual mengerahkan aplikasi dari jalur di luar sysroot Anda, lakukan ini sebagai gantinya:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataJika aplikasi Anda juga menggunakan pustaka di luar sysroot Anda dan apph, lakukan ini:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataDan, kasus terburuk, jika Anda juga menggunakan file debug split di lokasi non-standar, lakukan ini:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data Format file perf.data tidak mandiri. Untuk menganalisisnya, Anda memerlukan akses ke executable dan perpustakaan dari proses yang diprofilkan, bersama dengan simbol debug. Ini membuatnya sulit untuk berbagi file tersebut di seluruh mesin, misalnya untuk mendapatkan bantuan dari seorang kolega untuk menyelidiki masalah kinerja, atau untuk tujuan pelaporan bug.
Hotspot memungkinkan Anda untuk mengekspor data yang dianalisis, yang kemudian sepenuhnya mandiri. Fitur ini dapat diakses melalui tindakan menu "File> Save as". Data kemudian disimpan dalam file *.perfparser mandiri. Untuk mengimpor data ke Hotspot lagi, cukup buka file itu langsung di tempat file perf.data asli.
Sebagai alternatif, Anda juga dapat melakukan ekspor dari baris perintah (tanpa GUI, jadi itu juga dapat digunakan dengan build otomatis) menggunakan opsi --exportTo .
Catatan: Format file belum stabil. Artinya data yang diekspor oleh satu versi hotspot hanya dapat dibaca kembali dengan versi yang sama. Masalah ini akan diselesaikan di masa depan, seiring berjalannya waktu.
Hotspot saat ini hanya menunjukkan nama tracepoints di timeline.


Hotspot termasuk disassembler, yang dapat menunjukkan biaya per instruksi kepada Anda. Disassembler menggunakan warna untuk menunjukkan garis perakitan mana yang sesuai dengan baris kode sumber mana. Untuk navigasi yang lebih mudah, Anda cukup mengklik garis dan tampilan lainnya akan melompat ke sana. Anda dapat mengikuti panggilan fungsi dengan klik ganda. Dalam tampilan SourceCode Anda dapat menekan Ctrl+F atau tekan ikon pencarian untuk membuka jendela pencarian.
Jika Anda memiliki sumber di direktori yang berbeda, Anda dapat menggunakan --sourcePaths atau pengaturan untuk memilih memberi tahu Disassembler untuk mencari kode sumber di sana.
Jika ada yang pecah di atas dan outputnya kurang dapat digunakan daripada perf report , silakan laporkan masalah di GitHub. Yang mengatakan, ada beberapa masalah yang diketahui bahwa orang mungkin tersandung:
Melepaskan tumpukan untuk menghasilkan backtrace adalah seni yang gelap dan bisa salah dalam banyak hal. Hotspot bergantung pada perfparser (lihat di bawah), yang pada gilirannya bergantung pada libdw dari elfutils untuk melepaskan tumpukan. Ini bekerja cukup baik sebagian besar waktu, tetapi masih bisa salah. Yang paling menonjol, lepas landas akan gagal saat:
perf.data hilang--debugPaths <paths> : Gunakan ini saat Anda memiliki file debug terpisah di lokasi non-standar--extraLibPaths <paths> : Gunakan ini saat Anda telah memindahkan perpustakaan ke beberapa lokasi lain sejak perekaman--appPath <paths> : Ini adalah kombinasi dari dua bidang di atas. Jalur ini dilintasi secara rekursif, mencari file dan perpustakaan debug.--sysroot <path> : Gunakan ini saat Anda mencoba untuk memeriksa file data yang direkam pada platform tertanam-O2 -g . Anda harus mengulangi langkah perf record Secara default, perf record hanya menyalin bagian dari tumpukan ke file data. Ini dapat menyebabkan masalah dengan tumpukan panggilan yang sangat dalam, yang akan dipotong di beberapa titik. Masalah ini akan mematahkan pohon panggilan top-down di hotspot, seperti yang divisualisasikan dalam tampilan top-down atau grafik api. Untuk memperbaikinya, Anda dapat mencoba meningkatkan ukuran tumpukan, yaitu:
perf record --call-graph dwarf,32768
Perhatikan bahwa ini dapat secara dramatis meningkatkan ukuran file perf.data - gunakan dengan hati -hati. Juga lihat man perf record .
Untuk beberapa skenario, panggilan fungsi rekursif hanya gagal untuk dilepas. Lihat juga #93
Hotspot mendukung pengunduhan simbol debug melalui DebugInfod. Ini dapat diaktifkan dengan menambahkan URL unduhan dalam pengaturan atau meluncurkan hotspot dengan DEBUGINFOD_URLS yang didefinisikan di lingkungan.
Dibandingkan dengan perf report , hotspot kehilangan banyak fitur. Beberapa di antaranya direncanakan untuk diselesaikan di masa depan. Orang lain mungkin berpotensi tidak pernah diimplementasikan. Tetapi ketahuilah bahwa fitur -fitur berikut tidak tersedia di hotspot saat ini:
--itrace , --mem-mode , --branch-stack dan --branch-history , tidak didukung Bukan ide yang baik untuk meluncurkan hotspot dengan sudo atau sebagai pengguna root . Lihat misalnya mengedit file sebagai root untuk artikel tentang masalah ini. Masalah #83 juga relevan dalam kontak ini.
Tetapi tanpa hak superuser, Anda mungkin melihat pesan kesalahan seperti berikut saat menggunakan fitur catatan Hotspot:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
Untuk mengatasi batasan ini, hotspot dapat menjalankan perf dirinya dengan hak istimewa yang ditinggikan.
Ekspor data saat ini terbatas pada format yang hanya dapat dibaca kembali dengan hotspot dari versi yang sama. Ini membuat interop dengan alat visualisasi lain kuasi tidak mungkin. Ini diketahui dan akan ditingkatkan di masa depan. Terutama dukungan untuk ekspor ke pemirsa web seperti perfetto atau mozilla profiler direncanakan tetapi belum diimplementasikan. Patch Selamat Datang!
Proyek ini memanfaatkan utilitas perfparser yang sangat baik yang dibuat oleh perusahaan QT untuk IDE pencipta QT mereka. Jika Anda sudah menggunakan QT Creator, pertimbangkan untuk memanfaatkan penganalisa penggunaan CPU terintegrasi.
Hotspot dilisensikan di bawah GPL V2+. Lihat lisensi.gpl.txt untuk informasi lebih lanjut, atau hubungi [email protected] Jika ada ketentuan lisensi ini tidak jelas bagi Anda.