perfでプログラムのパフォーマンスをサンプリングしています。perfサンプリングを開始および停止する方法
これが私の作品:
$ perf record -g ./bench
...
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.023 MB perf.data (93 samples) ]
$ ls -al perf.data
-rw------- 1 bram bram 26848 Oct 25 10:22 perf.data
しかし、今、私は私のプログラムの特定のポイントで収集を開始し、停止します。しかし、私がそうするならば:
$ perf record -g -e cycles --filter="start render_image" ./bench
--filter option should follow a -e tracepoint option
フィルタフラグは-eオプションに従うので、私は困惑しています。何が起きてる?
私はperf.dataの小さなサイズにも困惑しています、それは実際には93サンプルしか収集されていませんか?それは数秒間実行されました。
最後に、 '-e cycles'がデフォルトのイベントであると仮定していますか?
更新:Arnabjyoti Kalitaが説明したように、Tracepointsというイベントの特別なカテゴリがあります。私がrootとしてperfを実行すると、それらは私の 'perf list'にのみ表示されます。
あまりにも悪いperfは、デフォルトのCPUサイクルではなく、そのタイプのイベントをトレースする場合にのみ収集を開始/停止できるようです。
ありがとうございました。私のperf(v 4.4.87)はゼロ "Tracepoint"イベントをリストしています。ハードウェア、ソフトウェア、ハードウェアキャッシュ、カーネルPMU、Rawハードウェア、ハードウェアブレークポイントのカテゴリのみが表示されています。また、私のためにリストされているkmemもありません。リストを元のQに追加します。 – Bram
perfをrootとして実行すると、トレースポイントのイベントが表示されます。それでも、CPUサイクルを追跡する場合、データ収集の開始/停止を制御できないのは不思議です。 – Bram
はい、残念なことに、トレースイベントのみが(アドレスフィルタなどを介して)データ収集の開始と停止を処理するように見えます。 –