インテル® VTune™ プロファイラー・ユーザーガイド

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

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

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

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

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

プロセッサー上 (クォンタム内) でスレッドがアクティブである期間、プロファイラーはイベントベース・サンプリングによってプログラムロジックを再構築し、ハードウェア・イベントとプログラムコードを関連付けます。従来のイベントベース・サンプリングとは異なり、プロファイラーは各サンプリング割り込みで以下を収集します。

プログラムの実行ロジック (呼び出しと制御フローグラフ) を統計的に再構築し、時間経過におけるスレッドがアクティブな時間を追跡して、ハードウェア利用率とパフォーマンスに関連する情報を収集します。

スタック収集を設定

  1. インテル® VTune™ プロファイラーのツールバーで、 [解析の設定] ボタンをクリックします。

    [解析の設定] ウィンドウが開きます。

  2. [どこを] ペインで解析システムを指定し、[何を] ペインで解析ターゲットを指定します。

  3. [どのように] ペインで、必要なイベントベース・サンプリング解析タイプを選択します。通常は、ハードウェア・イベントベース・サンプリング・モードでホットスポット解析から開始することを推奨します。

  4. 必要に応じて収集オプションを設定します。コールスタックを解析する場合、[スタックを収集] オプションを有効にすることを検討してください。

  5. 下部にある [開始] ボタンをクリックして選択した解析タイプを実行します。

    インテル® VTune™ プロファイラーは、実行パスの情報とハードウェア・イベントベースのサンプリング・データを収集します。ハードウェア・イベント・ビューポイントで収集された結果を参照して、検出された呼び出しパスに関するパフォーマンス、並列処理および消費電力データを確認します。

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

  • デフォルトでは、Linux* 上のインテル® VTune™ プロファイラーは、スタック情報付きのハードウェア・イベントベースの収集にドライバーを使用しない Perf ベースのモードを使用します。ドライバーを使用するモードに切り替えるには、[スタックサイズ] オプションを 0 (無制限) に設定します。

  • コールスタック解析はデータ収集時のオーバーヘッドが増えます。スタックサイズに関連するオーバーヘッドを最小限にするには、カスタム・ハードウェア・イベントベース・サンプリング設定の [スタックサイズ] オプション、または CLI の -stack-size knob を使用して未処理のスタックのサイズを制限します。デフォルトで、Linux* では 1024 バイトのスタックサイズが収集されます。Windows* ではデフォルトでフルスタック・サイズが収集されます (0 サイズ値)。このオプションを無効にすると、オーバーヘッドは減少しますがスタックデータは収集されません。

パフォーマンス解析

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

[+] 記号をクリックして、各ホットスポット (デフォルトでは関数) を展開し、ホットスポットが実行された呼び出しパスを表示します。インテル® VTune™ プロファイラーは、パスの実行頻度に応じて呼び出しパスごとにすべてのハードウェア・イベントを解析します。

[ハードウェア・イベント] ビューポイント: 呼び出しパスごとのイベントカウント

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

ホットスポットが、コードを変更できないまたは動作が入力パラメーターに依存するサードパーティーのライブラリー関数にある場合、このような解析が重要になります。これに対処する最適化の方法は、呼び出し側を解析して関数の呼び出し回数を減らすか、パフォーマンスの低下につながるパラメーターや条件を理解することです。

並行性を調査

コールスタック収集が有効である場合 (例えば、ハードウェア・イベントベース・サンプリング・モードのホットスポット解析での [スタックを収集] オプション)、インテル® VTune™ プロファイラーはコンテキスト・スイッチを解析し、コンテキスト・スイッチのパフォーマンス・メトリックを使用してスレッドのアクティビティーに関連するデータを表示します。

[コンテキスト・スイッチの原因] > [同期] カラムヘッダーをクリックして、このメトリックでデータをソートします。最大のコンテキスト・スイッチ数と高い待機時間値の同期ホットスポットは、通常、このスタックにスレッドの競合があることを示します。

[ハードウェア・イベント] ビューポイント: コンテキスト・スイッチ

[コールスタック] ペインのドロップダウン・メニューでスタックに関連したタイプ (例えば、[プリエンプション・コンテキスト・スイッチ・カウント] タイプ) を選択して、それぞれのスレッド実行クォンタムを示す [タイムライン] ペインを調査します。濃い緑のバーはアクティブなスレッドのクォンタムを、灰色と薄い緑のバーはスレッドが非アクティブである期間 (コンテキスト・スイッチ) を示します。[タイムライン] ペインのコンテキスト・スイッチ領域にカーソルを合わせると、継続時間、開始時間、およびスレッドが非アクティブになった理由が示されます。

[ハードウェア・イベント] ビューポイント: スレッド・アクティビティー

[タイムライン] ペインでコンテキスト・スイッチ領域を選択すると、[コールスタック] ペインには先行するクォンタムが中断された呼び出しシーケンスが表示されます。

また、[タイムライン] ドロップダウン・メニューからハードウェアまたはソフトウェア・イベントを選択して、イベントがスレッド・アクティビティー・クォンタム (または非アクティブな期間) にどのようにマッピングされているか確認できます。

パフォーマンスと並列処理の解析で収集したデータを関連付けます。最大のイベント数を持つパフォーマンス・ホットスポットや高いイベントカウントを持つ同期ホットスポットとして示される実行パスが、最適化の候補となります。次のステップとして、電力の観点から同期などのコストを理解するため、電力メトリックを解析することが考えられます。

  • Perf ベースのドライバーを使用しない収集を使用した解析で、バージョン 4.17 より古いカーネルでは、コンテキスト・スイッチのタイプ (プリエンプションや同期) は識別されないため、次のメトリックは使用できません: 待機時間、待機レート、非アクティブ時間、プリエンプションや同期コンテキスト・スイッチ・カウント。

  • データが生成される速度 (サンプリング周波数とスレッドの同期/競合の割合に比例) は、データがトレースファイルに保存される速度よりも速くなる可能性があります。プロファイラーはプロファイルするプログラムのスレッドが実行のためスケジュールされないようにすることで、受信データレートを送信データレートに合わせようとします。これにより、明示的にポーズが要求されていなくても、タイムラインにポーズ領域が表示されます。この方法で受信データレートを制御できなかった場合、プロファイラーはサンプルレコードを失いますがハードウェア・イベント・カウントは保持されます。このような状況では、失われたサンプルレコードのハードウェア・イベント・カウントは特殊なノード [トレース・オーバーフローのためイベントを損失しました] に分類されます。

関連情報