高精度の CPU 時間データ収集

ユーザーモード・サンプリングとトレース結果で高精度の CPU 時間データを取得するように Windows* 上でインテル® VTune™ プロファイラーを設定します。

デフォルトでは、インテル® VTune™ プロファイラーは OS スケジューラーのティック粒度をベースに CPU 時間を検出します。その結果、CPU 時間値は OS スケジューラーのティック間隔よりも短い間隔で実行されるターゲット (例えば、ビデオデコーダーのフレームごとの計算) では、CPU 時間値が不正確になる可能性があります。

CPU 時間情報の正確な収集は、ユーザーモード・サンプリングとトレース解析タイプ (ホットスポットとスレッド化) で利用でき、管理者権限でインテル® VTune™ プロファイラーとアプリケーションを実行する場合に、デフォルトの事前定義解析設定で有効になります。

より正確な CPU 時間情報を収集するため、インテル® VTune™ プロファイラーは Windows* イベント・トレーシング (ETW) 機能を使用します。例えば、ETW を使用しない場合、サンプルは 10 ミリ秒間隔で取得されます。サンプルごとに、スレッドが実行された時間を OS に問い合わせ、サンプル間の差を計算して、デルタを算出します。このメカニズムを介して OS から返される情報の粒度は粗めです。インテル® VTune™ プロファイラーはデルタを合計してユーザー・インターフェイスに表示します。ただし、ETW を有効にすると、インテル® VTune™ プロファイラーはほかのスレッドの実行に費やされた時間をフィルターアウトして、ETW から取得したコンテキスト・スイッチ情報に基づいて各 10 ミリ秒サンプル内の監視するスレッドの時間を正確に計算できます。この追加情報を基に、正確な関数/スレッドの CPU 時間メトリックが計算されます。

インテル® VTune™ プロファイラーは、Microsoft* NT Kernel Logger への排他アクセスを必要とします。そのため、システム上でこのモードを実行できるインテル® VTune™ プロファイラー収集は 1 つのみであり、ほかのツールはこのサービスを利用できません。インテル® VTune™ プロファイラーが NT Kernel Logger にアクセスできない場合、収集はこのモードを無効にして続行されます。

このタイプの収集では、より多くの処理時間とディスク容量を必要とします。インテル® VTune™ プロファイラーは、システム構成とプロファイル・ターゲットによっては、論理 CPU ごとに 1 分あたり最大 5MB の一時データを生成することがあります。

正確な CPU 時間収集を有効または無効にするかは、データ収集中にシステム上で何が実行されているか、およびアプリケーションの構造によって異なります。あるケースでは、「通常」と「高い精度」の CPU 時間の間にはおよそ 3% の変動が生じる可能性があります。また、その差が 30% または 40% となる特殊ケースがあります。スレッドが実行されていても、ETW なしでサンプルが取得される 10 ミリ秒ごとにインアクティブになると、結果は実行時間と大きくかけ離れることになります。または、スレッドがほとんどインアクティブであっても 10 ミリ秒のサンプル頻度で実行される場合、実際とは異なり大量の時間を占有するように見えます。可能な限り、実際に検証することを推奨します。それには、このオプションを有効および無効にしてホットスポット・データを収集し、結果データを比較します。そうすることで、正確な CPU 時間オプションを使用しないで実行しても最適化の方向性を示すのに十分な結果が得られるのか、あるいはこのオプションを有効にするため管理者権限が必要なのかが判明します。ただし、システム運用の方針などにより高精度の CPU 時間の利用が制限される場合、一般に、「通常の」ホットスポット・データ収集により、アプリケーションのパフォーマンス解析が有効であることが分かります。

カスタム解析で高い精度の CPU 時間収集を無効にするには:

  1. (ホットスポットやスレッド化などの既存の設定をベースにして) 新しいカスタム解析を作成します。
  2. [高精度の CPU 時間を収集] オプションをオフにします。

関連情報