新しいLinuxカーネルにはsysfs調整可能パラメータ/proc/sys/kernel/perf_event_paranoid
があり、これによりユーザーはperf_events
の利用可能な機能をルート以外のユーザー向けに調整できます。
kernel documenation から、さまざまな値に対して次の動作があります。
perf_event_paranoid:
特権のないユーザーによるパフォーマンスイベントシステムの使用を制御します(CAP_SYS_ADMINなし)。デフォルト値は2です。
-1:すべてのユーザーによる(ほぼ)すべてのイベントの使用を許可するCAP_IPC_LOCKなしでperf_event_mlock_kbの後にmlock制限を無視する
> = 0:CAP_SYS_ADMINを持たないユーザーによるftrace関数のトレースポイントを許可しないCAP_SYS_ADMINを持たないユーザーによるrawトレースポイントアクセスを許可しない
> = 1:CAP_SYS_ADMINを持たないユーザーによるCPUイベントアクセスを許可しません
> = 2:CAP_SYS_ADMINを持たないユーザーによるカーネルプロファイリングを許可しない
1
ファイルにperf_event_paranoid
があり、これは「CPUイベントアクセスを許可しない」必要がありますが、正確にはどういう意味ですか?
単純な読み取り値は、CPUパフォーマンスカウンターイベント(Intel PMUイベントなど)にアクセスできないことを意味しますが、うまくアクセスできるようです。例えば:
$ perf stat sleep 1
Performance counter stats for 'sleep 1':
0.408734 task-clock (msec) # 0.000 CPUs utilized
1 context-switches # 0.002 M/sec
0 cpu-migrations # 0.000 K/sec
57 page-faults # 0.139 M/sec
1,050,362 cycles # 2.570 GHz
769,135 instructions # 0.73 insn per cycle
152,661 branches # 373.497 M/sec
6,942 branch-misses # 4.55% of all branches
1.000830821 seconds time elapsed
ここで、イベントの多くはCPU PMUイベントです(cycles
、instructions
、branches
、branch-misses
、cache-misses
)。
これらが参照されているCPUイベントでない場合、それらは何ですか?
この場合、CPUイベントは、タスクごとではなくCPUごとのイベントの監視を指します。 perf
ツールの場合、これにより、
-C, --cpu=
Count only on the list of CPUs provided. Multiple CPUs can be provided as a comma-separated list with no space: 0,1.
Ranges of CPUs are specified with -: 0-2. In per-thread mode, this option is ignored. The -a option is still necessary
to activate system-wide monitoring. Default is to count on all CPUs.
-a, --all-cpus
system-wide collection from all CPUs (default if no target is specified)
にとって perf_event_open
これは、次の場合を考慮します。
pid == -1 and cpu >= 0
This measures all processes/threads on the specified CPU. This requires CAP_SYS_ADMIN capability or a /proc/sys/ker‐
nel/perf_event_paranoid value of less than 1.
これはバージョン固有である可能性があり、引用されたドキュメントは4.17からです。これは 別の関連する質問 です。