2017-10-25 13 views
1

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サイクルではなく、そのタイプのイベントをトレースする場合にのみ収集を開始/停止できるようです。

答えて

2

フィルタのオプションについてはperf recordのマニュアルページを読むことをお勧めします。

- - フィルタ

イベントフィルタを:私は、マンページの助けを借りてperf record --filterオプションを通り抜けた後、私はこれを見つけます。このオプションは、基本的には、イベントがトレースポイントのどちらかである場合にのみ

にPMU (例えばインテルPTまたはのCoreSight)をトレースポイントイベント(複数可)またはハードウェアのトレースのいずれかを選択するイベントセレクタ(-e) に従ってくださいイベントまたはハードウェアトレースイベント(IntelPTなど)を使用すると、フィルタオプションが機能します。したがって、-e cyclesで示されるイベントがトレースポイントイベントであるかどうかを確認してください。私は私のシステムでperf listを行う場合

、私は明らかにサイクルは、 "トレースポイントイベント" ではありません詳細 -

~/linux-4.11.3/tools/perf/perf list

cpu-cycles OR cycles [Hardware event]

List of pre-defined events (to be used in -e):の下に取得します。基本ハードウェアイベントです。トレースポイントのイベントの例は次のようになります。

kmem:kmalloc [Tracepoint event]

perf.dataは多くのパラメータに基づいてパケットを収集することができます。採取されたサンプルは、特定の頻度/期間で採取されています。

周波数にパケットを収集するように設定することができるperf record -Fがあります。 perf recordで利用可能なすべてのオプションを読むことをお勧めします。収集されたサンプルの数が少ないほど、この頻度に起因する可能性があります。おそらく、頻度を増やして改善があるかどうかを確認できます。また、イベントの期間を設定するオプションもあります。通常、この周波数を上げることのできる限界があることに注意してください。それを超えても、CPUはそれ自体を管理している問題を開始します(割り込みやすべてのため...)。

あなたは-e cyclesは、あなたが任意のイベントを指定するだけサイクルイベントを収集し、デフォルトでperf record、PERF意志をしない、すなわち場合は、デフォルトのイベントであると言うとき、はいあなたが正しいです。

+0

ありがとうございました。私のperf(v 4.4.87)はゼロ "Tracepoint"イベントをリストしています。ハードウェア、ソフトウェア、ハードウェアキャッシュ、カーネルPMU、Rawハードウェア、ハードウェアブレークポイントのカテゴリのみが表示されています。また、私のためにリストされているkmemもありません。リストを元のQに追加します。 – Bram

+0

perfをrootとして実行すると、トレースポイントのイベントが表示されます。それでも、CPUサイクルを追跡する場合、データ収集の開始/停止を制御できないのは不思議です。 – Bram

+0

はい、残念なことに、トレースイベントのみが(アドレスフィルタなどを介して)データ収集の開始と停止を処理するように見えます。 –

関連する問題