Android Traceviewのトレースベースプロファイリング手法とサンプリングベースプロファイリング手法の違いは何ですか?私はトレースベースの方がより正確だと思っていましたが、実際には機能を持つ他の呼び出しがあると、実際のCPU時間を歪めるようです。Androidトレースベースとサンプリングベースのプロファイルプロファイリングの違いと報告されたCPU時間への影響
たとえば、A-1とA-2の2つの実装を持つ関数Aを評価したいと考えています。
- A-1には、A-1-1など、もう1つの関数呼び出しがあります。
- A-2にはA-1-1などの関数呼び出しもありますが、A-1-1にはA-1-1-1などの関数呼び出しもあります。
ここで、トレースベースのプロファイリングは、1つの余分な関数A-1-1-1をトレースする必要があり、この余分なCPU使用率がCPU時間でレポートされるため、 A-2の私は正しい?
このように、トレースベースの方法では、親関数の実際のCPU時間を報告するときに子メソッドをトレースすることによってCPUのオーバーヘッド時間が考慮されますか?一方、サンプリングベースの方法の問題は、非常に軽量な機能を捕捉できないことである。関数が0.2ミリ秒のCPU時間を要し、サンプリング間隔が1ミリ秒の場合はどうなりますか?私はそれを使っていくつかの実験を行い、軽量関数呼び出しをキャッチできません。相違点に関するあらゆるアイデアやドキュメントを参照してください。
最終的な質問は、どちらが相対比較のためにより正確ですか?
今のところ、すべての関数呼び出しがどれほど速くても問題ないので、Tracingを先に進めました。同じ関数のさまざまな実装の相対比較のために必要なので、トレースは私のために働いた。 – utengr
それはあなたのために、良い仕事。私はどの言語でも良い経験をしたことはありません。私は大規模システムのそれほど関連性のない部分を最適化することをいつも終わらせました。 –
私は最適化の目的でそれを使用していません。レポートのために、関数呼び出し内のさまざまなアルゴリズムの相対的なCPU時間。例えば、そのアルゴリズムAは2%のCPU使用率を有し、Bは5%のCPU使用率を有する。 – utengr