ルート権限なしでperfを実行する


27

4.1カーネルとバージョン4.1のperfツールを使用して、Debianテストを実行しています。このバージョンでは、通常のユーザーがそのツールからデータを収集しないように、何らかの保護を追加したようです。したがってperf、通常のユーザーとして実行するとこのエラーが発生します。

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_paranoid私のインストールには3が含まれています。残念ながら、ルートとしてもそのファイルを変更することはできません。自分のユーザーがperfsudo権限なしで使用できるようにするにはどうすればよいですか?

ルートを必要としないベンチマークを行いたいアプリケーションがあり、それをベンチマークするためにルートとして実行したくありません。


DOESのperf stat -e cycles:u作品?「3」の値はperf_event_paranoid2016 lwn.net/Articles/696216「perf_event_open()を許可しない」で追加され、「AndroidおよびDebian」でも有効になりました(lkml.org/lkml/2016/1/11/587 bugs.launchpad。ネット/バグ/ 1612790 debian.org/security/2017/dsa-3791
osgx

1
@osgx:妄想レベル3の私にとって、あなたの提案は機能しません。それを使用することはまだ許可されていません。
マーティン・ウエディング

回答:


41

/proc書き込み可能なファイルは通常、値をエコーすることで変更されます。試してみてください:

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

以下のファイルに/proc/sys/も簡単にアクセスできるsysctlコマンドがあるため、代わりに次の操作を実行できます。

sudo sysctl -w kernel.perf_event_paranoid=1

-wfor writeはオプションのようですが)。これがブート時に行われるようにするには/etc/sysctl.d/99-mysettings.conf、次の行で独自のファイルを作成します

kernel.perf_event_paranoid=1

/run/sysctl.d/およびの既存のファイルを上書きしないファイル名を選択します/usr/lib/sysctl.d/man sysctl.dを参照してください。


12
再起動後も維持するには:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
マルシオ

1
回答にコメントを追加してください
Leos313

1
@ Leos313完了。念押し有難う。
meuh

@Márcio:切り捨てるのではなく、に追加ますlocal.conf。または/etc/sysctl.d/perf.conf
宛て
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.