Perf- Alat Pemantauan dan Analisis Kinerja untuk Linux


Ketika kita berbicara tentang kinerja dalam komputasi, kita mengacu pada hubungan antara sumber daya kita dan tugas-tugas yang dapat kita selesaikan dalam jangka waktu tertentu.

Di tengah persaingan antar perusahaan yang semakin ketat, penting bagi kita untuk belajar bagaimana menggunakan apa yang kita miliki dengan kapasitas terbaiknya. Pemborosan sumber daya perangkat keras atau perangkat lunak, atau kurangnya kemampuan untuk mengetahui cara menggunakannya secara lebih efisien, berakhir dengan kerugian yang tidak mampu kita tanggung jika kita ingin menjadi yang terbaik dalam permainan kita.

Pada saat yang sama, kita harus berhati-hati untuk tidak menggunakan sumber daya kita sampai pada batas dimana penggunaan berkelanjutan akan menghasilkan kerusakan yang tidak dapat diperbaiki.

Pada artikel ini kami akan memperkenalkan Anda pada alat analisis kinerja yang relatif baru dan memberikan tip yang dapat Anda gunakan untuk memantau sistem Linux Anda, termasuk perangkat keras dan aplikasi. Ini akan membantu Anda memastikan bahwa mereka beroperasi sehingga Anda mampu menghasilkan hasil yang diinginkan tanpa membuang sumber daya atau energi Anda sendiri.

Memperkenalkan dan menginstal Perf di Linux

Antara lain, Linux menyediakan alat pemantauan dan analisis kinerja yang disebut dengan perf. Jadi, apa yang membedakan perf dengan alat terkenal lainnya yang sudah Anda kenal?

Jawabannya adalah perf menyediakan akses ke Unit Pemantauan Kinerja di CPU, dan dengan demikian memungkinkan kita melihat lebih dekat perilaku perangkat keras dan peristiwa terkaitnya.

Selain itu, ia juga dapat memonitor kejadian perangkat lunak, dan membuat laporan dari data yang dikumpulkan.

Anda dapat menginstal perf di distribusi berbasis RPM dengan:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

Di Debian dan turunannya:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Jika uname -r pada perintah di atas mengembalikan string tambahan selain versi sebenarnya (3.2.0-23-generic dalam kasus saya), Anda mungkin harus mengetik linux-tools-3.2.0-23 daripada menggunakan keluaran uname.

Penting juga untuk dicatat bahwa perf memberikan hasil yang tidak lengkap ketika dijalankan sebagai tamu di atas VirtualBox atau VMWare karena mereka tidak mengizinkan akses ke penghitung perangkat keras seperti yang dilakukan oleh teknologi virtualisasi lainnya (seperti KVM atau XEN). .

Selain itu, perlu diingat bahwa beberapa perintah perf mungkin dibatasi untuk root secara default, yang dapat dinonaktifkan (hingga sistem di-boot ulang) dengan melakukan:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Jika Anda perlu menonaktifkan mode paranoid secara permanen, perbarui pengaturan berikut di file /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Sub-perintah

Setelah Anda menginstal perf, Anda dapat merujuk ke halaman manualnya untuk melihat daftar sub-perintah yang tersedia (Anda dapat menganggap sub-perintah sebagai opsi khusus yang membuka jendela tertentu ke dalam sistem). Untuk hasil terbaik dan lebih lengkap, gunakan perf sebagai root atau melalui sudo.

Daftar kinerja

perf list (tanpa opsi) mengembalikan semua jenis acara simbolik (daftar panjang). Jika Anda ingin melihat daftar acara yang tersedia dalam kategori tertentu, gunakan daftar perf diikuti dengan nama kategori ([hw|sw|cache|tracepoint|pmu|event_glob ]), seperti:

Tampilkan daftar acara perangkat lunak yang telah ditentukan sebelumnya di Linux:

perf list sw 

Statistik kinerja

perf stat menjalankan perintah dan mengumpulkan statistik kinerja Linux selama eksekusi perintah tersebut. Apa yang terjadi pada sistem kita ketika kita menjalankan dd?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

Statistik yang ditunjukkan di atas menunjukkan, antara lain:

  1. Eksekusi perintah dd memerlukan waktu CPU 21,812281 milidetik. Jika kita membagi angka ini dengan nilai “detik waktu berlalu” di bawah (23,914596 milidetik), hasilnya adalah 0,912 (CPU digunakan).
  2. Saat perintah dijalankan, 15 saklar konteks (juga dikenal sebagai saklar proses) menunjukkan bahwa CPU dialihkan 15 kali dari satu proses (atau thread) ke proses lainnya.
  3. 2 Migrasi CPU adalah hasil yang diharapkan ketika dalam CPU 2 inti, beban kerja didistribusikan secara merata di antara jumlah inti.
    Selama waktu tersebut (21.812281 milidetik), jumlah total siklus CPU yang digunakan adalah 62.025.623, yang dibagi dengan 0.021812281 detik menghasilkan 2.843GHz.
  4. Jika kita membagi jumlah siklus dengan jumlah total instruksi, kita mendapatkan 4,9 Siklus Per Instruksi, yang berarti setiap instruksi membutuhkan hampir 5 siklus CPU untuk diselesaikan (rata-rata). Kita dapat menyalahkan hal ini (setidaknya sebagian) pada jumlah cabang dan kesalahan cabang (lihat di bawah), yang pada akhirnya menyia-nyiakan atau menyalahgunakan siklus CPU.
  5. Saat perintah dijalankan, total 3.552.630 cabang ditemukan. Ini adalah representasi titik keputusan dan loop tingkat CPU dalam kode. Semakin banyak cabang, semakin rendah kinerjanya. Untuk mengimbangi hal ini, semua CPU modern berupaya memprediksi aliran kode yang akan diambil. 51.348 kesalahan cabang menunjukkan bahwa fitur prediksi salah 1,45% sepanjang waktu.

Prinsip yang sama berlaku untuk mengumpulkan statistik (atau dengan kata lain, pembuatan profil) saat aplikasi sedang berjalan. Cukup luncurkan aplikasi yang diinginkan dan setelah jangka waktu yang wajar (terserah Anda) tutup aplikasi tersebut, dan perf akan menampilkan statistik di layar. Dengan menganalisis statistik tersebut, Anda dapat mengidentifikasi potensi masalah.

Performa terbaik

perf top mirip dengan perintah top, karena menampilkan profil sistem hampir real-time (juga dikenal sebagai analisis langsung).

Dengan opsi -a Anda akan menampilkan semua jenis peristiwa yang diketahui, sedangkan opsi -e akan memungkinkan Anda memilih kategori peristiwa tertentu (seperti yang ditampilkan oleh daftar kinerja):

Akan menampilkan semua siklus acara.

perf top -a 

Akan menampilkan semua peristiwa terkait jam CPU.

perf top -e cpu-clock 

Kolom pertama pada keluaran di atas mewakili persentase sampel yang diambil sejak awal proses, dikelompokkan berdasarkan fungsi Simbol dan Objek Bersama. Opsi lainnya tersedia di man perf-top.

Rekor kinerja

Catatan perf menjalankan perintah dan menyimpan data statistik ke dalam file bernama perf.data di dalam direktori kerja saat ini. Ini berjalan mirip dengan statistik kinerja.

Ketik perf record diikuti dengan perintah:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Laporan kinerja

laporan kinerja memformat data yang dikumpulkan di perf.data di atas menjadi laporan kinerja:

sudo perf report

Semua subperintah di atas memiliki halaman manual khusus yang dapat dipanggil sebagai:

man perf-subcommand

dengan subperintah berupa daftar, stat, atas, catatan, atau laporkan. Ini adalah subperintah yang paling sering digunakan; yang lainnya tercantum dalam dokumentasi (lihat bagian Ringkasan untuk tautannya).

Ringkasan

Dalam panduan ini kami telah memperkenalkan Anda pada perf, alat pemantauan dan analisis kinerja untuk Linux. Kami sangat menganjurkan Anda untuk memahami dokumentasinya yang disimpan di https://perf.wiki.kernel.org.

Jika Anda menemukan aplikasi yang menghabiskan sumber daya dalam persentase tinggi, Anda dapat mempertimbangkan untuk memodifikasi kode sumbernya, atau menggunakan alternatif lain.

Jika Anda memiliki pertanyaan tentang artikel ini atau saran untuk perbaikan, kami siap mendengarkan. Jangan ragu untuk menghubungi kami menggunakan formulir komentar di bawah.