Jalankan perf tanpa hak root


26

Saya menjalankan pengujian debian dengan kernel 4.1 dan versi 4.1 dari perfalat ini. Dalam versi ini mereka tampaknya telah menambahkan semacam perlindungan untuk menjaga pengguna normal dari mengumpulkan data dari alat itu. Jadi menjalankan perfsebagai pengguna biasa akan memberikan kesalahan ini:

perf stat ls
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv

perf_event_paranoidberisi 3 di instalasi saya. Sayangnya saya tidak dapat mengubah file itu bahkan sebagai root. Bagaimana saya bisa mengizinkan pengguna saya sendiri untuk menggunakan perftanpa hak sudo?

Saya memiliki aplikasi yang ingin saya to benchmark yang tidak perlu root dan saya tidak ingin menjalankannya sebagai root untuk benchmark itu.


Apakah perf stat -e cycles:ubekerja? "3" nilai perf_event_paranoidditambahkan pada 2016 lwn.net/Articles/696216 "Tidak diizinkan perf_event_open ()" dan diaktifkan di "Android dan Debian" (juga lkml.org/lkml/2016/1/11/587 bugs.launchpad. net / bug / 1612790 debian.org/security/2017/dsa-3791 )
osgx

1
@osgx: Bagi saya dengan paranoid level 3 saran Anda tidak berfungsi, saya masih tidak diizinkan untuk menggunakannya.
Martin Ueding

Jawaban:


37

File dalam /procyang dapat ditulisi biasanya diubah dengan menggemakan nilai ke dalamnya. Kamu harus mencobanya:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

File-file di bawah ini /proc/sys/juga memiliki perintah sysctl untuk akses mudah, jadi Anda bisa melakukannya:

sudo sysctl -w kernel.perf_event_paranoid=1

(meskipun -wuntuk menulis sepertinya opsional). Untuk memastikan ini dilakukan saat boot, buat /etc/sysctl.d/99-mysettings.conffile Anda sendiri dengan baris tersebut

kernel.perf_event_paranoid=1

Pilih nama file yang tidak akan menimpa file yang ada di /run/sysctl.d/dan /usr/lib/sysctl.d/. Lihat man sysctl.d .


11
Untuk bertahan di seluruh reboot:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio

1
tambahkan komentar ke jawabannya, tolong
Leos313

1
@ Leos313 selesai. terima kasih atas pengingatnya.
meuh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.