Linux で C プログラムのキャッシュ ヒット/ミスと CPU 時間を測定する最もシンプルなツールは? 質問する

Linux で C プログラムのキャッシュ ヒット/ミスと CPU 時間を測定する最もシンプルなツールは? 質問する

私は 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 -aperf reportレポートに詳細とともに表示されます。

視覚化のために炎グラフうまく機能しているようです。(2020年更新:ホットスポットUI にはフレーム グラフが統合されています。

おすすめ記事