私は実際のプロファイリング ツールの代わりに pstack (定期的にループで呼び出される) を使用しています。一番上にある pid の CPU 使用率が 85% を超えていても、pstack は pid が CPU バウンドよりも頻繁に I/O でブロックされていることを示していることに気付きました。
pstack はどのように実装されていますか? I/O で実際にブロックされているときに、pstack が pid にアタッチされやすくなる理由はありますか?
私は実際のプロファイリング ツールの代わりに pstack (定期的にループで呼び出される) を使用しています。一番上にある pid の CPU 使用率が 85% を超えていても、pstack は pid が CPU バウンドよりも頻繁に I/O でブロックされていることを示していることに気付きました。
pstack はどのように実装されていますか? I/O で実際にブロックされているときに、pstack が pid にアタッチされやすくなる理由はありますか?
あなたはpstack
ループで定期的に呼び出していると言います-つまり、プロファイリングしているプロセス(A)とは別のプロセス(B)で呼び出します。それらが単一のコアで実行されている場合、A がブロックされたときに B が「起動」する可能性が高くなります。
とにかく、pstack
多くのサンプルは必要ないという理論に基づいて、手動でトリガーします。むしろ、私が入手したサンプルは、ひとまとめにするのではなく、精査する必要があります。
一般に、I/O 時間と CPU 時間の両方でサンプルを取得することをお勧めします。これは、I/O と CPU の浪費の両方によってプログラムが遅くなる可能性があるためです。どちらか一方が多少膨らんだとしても、それはかなり無害です。実際の目標が、関数のようなファジーなものを正確に測定するのではなく、最適化するものを正確に特定することであると仮定します。