演奏メモリー録音ルート以外のユーザーでは作業できません。

演奏メモリー録音ルート以外のユーザーでは作業できません。

/proc/sys/kernel/perf_event_paranoid-1root以外のユーザーとしてperf memレコードをに設定しても機能しませんCAP_SYS_ADMIN/usr/bin/perf

getcap /usr/bin/perf  
/usr/bin/perf = cap_sys_admin+ep

cat /proc/sys/kernel/perf_event_paranoid  
-1
bash$ perf mem record id  
Error:
You may not have permission to collect stats.

Consider tweaking /proc/sys/kernel/perf_event_paranoid, which controls use of the performance events system by unprivileged users (without CAP_SYS_ADMIN).

The current value is -1:  
  -1: Allow use of (almost) all events by all users  
      Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK.  
 >= 0: Disallow ftrace function tracepoint by users without CAP_SYS_ADMIN  
      Disallow raw tracepoint acess by users without CAP_SYS_ADMIN  
 >= 1: Disallow CPU event access by users without CAP_SYS_ADMIN  
 >= 2: Disallow kernel profiling by users without CAP_SYS_ADMIN  

To make this setting permanent, edit /etc/sysctl.conf too, e.g.:
       
        kernel.perf_event_paranoid = -1

なぜこれがうまくいかないのか分かりません。

奇妙なことは、straceで実行すると権限エラーが発生しないことです。この場合はうまくいくようです。
(再び、これはrootではないユーザーです)

strace -f -e perf_event_open perf mem record id

実行すると、perf --debug verbose=2 perf mem record idperf_event_openシステムコールはエラー番号13(EACCES)を返すようにマークされます。

perf_event_open のマニュアルページは次のように言います:

EACCES要求されたイベントにCAP_SYS_ADMIN権限(またはより緩和されたperf_event_paranoid設定)が必要な場合に返されます。
許可されていないプロセスでこのエラーが発生する可能性がある一般的な状況は次のとおりです。他のユーザーが所有するプロセスに接続し、特定のCPU上のすべてのプロセスを監視する(
pidパラメータを-1に指定する)、および
編集証を設定する必要があるときにExcept_kernelを設定しないそれ。

CentOS 7.6 です。

ベストアンサー1

おすすめ記事