私は C で小さなプログラムを書いており、そのパフォーマンスを測定したいと考えています。
プロセッサでどのくらいの時間実行され、キャッシュ ヒットとミスが何回発生したかを確認したいと思います。コンテキスト スイッチとメモリ使用量に関する情報も用意しておくと便利です。
プログラムの実行には 1 秒もかかりません。
/proc/[pid]/stat の情報は欲しいのですが、プログラムが終了/強制終了された後にそれを確認する方法がわかりません。
何か案は?
編集:Valgrind はオーバーヘッドをかなり増やすと思います。そのため、/proc/[pid]/stat のように常に存在するシンプルなツールが欲しかったのです。
ベストアンサー1
使用パフォーマンス:
perf stat ./yourapp
を参照してくださいカーネル wiki perf チュートリアル詳細については、こちらをご覧ください。これは CPU のハードウェア パフォーマンス カウンターを使用するため、オーバーヘッドは非常に小さくなります。
ウィキからの例:
perf stat -B dd if=/dev/zero of=/dev/null count=1000000
Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000':
5,099 cache-misses # 0.005 M/sec (scaled from 66.58%)
235,384 cache-references # 0.246 M/sec (scaled from 66.56%)
9,281,660 branch-misses # 3.858 % (scaled from 33.50%)
240,609,766 branches # 251.559 M/sec (scaled from 33.66%)
1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%)
2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%)
217 page-faults # 0.000 M/sec
3 CPU-migrations # 0.000 M/sec
83 context-switches # 0.000 M/sec
956.474238 task-clock-msecs # 0.999 CPUs
0.957617512 seconds time elapsed
カーネル モジュールを手動でロードする必要はありません。最新の Debian システム (linux-base パッケージを使用) ではそのまま動作するはずです。/ コンボを使用すると、システム全体のプロファイリングも実行できます。デバッグ シンボルを持つアプリケーションまたはライブラリはperf record -a
、perf report
レポートに詳細とともに表示されます。
視覚化のために炎グラフうまく機能しているようです。(2020年更新:ホットスポットUI にはフレーム グラフが統合されています。