ユーザースペースの「perf」ツールを実行するには、ルート(管理者)権限が必要ですか?(perfイベントはLinuxカーネルで有効になっています)


25

perfシステム管理者(root)としてユーザースペースツールを実行する必要がありますか、それとも普通のユーザーとして(または少なくともいくつかのサブコマンド)を実行できますか?


2
権限がないために必要なことを実行できないUnixプログラムは、通常、仕事を実行できない場合にエラーをスローします。それを実行して見てください!
カレブ

1
私はこの質問をして、perfツールのユーザースペース部分(通常のユーザーとして$ HOMEに)をインストールしようとする価値があるかどうかを判断します(これは自明ではありません)。
ヤクブナルブスキ

FYI Ubuntuの中perfにあるlinux-tools、パッケージので、インストールperfシンプルがあります。
ヤクブナルブスキ

1
@JakubNarębski:自分のマシンではなく、管理者がパッケージのインストールに消極的である場合を除きます。
マーティンウエディング

回答:


33

perfrootにならずにできることは、sysctl設定に依存しますkernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2:測定を行うことはできません。perfユーティリティは、まだして既存のレコードを分析するのに便利かもしれませんperf lsperf reportperf timechartまたはperf trace
  • kernel.perf_event_paranoid= 1:perf statまたはperf recordでコマンドをトレースし、カーネルプロファイリングデータを取得できます。
  • kernel.perf_event_paranoid= 0:perf statまたはperf recordでコマンドをトレースし、CPUイベントデータを取得できます。
  • kernel.perf_event_paranoid= -1:カーネルトレースポイントに直接アクセスできます(具体的にはmmap、によって作成されたファイルを使用できますが、perf_event_openその意味はわかりません)。

1
いいね cat /proc/sys/kernel/perf_event_paranoid1を返しますので、少なくともいくつかの測定を行うことができるようです(ところで、「カーネルプロファイリングデータ」と「CPUイベントデータ」の違いは何ですか?参照で十分です)
ヤクブナルブスキ

2
@Jakub:私の理解では、カーネルイベントを使用すると、さまざまなカーネル関数の呼び出しを確認できます。CPUイベントは、メモリ内の特定の場所がヒットした回数を示すCPU内のカウンターです。私はそれらを使用したことがないので、それらについて詳しく説明することはできません。LWNにはこのトピックに関するかなりの数の記事がありますが、それはまだ進化しています。
ジル 'SO-悪であるのをやめる'

4
paranoid = 2を使用すると、ユーザー空間で独自のコードのプロファイルを作成できます(たとえば、perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'正確なユーザー空間サイクルと命令カウントを表示し、カウントを取得することもできuops_issued.any ます)が、コードのカウントは取得しませんシステムコール/割り込み中に実行されました。したがって、報告されたCPU周波数(サイクル/時間)は、カーネルで費やされた時間のために、実際より少なくともわずかに低くなります。perf_event_paranoid == 1が実際にx86 perfに適用する制限は何ですか?
ピーター

「CPUイベント」とは、プロセスごと/スレッドごとではなく、コア全体ですべてをプロファイリングすることを意味します。すなわち偏執= 1以上、他のユーザーのコードをプロファイリングからあなたを停止し、1だけがカーネルコードは、独自のプロセスによって呼び出されたプロファイルすることができます(システムコール)
ピーター・コルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.