ユーザーモード・サンプリングとトレース結果で高精度の CPU 時間データを取得するように Windows* 上でインテル® VTune™ プロファイラーを設定します。
デフォルトでは、インテル® VTune™ プロファイラーは OS スケジューラーのティック粒度をベースに CPU 時間を検出します。その結果、CPU 時間値は OS スケジューラーのティック間隔よりも短い間隔で実行されるターゲット (例えば、ビデオデコーダーのフレームごとの計算) では、CPU 時間値が不正確になる可能性があります。
CPU 時間情報の正確な収集は、ユーザーモード・サンプリングとトレース解析タイプ (ホットスポットとスレッド化) で利用でき、管理者権限でインテル® VTune™ プロファイラーとアプリケーションを実行する場合に、デフォルトの事前定義解析設定で有効になります。
より正確な CPU 時間情報を収集するため、インテル® VTune™ プロファイラーは Windows* のイベントトレース (ETW) 機能を使用します。例えば、ETW なしでサンプルは 10ms 間隔で行われます。サンプルごとに、スレッドが実行された時間を OS に問い合わせ、サンプル間の差が計算され、デルタが算出されます。このメカニズムを介して OS から返される情報の粒度は粗めです。インテル® VTune™ プロファイラーはデルタを合計してユーザー・インターフェイスに表示します。ETW を有効にすると、インテル® VTune™ プロファイラーは他のスレッドの実行に費やされた時間をフィルター処理 (除外) し、ETW から取得したコンテキスト・スイッチ情報に基づいてそれぞれ 10ms サンプル内で、監視するスレッドの時間を正確に計算できます。この追加情報を基に、正確な関数/スレッドの CPU 時間メトリックが計算されます。
インテル® VTune™ プロファイラーは、Microsoft* NT Kernel Logger への排他アクセスを必要とします。そのため、システム上でこのモードを実行できるインテル® VTune™ プロファイラー収集は 1 つのみであり、ほかのツールはこのサービスを利用できません。インテル® VTune™ プロファイラーが NT Kernel Logger にアクセスできない場合、収集はこのモードを無効にして続行されます。
このタイプの収集では、より多くの処理時間とディスク容量を必要とします。インテル® VTune™ プロファイラーは、システム構成とプロファイル・ターゲットによっては、論理 CPU ごとに 1 分あたり最大 5MB の一時データを生成することがあります。
正確な CPU 時間収集を有効または無効にするかは、データ収集中にシステム上で何が実行されているか、およびアプリケーションの構造によって異なります。あるケースでは、"通常" と "高い精度" の CPU 時間の間にはおよそ 3% の変動が生じる可能性があります。また、その差が 30% または 40% となる特殊ケースがあります。スレッドが実行されていても、ETW なしで取得されたサンプルが 10ms ごとに非アクティブになると、結果は実行時間と大きくかけ離れることになります。または、スレッドがほとんど非アクティブであっても 10ms のサンプル頻度で正確に実行される場合、実際とは異なり大量の時間を占有するように見える可能性があります。可能な限り、実際に検証することを推奨します。それには、このオプションを有効および無効にしてホットスポット・データを収集し、結果データを比較します。そうすることで、正確な CPU 時間オプションを使用しないで実行しても最適化の方向性を示すのに十分な結果が得られるのか、あるいはこのオプションを有効にするため管理者権限が必要なのかが判明します。ただし、システム運用の方針などにより高精度の CPU 時間の利用が制限される場合、一般に、"通常の" ホットスポット・データ収集により、アプリケーションのパフォーマンス解析が有効であることが分かります。
カスタム解析で高い精度の CPU 時間収集を無効にするには: