この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Mismatched Call Stacks between Bottom-up tree and Call Stack pane」(http://software.intel.com/en-us/articles/mismatched-call-stacks-between-bottom-up-tree-and-call-stack-pane/) の日本語参考訳です。
hotspot、コンカレンシー、ロックと待機などのスタックのサンプル収集を行う解析では、[Bottom-up (ボトムアップ)] ペインにコールスタック情報が表示されます。(OS タイマーのみ)
コールスタック・ツリーには、時間のかかる関数を呼び出しているすべての呼び出しシーケンス (スタック) が表示されます。[/Function/Call Stack (/関数/コールスタック)] ビューでは異なるスレッドのコールスタック情報を 1 つにまとめたものを、[/Function/Thread/Call Stack (/関数/スレッド/コールスタック)] ビューでは個々のスレッドのコールスタック情報を確認できます。
以下は、シングルスレッドのアプリケーションで hotspot 解析を行った結果です。このアプリケーションでは foo_data_collected() という関数に時間がかかっています。この関数のスタック wmain() は、ボトムアップ・ツリーでは 1 つだけですが、[Call Stack (コールスタック)] ペインでは 2 つあります。
1 つ目の wmain() は “test_itt_api.cpp:32” からのものであることが分かります。2 つ目はどうでしょうか?
2 つ目の wmain() は “test_itt_api.cpp:24” からのものです。つまり、wmain() は時間のかかる foo_data_collected() を異なるソース行で呼び出しているのです。この 2 つのスタックは、[Bottom-up (ボトムアップ)] ペインでは 1 行にまとめて表示されますが、 [Call Stack (コールスタック)] ペインでは別々に表示されます。