インテル® VTune™ Amplifier 2018 ヘルプ

スタックとハードウェア・イベントベース・サンプリング収集

関数のコールスタックを解析して、パフォーマンス、並列処理、および電力消費の問題を特定するため、イベントベース・サンプリング・コレクターを設定できます。

Linux* ターゲットでは、カーネルがイベントベース・サンプリング・スタック収集をサポートするように設定されていることを確認してください。

マルチタスク・オペレーティング・システムは、すべてのソフトウェア・スレッドを時分割で実行します (スレッド実行のクアンタム)。インテル® VTune™ Amplifier のプロファイラーは、スレッドクアンタムの切り替えを識別することができ、スレッドクアンタムの配置に関連するすべての操作を監視します。

次の図はスレッドごとのクアンタム監視の概念を示します。

スレッドがプロセッサー上でアクティブである間 (クアンタム期間内)、プロファイラーはイベントベース・サンプリングを使用します。プログラムロジックと関連するハードウェア・イベント、およびプログラムコードとそのほかの特性を再構成します。通常のイベントベース・サンプリングとは異なり、プロファイラーは各サンプリング割り込みの間も以下を収集します。

これらすべては、統計的にプログラムの実行ロジック (呼び出しと制御フローグラフ) を再構成し、スレッドのアクティビティーを時系列にトレースするとともに、ハードウェア利用とパフォーマンスに関連するすべての情報の収集を許可します。

スタック収集の設定

  1. インテル® VTune™ Amplifier ツールバーの [New Analysis (新規解析)] ボタン をクリックします。

    [Analysis Type (解析タイプ)] 設定ウィンドウが表示されます。

  2. 左ペインの解析ツリーから、必要なイベントベース・サンプリング解析タイプを選択します。一般的に、[Advanced Hotspots (高度なホットスポット)] 解析から開始することが推奨されます。

    右のペインは、選択した解析タイプの設定オプションで更新されます。

  3. 解析オプションを設定します。

    • 高度なホットスポット解析で、[Hotspots and stacks (ホットスポットとスタック)] (推奨) または、[Hotspots, call counts and stacks (ホットスポット、コールカウント、スタック)] 収集レベルを選択します。

    • その他のハードウェア・イベントベース・サンプリング解析タイプでは、[Collect stacks (スタックを収集)] チェックボックスをオンにします。

  4. 右にある [Start (開始)] ボタンをクリックして、選択した解析タイプを実行します。

    インテル® VTune™ Amplifier は、実行パスの情報とともにハードウェア・イベントベースのサンプリング・データを収集します。収集された結果は、[Hardware Events (ハードウェア・イベント)] 表示で見ることができ、呼び出しパスで検出されたパフォーマンス、並列性、および電力消費データが提供されます。

  • [Estimate call counts (コールカウントの推測)] チェックボックスをオンにして、サンプルされた関数への呼び出し回数を統計的に近似できます。

  • イベントベース・スタック・サンプリングは、システム全体の収集に設定することはできません。起動またはアタッチするアプリケーションを指定する必要があります。

  • コールスタック解析を行うと、データ収集のオーバーヘッドが増えます。スタックサイズによるオーバーヘッドを最小化するため、カスタム・ハードウェア・イベントベース・サンプリング設定[Stack size (スタックサイズ)] オプションを使用するか、CLI で-stack-size オプションを指定して、スタックサイズを制限します。デフォルトでは、すべてのスタックが収集されます。このオプションを無効にすると、オーバーヘッドは軽減されますが、スタックデータは収集されなくなります。

パフォーマンス解析

[Hardware Events viewpoint (ハードウェア・イベント・ビューポイント)] を選択し、[Event Count (イベントカウント)] タブをクリックします。デフォルトでは、[Event Count] グリッドはクロックティック(CPU_CLK_UNHALTED) イベントカウントでソートされ、主なホットスポットがリストの上位に表示されます。

それぞれのホットスポット項目 (デフォルトでは関数) を展開し、ホットスポットが実行された一連の呼び出しパスを表示するには、「+」マークをクリックします。インテル® VTune™ Amplifier は、パスが実行された頻度を基に、呼び出しパスごとのハードウェア・イベントを分解します。

ハードウェア・イベント表示: 呼び出しパスごとのイベントカウント

サンプルされたノードに至るすべての実行パスのハードウェア・イベントのカウントが、そのノードのイベントカウントに合計されます。例えば、CpupSyscallStub 関数の上位ホットスポットは、INST_RETIRED.ANY のイベント数と 5 つの呼び出しシーケンスの合計 25 700 419 203 がほぼ等しくなります。

ホットスポットがサードパーティーのライブラリー関数の中にあるためコードを変更できない、または振る舞いが入力パラメーターに依存する場合、このような分解は非常に重要です。この場合、最適化の唯一の方法は呼び出し元を解析して、過度な関数呼び出しを排除するか、パフォーマンスを大幅に低下させる引数や条件を知ることです。

並列性の調査

コールスタック収集を有効にすると (例えば高度な解析の [Hotspots and stacks] オプション)、インテル® VTune™ Amplifier はコンテキスト・スイッチを解析し、コンテキスト・スイッチ・パフォーマンス・メトリックとしてデータをスレッドのアクティビティーに表示します。

[Context Switch by Reason (理由別のコンテキスト・スイッチ)] > [Synchronization (同期)] 列のヘッダーをクリックすると、このメトリックでソートできます。コンテキスト・スイッチ数が最も多く、待機時間が長い同期ホットスポットは、このスタック上でスレッド競合が発生していることを示します。

ハードウェア・イベント表示: コンテキスト・スイッチ

[Call Stack (コールスタック)] ペインのドロップダウン・メニューでコンテキスト・スイッチが原因のスタックタイプを選択 ([Preemption Context Switches (プリエンプション・コンテキスト・スイッチ)] など) して、[Timeline (タイムライン)] ペインに表示されるそれぞれのスレッド実行のクアンタムを調査します。濃い緑のバーは単一のスレッド・アクティビティーのクアンタム、灰色のバーと薄い緑のバーは、スレッドがインアクティブ状態 (コンテキスト・スイッチ) の範囲を示します。[Timeline] ペインのコンテキスト・スイッチ領域で、マウスをホバーすると、その存続期間、開始時間、およびスレッドがインアクティブな理由が表示されます。

ハードウェア・イベント表示: スレッドのアクティビティー

[Timeline] ペインでコンテキスト・スイッチ領域を選択すると、[Call Stack] ペインにクアンタムが割り込みされた呼び出しシーケンスが表示されます。

また、[Timeline] ドロップダウン・メニューからハードウェア、またはソフトウェア・イベントを選択して、イベントがスレッドのアクティビティーにどのように分布されているか見ることができます。

パフォーマンスと並列処理の解析中にデータを関連付けることができます。イベントカウントが最も多いパフォーマンス・ホットスポットや、同期ホットスポットとしてリストされる実行パスは、最適化の明白な候補です。次のステップは、電力の観点から同期方式などのコストを理解するため、電力関係のメトリックを解析することです。

データが生成される速度 (サンプリングの頻度とスレッド同期/競合の強度に比例) は、データがトレースファイルに保存される速度よりも大きくなる可能性があります。そのため、プロファイラーは、プロファイル中のプログラムのスレッドがスケジュールされないようにすることで、受信データレートと送信データレートを合わせようとします。これにより、ポーズが明示的に要求されていない場合でも、タイムライン上にポーズされた範囲が示されます。極端なケースでは、この手順で受信データレートの制限に失敗した場合、プロファイラーはサンプルレコードを失いますが、ハードウェア・イベントのカウントは保持します。そのような状況では、失われたサンプルレコードのハードウェア・イベント・カウントは、特殊なノード [Events Lost on Trace Overflow (トレース・オーバーフローで失われたイベント)] に関連付けられます。

関連情報