3

2 つの優れたプロファイラーを見つけました。

両方試した人いる?どちらが良いですか?

4

1 に答える 1

3

oprofile の方が正確です。CPU パフォーマンス モニタリング (数百のパフォーマンス イベントを備えた組み込みのハードウェア モニタリング) を使用します。

および google-perftools libprofiler.so 使用setitimer- OS カーネルの間隔タイマー:

$ nm -D libprofiler.so | grep timer
     U getitimer
     U setitimer

HZインターバルタイマーはOSによってエミュレートされ、私が知っているように(1秒あたり100回または1秒あたり1000回または300または250)を超えることはできません。10000 と 100000 の両方を試しましたが、実効レートは 1000 でした (プログラムの実行時間は 2 秒で、Google から CPU プロファイラーによって収集されたサンプルは ~2000 しかありません)。これは私の HZ です:

$ zgrep HZ= /proc/config.gz
CONFIG_HZ=1000

これがティックレスカーネルでどのように機能するかわかりません。

次に、oprofile は CPU で特別なハードウェアを使用し、このハードウェアは数ティックまで正確です。プログラムがある場所で、CPU の 100000 番目または 1000000 番目のティックごとに測定できます。この値は OS HZ 設定に関連付けられていません。また、CPU の N 番目ごとのティックだけでなく、N 番目ごとの L2 キャッシュ ミスや N 番目ごとのjmp予測ミスなどについてもプロファイリングできます... Pentium Pro 以降の CPU には何百ものハードウェア パフォーマンス イベントがあります.

oprofile のもう 1 つの優れた点は、すべてのユーザー アプリケーション、またはすべてのユーザー アプリケーションまたはカーネルとすべてのアプリケーションをプロファイリングできることです。

ただし、oprofile を使用するには root が必要です (AFAIK)。間違った使用法でシステムをフリーズさせる可能性があります。カーネルで有効にする必要があります (カーネルのビルド時)。

google-perftools の優れた点は次のとおりです。使いやすい。優れたグラフ作成および分析機能。動作するのにルートは必要ありません。また、google-perftools には優れたヒープ プロファイラがあります。

oprofile と google-perftools/cpuprofiler の両方:

  • アプリケーションの再コンパイルは必要ありません (gprof/gcov で必要だったように)
  • 部分的なコールグラフを描画できます (kcachegind で行われるように、たとえば1 2 ; pprof はcallgrindcommand を使用して kcachegrind を介して描画することもできます)
  • 実際のプロファイルを測定します (kcachegrind/callgrind/ 他の valgrind ベースのようなエミュレートされたものではありません)
  • ポータブル (oprofile は CPU からのサポートが必要ですが、intel/amd/via/ 多くのアーム用です。perftools は、コールスタックを取得して OS に setitimer をインストールするように要求できる場所ならどこでも動作します)
于 2011-11-10T17:19:25.270 に答える