Linux Profiling dengan Performance Analyzer

Linux Profiling dengan Performance Analyzer


Kolega, saya merasa berguna untuk berbicara tentang profiler kode yang nyaman dan gratis untuk Linux / Solaris. Ini adalah bagian dari paket Sun / Oracle Developer Studio [1]. Menurut pendapat saya, bagian lain dari lingkungan pengembangan ini agak tidak berguna, tetapi profiler, yang disebut Performance Analyzer, sangat sukses. Mudah digunakan, analisis hasil yang jelas dan mudah diatur. Menurut pendapat saya, profiler masih lebih unggul daripada banyak rekan Linux. Dengan alat ini, menggunakan gprof tampak seperti kemauan aneh dan buang-buang waktu.


Jika Anda tidak berencana untuk menggunakan Penganalisis Kinerja segera, maka Anda tidak dapat membaca lebih lanjut. Ingatlah bahwa produk seperti itu ada. Jika menarik untuk dilihat, selamat datang.


Profiler terdiri dari dua bagian: mengumpulkan - meluncurkan aplikasi dan mengumpulkan data, mencatat hasil percobaan; penganalisa adalah antarmuka grafis yang membaca data percobaan dan memberikan peluang untuk analisis yang mudah dari hot spot dan pohon fungsi panggilan.


Secara singkat tentang kelebihan dan kekurangan penting:


Pro:


  • gratis;
  • tidak memerlukan kompilasi ulang kode dan menautkan file yang dapat dieksekusi;
  • bekerja dengan kompiler gnu dan matahari;
  • tidak mengubah waktu eksekusi program saat mengumpulkan data;
  • Ini memiliki antarmuka grafis yang intuitif;
  • Dilengkapi dengan antarmuka baris perintah canggih untuk analisis otomatis;
  • memungkinkan Anda untuk dengan cepat melihat hasil dari kompiler;
  • memiliki profiler statistik yang cukup akurat bahkan untuk potongan yang tidak terlalu melelahkan;
  • analisis yang dibuat dengan mudah dan analisis komparatif dari beberapa peluncuran program;
  • tidak merusak hasil.

Beberapa kontra:


  • Antarmuka grafis ditulis dalam Java. Terkadang crash saat boot, restart sederhana membantu;
  • hanya waktu CPU yang diukur; jika dimungkinkan untuk memperbaiki kernel, maka pembatasan ini dapat dihapus;
  • dalam aplikasi multi-utas, waktu yang diambil oleh fungsi adalah jumlah dari waktu yang dihabiskan dalam fungsi ini di setiap utas;
  • profiler statistik berisik dan membuatnya sulit untuk mengoptimalkan siklus.

Platform


Secara formal, Oracle Developer Studio hanya mendukung Solaris dan Oracle Linux. Secara de facto, saya telah berhasil menggunakannya di Redhat, CentOS, dan Ubuntu. Mengumpulkan / menganalisis Saya hanya menggunakan untuk mengoptimalkan aplikasi C / C ++ / Fortran. Dokumentasi menyatakan bahwa alat ini juga menangani proyek Java.


Jalankan dan analisis hasil


Analisis kode, tentu saja, dimulai dengan membangun file yang dapat dieksekusi. Nama fungsi tidak boleh dihapus di dalamnya, jika tidak maka tidak akan ada yang dianalisis. Simbol debug diperlukan jika Anda ingin melihat baris kode dari penganalisa. Tentu saja, pertama-tama masuk akal untuk profil dengan opsi optimasi favorit Anda. Ada skenario saat ini berguna untuk kode profil tanpa optimasi, tetapi ini jarang terjadi. Misalnya, jika Anda hanya perlu melihat grafik panggilan, dan tidak mengukur kinerja.


Jadi, untuk memulai, Anda perlu, seperti biasa, untuk mengumpulkan file yang dapat dieksekusi, misalnya:


g++ -O3 –g example.c –o ex 

Langkah kedua adalah menjalankan dari kumpulkan:


 $pathToSunStudio/collect ./ex 

Sebagai hasil dari pekerjaan profiler, sub-direktori dari percobaan test.N.er dibuat di direktori saat ini, di mana N adalah nomor awal. (Penting: jika program Anda terganggu, direktori percobaan akan rusak).


Langkah paling menyenangkan adalah meluncurkan GUI:


 $pathToSunStudio/analyzer test.1.er 

Dalam hal contoh sederhana kami, kami akan mengetahui kode secara langsung dari penganalisa GUI. Contoh kami menghitung jumlah logaritma natural dan desimal dari bilangan bulat dari 2 hingga 20.000.000. Garis "hangat" disorot dengan warna kuning.



Mari kita beralih ke daftar "fungsi berat". Awalnya, fungsi diurutkan berdasarkan waktu yang dihabiskan dalam fungsi itu sendiri (waktu eksklusif). Anda dapat mengurutkan berdasarkan jumlah waktu dalam fungsi dan pada anak-anaknya (waktu inklusif).



Seperti yang diharapkan, Anda bisa berjalan di sekitar tumpukan panggilan. Dalam contoh sederhana kami, kami melihat bahwa di t1 () kami berasal dari main () , dan fungsi sumlog () menghabiskan separuh waktu eksekusi seluruh program.



Sangat mudah untuk otomatisasi sehingga dimungkinkan untuk menarik data menggunakan baris perintah. Sebagai contoh:


 er_print -functions test.1.er test.2.er 

mencetak waktu menjalankan fungsi dari dua mulai.


meja dengan waktu
 <p>Functions sorted by metric: Exclusive Total CPU Time Excl. Incl. Name Total Total CPU sec. CPU sec. 4.160 4.160 Total 3.140 3.140 __ieee754_log 0.330 1.990 __ieee754_log10 0.270 1.880 sumlog(int) 0.180 2.280 sumlog10(int) 0.100 1.610 log 0.090 2.100 log10 0.050 0.050 isnan</p> <ol> <li>4.160 __libc_start_main</li> <li>4.160 main</li> <li>1.880 t1(int)</li> <li>2.280 t2(int) 


Lifehack. Dengan hati-hati melihat grafik panggilan program, Anda dapat menemukan banyak pekerjaan yang bermanfaat dan arsitektur basis kode baru untuk Anda. Saya sangat sering mulai bekerja dengan proyek baru dengan meluncurkan Performance Analyzer, karena Anda dapat segera memahami kode mana yang benar-benar berjalan dan di mana skenario.


Kesimpulan


Sun / Oracle Studion Performance Analyzer adalah alat yang kuat dan nyaman. Dalam catatan itu, saya menunjukkan use case yang paling sederhana dan, tentu saja, Performance Analyzer dapat melakukan lebih banyak lagi. Jika Anda tertarik untuk mempelajari lebih lanjut, lihat dokumentasi [2]. Kesimpulan utama: alat semacam itu ada dan dapat sangat bermanfaat bagi proyek Anda.


Referensi:


  1. Studio Pengembang Oracle
  2. Oracle Developer Studio 12.6: Penganalisis Kinerja
  3. Penganalisa kinerja

Source: https://habr.com/ru/post/id469409/


All Articles