Apakah saya memerlukan izin root (admin) untuk menjalankan alat 'perf' userspace? (perf acara diaktifkan di kernel Linux)

25

Apakah saya harus menjalankan perfalat userspace sebagai administrator sistem (root), atau bisakah saya menjalankannya (atau setidaknya beberapa sub-perintah) sebagai pengguna biasa?

Jakub Narębski
sumber
2
Program Unix yang tidak dapat melakukan apa yang harus mereka lakukan karena kurangnya izin biasanya akan membuat kesalahan jika mereka tidak dapat melakukan pekerjaan mereka. Jalankan dan lihat!
Caleb
1
Saya mengajukan pertanyaan ini untuk memutuskan apakah perlu mencoba menginstal (sebagai pengguna biasa, dalam $ HOME) bagian userspace dari perfalat (yang / bisa non-sepele).
Jakub Narębski
FYI di Ubuntu perfada dalam linux-toolspaket, jadi instal di perfsana sederhana.
Jakub Narębski
1
@ JakubNarębski: Kecuali jika itu bukan mesin Anda sendiri dan admin enggan untuk menginstal paket.
Martin Ueding

Jawaban:

33

Apa yang dapat Anda lakukan perftanpa menjadi root tergantung pada pengaturan sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: Anda tidak dapat melakukan pengukuran apa pun. The perfutilitas mungkin masih berguna untuk menganalisis catatan yang ada dengan perf ls, perf report, perf timechartatau perf trace.
  • kernel.perf_event_paranoid= 1: Anda dapat melacak perintah dengan perf statatau perf record, dan mendapatkan data profil kernel.
  • kernel.perf_event_paranoid= 0: Anda dapat melacak perintah dengan perf statatau perf record, dan mendapatkan data acara CPU.
  • kernel.perf_event_paranoid= -1: Anda mendapatkan akses mentah ke tracepoint kernel (khususnya, Anda dapat mmapmembuat file oleh perf_event_open, saya tidak tahu apa implikasinya).
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Bagus. cat /proc/sys/kernel/perf_event_paranoidmengembalikan 1, jadi sepertinya saya akan dapat mengambil setidaknya beberapa pengukuran (BTW. apa bedanya antara "data profil kernel" dan "data acara CPU"? Referensi sudah cukup)
Jakub Narębski
2
@ Yakub: Dari apa yang saya mengerti, peristiwa kernel memungkinkan Anda melihat panggilan ke berbagai fungsi kernel. Peristiwa CPU adalah penghitung dalam CPU yang memberi tahu Anda berapa kali lokasi tertentu dalam memori dipukul. Saya tidak pernah menggunakannya, jadi saya tidak bisa memberi tahu Anda lebih banyak tentang mereka; LWN memiliki beberapa artikel tentang topik ini, dan masih terus berkembang.
Gilles 'SANGAT berhenti menjadi jahat'
4
Dengan paranoid = 2, Anda masih bisa membuat profil kode Anda sendiri di ruang-pengguna (mis. perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'Akan menunjukkan siklus ruang-pengguna dan jumlah instruksi yang akurat, dan Anda bahkan bisa mendapatkan jumlah untuk uops_issued.any dan seterusnya), tetapi Anda tidak mendapatkan jumlah untuk kode yang dijalankan selama panggilan sistem / interupsi. Jadi frekuensi CPU yang dilaporkan (siklus / waktu) setidaknya sedikit lebih rendah dari yang sebenarnya karena waktu yang dihabiskan di kernel. Lihat juga. Apa batasan perf_event_paranoid == 1 yang sebenarnya memakai x86 perf?
Peter Cordes
"Acara CPU" berarti membuat profil segala sesuatu di seluruh inti, bukan per-proses / utas. yaitu paranoid = 1 atau lebih tinggi menghentikan Anda membuat profil kode pengguna lain, dan 1 hanya memungkinkan Anda membuat profil kode kernel yang dipanggil oleh proses Anda sendiri (panggilan sistem.)
Peter Cordes