アプリケーションの最もホットなコードパスを特定するには、[フレームグラフ] ウィンドウを使用します。
フレームグラフは、アプリケーションのスタックとスタックフレームの関係を視覚的に表現します。グラフは、X 軸にアプリケーションの全関数を、Y 軸にスタックの深さを表示します。関数は古い順に積み重ねられ、親関数は子関数の直下に配置されます。グラフに表示される関数の幅は、その関数が CPU で実行された時間を示しています。つまり、アプリケーションで最もホットな関数は、フレームグラフでは最も幅広く表示されます。
[フレームグラフ] ウィンドウにアクセス
- アプリケーションでホットスポット解析を実行します。コールスタックのデータを収集していることを確認してください。
- [ユーザーモード・サンプリング] モードで解析を実行する場合、CPU サンプリング・データをスタック収集するオプションはデフォルトで有効になっています ([詳細] セクションを参照)。
- [ハードウェア・イベントベース・サンプリング] モードでは、[スタックを収集] オプションを有効にします。
- 解析が完了し、結果が表示されたら、[フレームグラフ] タブに切り替えます。また、[サマリー] ウィンドウの右上の [ホットスポットの詳細] セクションにある [フレームグラフ] リンクをクリックしても切り替えられます。
[フレームグラフ] ウィンドウの要素
フレームグラフ:
このセクションでは、アプリケーションのスタックとスタックフレームの関係を視覚的に表現します。グラフのすべてのボックスは、関数名とスタックフレームを表しています。横軸は、プロファイルされたスタックの母集団をアルファベット順に並べたものです。縦軸はスタックの深さを示し、最下部はゼロから始まります。
フレームグラフは、時間経過によるデータを表示しません。グラフの各ボックスの幅は、合計 CPU 時間に対する関数の CPU 時間のパーセンテージを表します。関数の合計時間には、関数とその子関数 (呼び出し先) のすべての処理時間が含まれます。
フレームグラフは、表形式の [トップダウン] ビューのデータをグラフィカルに表したものです。
- [ズーム/選択] アクション: 関数を詳しく調査するため、ボックスをクリックして水平方向に拡大します。その中には子関数も表示されます。古いフレーム (選択したボックスの下) は、一部分しか見えないため薄い色で表示されます。フレームグラフをズームおよび選択すると、[コールスタック] ペインのデータはそれに連動して更新されます。
- [FILTER] ツールバー: フレームグラフは、[FILTER] ツールバーのグローバルフィルターの設定に連動します。このツールバーを使用して次のデータをフィルター処理できます。
- 関数の色: フレームグラフでは、関数タイプを色分けして識別します。
- ユーザー: ユーザーのアプリケーション・モジュールからの関数
- システム: システムまたはカーネルモジュールからの関数
- 同期: スレッド化ライブラリーからの同期関数 (OpenMP* のバリアなど)
- オーバーヘッド: スレッド化ライブラリーのオーバーヘッド関数 (OpenMP* のフォークやディスパッチャーなど)
詳細エリア:
フレームグラフのボックスにカーソルを合わせると、CPU 時間と選択したスタックフレームの合計時間のパーセンテージが表示されます。
ツールチップ:
フレームグラフのボックスにカーソルを合わせると、選択したバーやスタックフレームの詳細がツールチップに表示されます。
- CPU 時間
- 関数名
- モジュール名
- ソースファイル
- 関数タイプ
凡例:
凡例は、フレームグラフに含まれる関数のタイプを説明しています。
[ナビゲーション] バー:
[ナビゲーション] バーにあるこれらの制御を使用して、フレームグラフの表示を管理します。
- : [フレームグラフ] モードを選択します。
- : [つららグラフ] モードを選択します。フレームグラフの表示を反転します。
- : 直前のズーム操作を取り消します。
- : フレームグラフの表示を元に戻します。
検索:
フレームグラフで関数を検索します。検索文字列には通常の正規表現を利用できます。表示される結果の CPU 時間と合計時間のパーセンテージには、一致したすべての関数の時間が含まれます。
フレーム・グラフ・データの解析
フレームグラフに含まれるアプリケーションの情報を解析する際のヒントに活用してください。
- アプリケーション内のホットなコードパスで、それぞれの関数と呼び出しに費やされる時間を解析します。関数バーには CPU 時間の割合が表示されます。
- 解析に役立つ可視化表現として、[フレームグラフ] と [つららグラフ] のどちらかを選択できます。
- [FILTER] バーやタイムラインでのデータのフィルター処理
- アプリケーションの最適化は、フレームグラフの最も低層の関数から開始して、上方向へ進めます。
- 最もホットなユーザーと同期関数に注目してください。フレームグラフでは、それらは最も幅広く表現されます。
- [スタック] ペインで関数のソースコードを詳しく調査します。