9

さまざまな活動にどれだけの時間が費やされているかをプロファイリングしたいアプリケーションがあります。このアプリケーションは I/O 集中型であるため、すべてのライブラリ/システム コール (ウォール タイム) に費やされた時間を要約したレポートを取得したいと考えています。

oprofile を試してみましたが、Unhalted CPU サイクルに関して時間がかかるようです (これはリアルタイムではなく cputime です)。

壁の時間を与えるstrace -Tを試しましたが、生成されたデータは膨大で、要約レポートを取得するのは困難です(これにはawk/pyスクリプトが存在しますか?)

今、私は SystemTap を探していますが、十分に近く、変更できるスクリプトは見つかりません。また、オンサイトのチュートリアルもあまり役に立ちませんでした。私が探していることができるかどうかはわかりません。

私を正しい方向に向けてくれる人が必要です。どうもありがとう!

4

3 に答える 3

1

これは単に測定への好奇心から行っているのでしょうか?それとも、より速く実行できるように修正できる時間の浪費を見つけたいからですか?

目標ができるだけ速く実行することである場合は、ランダム一時停止を試してください。非常に大雑把なことを除いて、何も測定しません。直感に反するかもしれませんが、最大のスピードアップをもたらすコードを特定します。

于 2011-07-05T13:29:35.410 に答える
1

fntimes.stpsystemtap サンプル スクリプトを参照してください。https://sourceware.org/systemtap/examples/index.html#profiling/fntimes.stp

fntimes.stp スクリプトは、特定の関数ファミリ (非再帰的であると想定) の実行時間履歴を監視します。その後、毎回 (ウォームアップ間隔を超えて) 過去の最大値と比較されます。特定のしきい値 (250%) を超えると、メッセージが出力されます。

# stap fntimes.stp 'kernel.function("sys_*")'

また

# stap fntimes.stp 'process("/path/to/your/binary").function("*")'

その .stp スクリプトの最後の行は、特定の関数ファミリで消費された時間を追跡する方法を示しています。

probe $1.return { elapsed = gettimeofday_us()-@entry(gettimeofday_us()) }
于 2014-10-04T22:09:29.510 に答える