Kumpulan berbagai alat analisis kinerja yang sedang dikembangkan dan tidak didukung untuk ftrace dan perf_events Linux (alias perintah "perf"). Baik ftrace maupun perf adalah alat penelusuran inti Linux, yang disertakan dalam sumber kernel. Sistem Anda mungkin sudah memiliki ftrace, dan perf seringkali hanya berupa penambahan paket (lihat Prasyarat).
Alat-alat ini dirancang agar mudah dipasang (ketergantungan paling sedikit), memberikan kemampuan observasi kinerja tingkat lanjut, dan mudah digunakan: lakukan satu hal dan lakukan dengan baik. Koleksi ini dibuat oleh Brendan Gregg (penulis DTraceToolkit).
Banyak dari alat ini menggunakan solusi sehingga fungsionalitas dapat dilakukan pada kernel Linux yang ada. Oleh karena itu, banyak alat yang memiliki peringatan (lihat halaman manual), dan penerapannya harus dianggap sebagai pengganti hingga fitur kernel di masa mendatang, atau subsistem penelusuran baru, ditambahkan.
Ini ditujukan untuk Linux 3.2 dan kernel yang lebih baru. Untuk Linux 2.6.x, lihat Peringatan.
Alat-alat ini diperkenalkan dalam presentasi USENIX LISA 2014: Analisis Kinerja Linux: Alat Baru dan Rahasia Lama
Menggunakan ftrace:
Menggunakan perf_events:
Menggunakan eBPF:
Menampilkan proses dan argumen baru:
# ./execsnoop Menelusuri exec()s. Ctrl-C untuk mengakhiri. PID PPID ARGS 22898 22004 orang ls 22905 22898 prakonv -e UTF-8 22908 22898 halaman -s 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 tbl 22911 22910 pesona lokal 22912 22907 groff -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 troff -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 jelek
Mengukur latensi I/O perangkat blok dari penyisipan antrean hingga penyelesaian:
# ./iolatency -Q Menelusuri blok I/O. Keluaran setiap 1 detik. Ctrl-C untuk mengakhiri. >=(ms) .. <(ms) : I/O |Distribusi | 0 -> 1 : 1913 |########################################| 1 -> 2 : 438 |######### | 2 -> 4 : 100 |## | 4 -> 8 : 145 |### | 8 -> 16 : 43 |# | 16 -> 32 : 43 |# | 32 -> 64 : 1 |# | [...]
Menelusuri titik jejak blok:block_rq_insert, dengan jejak tumpukan kernel, dan hanya untuk membaca:
# ./tpoint -s blok:block_rq_insert 'rwbs ~ "*R*"' cksum-11908 [000] d... 7269839.919098: block_rq_insert: 202,1 R 0 () 736560 + 136 [cksum] cksum-11908 [000] d... 7269839.919107: => __elv_add_request => blk_flush_plug_list => blk_finish_plug => __do_page_cache_readahead => ondemand_readahead => halaman_cache_async_readahead =>generik_file_read_iter => sinkronisasi_baru_baca => vfs_baca => SyS_baca => system_call_fastpath [...]
Hitung panggilan fungsi kernel yang dimulai dengan "bio_", rangkum setiap detik:
# ./funccount -i 1 'bio_*' Menelusuri "bio_*"... Ctrl-C untuk mengakhiri. JUMLAH FUNGSI bio_attempt_back_merge 26 bio_get_nr_vecs 361 bio_alokasi 536 bio_alloc_bioset 536 bio_endio 536 bio_gratis 536 bio_fs_destructor 536 bio_init 536 bio_integrity_enabled 536 bio_put 729 bio_add_halaman 1004 [...]
Masih banyak lagi contoh di direktori contoh. Lihat juga halaman manual.
Tujuannya adalah sesedikit mungkin. Misalnya, server Linux 3.2 tanpa debuginfo. Lihat halaman manual alat untuk lebih spesifik.
FTRACE dikonfigurasi di kernel. Anda mungkin sudah mengkonfigurasinya dan tersedia di versi kernel Anda, karena FTRACE pertama kali ditambahkan di 2.6.27. Ini memerlukan CONFIG_FTRACE dan opsi FTRACE lainnya tergantung pada alatnya. Beberapa alat (misalnya, funccount) memerlukan CONFIG_FUNCTION_PROFILER.
Membutuhkan perintah "perf" untuk diinstal. Ini ada dalam paket linux-tools-common. Setelah menginstalnya, perf mungkin meminta Anda untuk menginstal paket linux-tools tambahan (linux-tools -kernel_version ). perf juga dapat dibangun di bawah tools/perf di sumber kernel. Lihat Prasyarat perf_events untuk detail lebih lanjut tentang cara membuat perf_events berfungsi sepenuhnya.
Membutuhkan kernel dengan opsi CONFIG_DEBUG_FS diaktifkan. Seperti halnya FTRACE, ini mungkin sudah diaktifkan (debugfs ditambahkan di 2.6.10-rc3). Debugf juga perlu dipasang:
# mount -t debugfs none /sys/kernel/debug
Banyak skrip yang menggunakan awk, dan akan mencoba menggunakan mawk atau gawk tergantung pada perilaku yang diinginkan: mawk untuk keluaran yang di-buffer (karena kecepatannya), dan gawk untuk keluaran yang sinkron (karena fflush() berfungsi, sehingga memungkinkan pengelompokan yang lebih efisien. menulis).
Ini hanyalah skrip. Ambil semuanya:
git clone --depth 1 https://github.com/brendangregg/perf-tools
Atau gunakan tautan mentah di github untuk mengunduh skrip individual. Misalnya:
wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop
Ini mempertahankan tab (yang salin-dan-tempel dapat mengacaukan).
Ftrace pertama kali ditambahkan ke Linux 2.6.27, dan perf_events ke Linux 2.6.31. Versi awal ini memiliki bug kernel, dan kemacetan serta kepanikan telah dilaporkan pada kernel seri 2.6.32. Ini termasuk CentOS 6.x. Jika Anda harus menganalisis kernel lama, alat ini mungkin hanya berguna di lingkungan yang toleran terhadap kesalahan, seperti laboratorium dengan masalah yang disimulasikan. Alat-alat ini terutama dikembangkan pada Linux 3.2 dan kernel yang lebih baru.
Tergantung pada alatnya, mungkin juga ada biaya overhead yang dikeluarkan. Lihat bagian selanjutnya.
perf_events terus berkembang. Koleksi ini mulai dikembangkan sekitar Linux 3.16, dengan server Linux 3.2 sebagai target utama, pada saat perf_events tidak memiliki kemampuan program tertentu (misalnya, agregasi dalam kernel khusus). Mungkin saja ini akan ditambahkan pada rilis kernel yang akan datang. Sampai saat itu, banyak dari alat-alat ini menggunakan solusi, trik, dan peretasan agar dapat berfungsi. Beberapa alat ini meneruskan data peristiwa ke ruang pengguna untuk pasca-pemrosesan, yang memerlukan biaya overhead yang jauh lebih tinggi dibandingkan agregasi dalam kernel. Biaya overhead setiap alat dijelaskan di halaman manualnya.
PERINGATAN : Dalam kasus ekstrim , aplikasi target Anda mungkin berjalan 5x lebih lambat saat menggunakan alat ini. Tergantung pada alat dan versi kernel, mungkin juga terdapat risiko kepanikan kernel. Baca header program untuk mengetahui peringatannya, dan uji sebelum digunakan.
Jika overhead merupakan masalah, alat ini dapat diperbaiki. Jika suatu alat belum memilikinya, alat tersebut dapat ditulis ulang dalam C untuk menggunakan perf_events_open() dan mmap() sebagai buffer jejak. Itu juga bisa mengimplementasikan penghitungan frekuensi di C, dan beroperasi pada mmap() secara langsung, daripada menggunakan awk/Perl/Python. Peningkatan tambahan dimungkinkan untuk alat berbasis ftrace, seperti penggunaan snapshot dan buffer per instance.
Beberapa dari alat ini dimaksudkan sebagai solusi jangka pendek hingga terdapat lebih banyak kemampuan kernel, yang pada titik tersebut dapat ditulis ulang secara substansial. Versi lama dari alat ini akan disimpan di repositori ini, untuk versi kernel yang lebih lama.
Karena target utama saya adalah armada server Linux 3.2 yang tidak memiliki info debug, alat ini berusaha untuk tidak memerlukannya. Kadang-kadang, hal ini membuat alat lebih rapuh daripada yang seharusnya, karena saya menggunakan solusi (yang mungkin khusus untuk versi kernel dan platform) daripada menggunakan informasi debuginfo (yang bisa bersifat umum). Lihat halaman manual untuk mengetahui prasyarat rinci untuk setiap alat.
Saya sudah mencoba menggunakan perf_events ("perf") jika memungkinkan, karena antarmuka tersebut telah dikembangkan untuk penggunaan multi-pengguna. Karena berbagai alasan saya sering kali perlu menggunakan ftrace. ftrace ternyata sangat kuat (terima kasih Steven Rostedt!), dan tidak semua fiturnya diekspos melalui kinerja, atau dalam penggunaan umum. Kumpulan alat ini dalam beberapa hal merupakan demonstrasi fitur Linux yang tersembunyi menggunakan ftrace.
Karena banyak hal berubah, sangat mungkin Anda menemukan beberapa alat tidak berfungsi pada versi kernel Linux Anda. Beberapa keahlian dan perakitan akan diperlukan untuk memperbaikinya.
Studi kasus dan ringkasan:
Artikel terkait: