OProfile adalah profiler kinerja untuk Linux. Dalam artikel ini, kita akan menjelajahi apa yang dilakukannya, bagaimana menginstal dan mengkonfigurasinya, dan bagaimana menempatkan data yang dikumpulkannya untuk digunakan.
Anda mungkin bertanya-tanya mengapa Anda memerlukan alat seperti ini karena ada banyak alat analisis kinerja yang baik yang tersedia secara default di sebagian besar distribusi Linux. Setiap penginstalan menyertakan alat seperti top dan vmstat, dan utilitas penelusuran seperti strace biasanya hanya dapat dicapai dengan mudah. Di mana OProfile cocok??
Alat yang disebutkan sebelumnya sangat bagus untuk mendapatkan snapshot dari sistem Linux secara real time. Alat seperti top atau htop menunjukkan semua proses yang berjalan, konsumsi memori saat ini, dan penggunaan prosesor. Tetapi mengetahui proses dan panggilan sistem apa yang paling banyak menghabiskan sumber daya menjadi masalah.
Di situlah OProfile masuk. Rangkaian utilitas ini tidak hanya melakukan analisisnya pada tingkat yang lebih dalam, tetapi juga menyimpan data dan memungkinkan Anda menghasilkan laporan kinerja yang menawarkan banyak informasi yang dapat membantu Anda men-debug bahkan masalah kinerja yang paling sulit dipahami.
OProfile bukan hanya untuk pengembang. Di lingkungan desktop, OProfile dapat membantu Anda melacak tugas latar belakang intensif CPU atau panggilan I/O yang memperlambat Anda dan tidak langsung terlihat. Pada sistem yang sibuk dengan prioritas proses yang berubah, data ini mungkin sulit dikumpulkan, apalagi ditafsirkan let. Sifat multi-proses dari lingkungan server membuat tugas ini semakin sulit dengan alat tradisional.
Karena itu, pengembang tidak diragukan lagi akan mendapatkan manfaat maksimal dari OProfile. Informasi yang akan saya sajikan akan mencakup dasar-dasar kedua kasus penggunaan sehingga Anda dapat menggali metrik kinerja program Linux apa pun.
Instalasi
Ada catatan yang sangat penting yang harus dibuat sebelum menyelam jauh ke dalam OProfile - Anda mungkin tidak dapat menginstalnya di lingkungan virtual. Jika Anda menjalankan Linux di dalam VirtualBox, VMWare, atau lingkungan VM serupa, OProfile mungkin tidak dapat mengakses penghitung kinerja yang diperlukan untuk mengumpulkan data. Selain itu, bahkan jika Anda dapat menggunakannya di lingkungan virtual, waktu yang tepat mungkin agak terdistorsi berdasarkan beban sistem host, jadi harap ingat ini jika Anda tidak menjalankan perangkat keras asli.
Beberapa distribusi Linux memiliki OProfile dalam sistem manajemen paket mereka, membuat instalasi menjadi mudah:
- Debian / Ubuntu / Linux Mint - sudo apt-get install oprofile
- Fedora / CentOS - sudo yum install oprofile
- Arch - sudo pacman -S oprofile
Contoh Sederhana
Setelah program terinstal, mari kita basahi kaki kita dengan contoh sepele namun bermanfaat. Program "ls" adalah perintah yang mungkin Anda gunakan sepanjang waktu. Ini hanya menampilkan daftar file dan folder di direktori saat ini. Mari kita lacak outputnya:
sudo operf ls
Anda akan melihat sesuatu yang mirip dengan tangkapan layar di atas. Setelah profiler selesai, ia akan mengumumkan “Profiling done.” Ini telah menyimpan datanya dalam folder bernama oprofile_data yang dapat digunakan untuk membuat laporan.
Menjalankan perintah opreport (tanpa sudo dalam kasus ini) menghasilkan laporan yang mirip dengan ini:
Dalam contoh ini, laporan default menunjukkan jumlah sampel saat CPU tidak dalam keadaan HALT (dengan kata lain, sedang aktif melakukan sesuatu). Kallsyms menyediakan pencarian simbol yang digunakan oleh profiler, dan ld.begitu dan libc.begitu juga bagian dari paket glibc, perpustakaan umum yang ditautkan ke hampir semua executable Linux yang menyediakan fungsionalitas dasar yang dapat digunakan pengembang untuk mencegah menemukan kembali roda dan menyediakan tingkat kompatibilitas umum antara berbagai sistem. Anda dapat melihat bahwa program yang sebenarnya ls memiliki waktu non-HALT jauh lebih sedikit - sebagian besar pekerjaan berat dilakukan oleh perpustakaan standar.
Setelah kami selesai dengan laporan, ada baiknya untuk menghapus folder data atau menyimpannya untuk analisis di masa mendatang. Dalam contoh ini, kami hanya akan menghapusnya karena kami menjalankan contoh latihan. Karena kami menjalankan perintah dengan sudo, kami harus menghapus folder dengan sudo. Hati-Hati!
sudo rm -Rf oprofile_data
Contoh yang Lebih Kompleks
Dalam contoh berikut ini, kita akan menjalankan program yang benar-benar melakukan sesuatu yang lebih kompleks daripada hanya membuat daftar file di folder saat ini. Ayo unduh WordPress dengan wget.
sudo operf wget http://wordpress.org/terbaru.ter.gz
Setelah contoh ini, kita dapat membuat laporan dengan perintah “opreport”:
Anda akan melihat lebih banyak aktivitas setelah ini. Perintah wget harus melakukan banyak pekerjaan di belakang layar untuk mendapatkan salinan WordPress terbaru. Meskipun tidak perlu memeriksa setiap item, hal menarik yang menarik adalah:
- ath9k dan ath9k_hw - Modul ini bertanggung jawab atas koneksi WiFi di laptop ini.
- mac80211 dan cfg80211 - Pustaka ini berperan penting dalam melakukan koneksi jaringan yang diperlukan oleh wget.
- libnss_dns dan libresolv digunakan dalam menyelesaikan wordpress.org ke alamat IP sehingga wget dapat membuat koneksi HTTP.
- libcrypto dan libssl - Pustaka ini adalah bagian dari pustaka OpenSSL. Ini melakukan pekerjaan untuk memecahkan kode data yang diterima dari https:// url. Perhatikan bahwa meskipun kami menetapkan URL dengan http://, server WordPress mengarahkan kami ke https:// dan wget mengikuti pengalihan ini.
- libpthread - Pustaka ini melakukan operasi threading yang memungkinkan program melakukan banyak hal sekaligus. Dalam hal ini, wget memulai utas untuk mengunduh program dan juga menyediakan indikator kemajuan unduhan berbasis ASCII di layar.
Data semacam ini dapat memberikan banyak informasi bagi pengembang. Tetapi bagaimana ini penting bagi administrator sistem server atau pengguna yang kuat di desktop?? Dengan mengetahui bagian program mana yang paling banyak menghabiskan waktu CPU, kami dapat mengetahui apa yang perlu dioptimalkan atau di mana perlambatan terjadi, sehingga kami dapat membuat keputusan yang lebih baik tentang cara mengoptimalkan sistem kami.
Dalam contoh ini, waktu CPU paling banyak diambil oleh rutinitas crypto/SSL. Hal ini dapat dimengerti karena kriptografi adalah tugas yang memakan waktu. Punya wordpress.situs web org tidak mengarahkan kami ke https:// perpustakaan ini tidak akan digunakan, menghemat waktu CPU kami. Lapisan jaringan akan tetap digunakan, tetapi menggunakan koneksi kabel alih-alih koneksi nirkabel kemungkinan akan lebih sedikit membebani. Menonaktifkan indikator kemajuan pada program wget (melalui sakelar -nv) akan menghemat waktu CPU dalam menampilkan kemajuan unduhan.
Menggali Simbol
Meskipun laporan default memberikan informasi yang berharga dan berguna, kami dapat menggali lebih jauh. Dengan menjalankan ini:
opreport --demangle=cerdas --simbol
Kami dapat mengetahui dengan tepat berapa banyak fungsi waktu CPU di perpustakaan yang dikonsumsi:
Dalam contoh ini, saya menggunakan perintah wget di atas tetapi menggunakan URL http:// (yang tidak mengarahkan ke https://) dan Anda dapat melihat tidak adanya pustaka OpenSSL di jejak. Namun, alih-alih hanya nama perpustakaan, kami sekarang memiliki daftar lengkap fungsi yang terlibat. Seperti yang Anda lihat, lapisan jaringan menghabiskan sebagian besar waktu non-HALT CPU.
Membawanya ke Tingkat Selanjutnya
Pada contoh sebelumnya kami telah menggunakan OProfile untuk melihat satu program pada satu waktu. Anda dapat memeriksa seluruh sistem Anda sekaligus menggunakan tombol -system-wide:
sudo operf --sistem-lebar
Menggunakan teknik ini, OProfile akan mengumpulkan statistik dengan cara yang sama dan berhenti ketika Anda menekan CTRL+C. Setelah itu, Anda dapat menjalankan perintah opreport. Karena profiler kemungkinan akan menghasilkan lebih banyak data (terutama di desktop atau server yang sibuk).
laporkan > melaporkan.txt
Laporan sekarang dapat dilihat dalam file bernama report.txt
Overhead Rendah
Penting untuk dicatat bahwa meskipun OProfile seharusnya tidak mengganggu pengoperasian program Anda, itu akan membuat sedikit overhead dan dengan demikian memperlambat eksekusi. Dalam contoh sederhana kami di atas, itu tidak menimbulkan masalah, tetapi pada program dengan eksekusi yang lama dan panggilan fungsi yang ekstensif, Anda mungkin akan melihat perbedaan. Karena itu, saya tidak akan merekomendasikan menggunakan program ini di lingkungan server produksi kecuali dihadapkan dengan masalah kinerja kritis yang harus diselesaikan dengan penggunaan langsung. Meski begitu, saya akan menggunakannya cukup lama untuk menemukan masalahnya.
Kesimpulan
OProfile adalah alat profil kinerja yang kuat. Ini menyentuh level terendah yang tersedia di Linux untuk mendapatkan penghitung kinerja dan metrik yang memberi Anda informasi berharga tentang program Anda.
Lewatlah sudah hari-hari menebak-nebak dalam debugging kinerja - Anda sekarang memiliki kekuatan untuk mengetahui dengan tepat apa yang dilakukan sistem Anda dan bagaimana meningkatkannya. Dengan mempelajari laporan yang dihasilkan oleh OProfile, Anda dapat membuat keputusan berdasarkan informasi dan berdasarkan data untuk mengoptimalkan sistem Anda.