event Tracing for Windows (ETW) は、カーネルまたはアプリケーション定義のイベントをログ ファイルに記録できる効率的なカーネル レベルのトレース機能です。 リアルタイムまたはログ ファイルからイベントを使用し、それらを使用してアプリケーションをデバッグしたり、アプリケーションでパフォーマンスの問題が発生している場所を特定したりできます。
ETW を使用すると、イベント トレースを動的に有効または無効にできます。これにより、コンピューターやアプリケーションの再起動を必要とせずに、運用環境で詳細なトレースを実行できます。
イベント トレース API は、次の 3 つの異なるコンポーネントに分割されます。
次の図は、イベント トレース モデルを示しています。
コントローラー
コントローラーは、ログ ファイルのサイズと場所を定義し、 イベント トレース セッションを開始および停止し、プロバイダーを有効にして、セッションにイベントを記録し、バッファー プールのサイズを管理し、セッションの実行統計情報を取得できるようにするアプリケーションです。 セッション統計には、使用されるバッファーの数、配信されるバッファーの数、失われたイベントとバッファーの数が含まれます。
詳細については、「 イベント トレース セッションの制御」を参照してください。
Providers
プロバイダーは、イベント トレース インストルメンテーションを含むアプリケーションです。 プロバイダーが自身を登録した後、コントローラーはプロバイダーのイベント トレースを有効または無効にすることができます。 プロバイダーは、有効または無効の解釈を定義します。 一般に、有効なプロバイダーはイベントを生成しますが、無効なプロバイダーはイベントを生成しません。 これにより、常にイベントを生成することなく、アプリケーションにイベント トレースを追加できます。
ETW モデルはコントローラーとプロバイダーを別々のアプリケーションに分離しますが、アプリケーションには両方のコンポーネントを含めることができます。
詳細については、「 イベントの提供」を参照してください。
プロバイダーの種類
プロバイダーには、MOF (クラシック) プロバイダー、WPP プロバイダー、マニフェスト ベースのプロバイダー、TraceLogging プロバイダーの 4 種類があります。 レガシ システムをサポートする必要のないWindows Vista以降のアプリケーションを作成する場合は、マニフェスト ベースのプロバイダーまたは TraceLogging プロバイダーを使用する必要があります。
MOF (クラシック) プロバイダー:
- RegisterTraceGuids 関数と TraceEvent 関数を使用して、イベントを登録および書き込みます。
- MOF クラスを使用して、コンシューマーがイベントを使用する方法を認識できるようにイベントを定義します。
- 一度に有効にできるトレース セッションは 1 つだけです。
WPP プロバイダー:
- RegisterTraceGuids 関数と TraceEvent 関数を使用して、イベントを登録および書き込みます。
- プリプロセッサによるソース コードでの WPP インストルメンテーションのスキャンから推論されたデコード情報を含む TMF ファイルを関連付けます (バイナリの .pdb にコンパイルされます)。
- 一度に有効にできるトレース セッションは 1 つだけです。
マニフェスト ベースのプロバイダー:
- EventRegister と EventWrite を使用して、イベントを登録および書き込みます。
- マニフェストを使用して、コンシューマーがイベントを使用する方法を認識できるようにイベントを定義します。
- 最大 8 つのトレース セッションを同時に有効にすることができます。
TraceLogging プロバイダー:
- TraceLoggingRegister と TraceLoggingWrite を使用して、イベントを登録および書き込みます。
- 自己記述型のイベントを使用して、イベント自体に、それらを使用するために必要なすべての情報が含まれるようにします。
- 最大 8 つのトレース セッションを同時に有効にすることができます。
すべてのイベント プロバイダーは基本的に、API のイベント トレース ファミリ (レガシ テクノロジの場合は TraceEvent 、新しいテクノロジの場合は EventWrite/EventWriteEx ) を使用します。 イベント プロバイダーは、イベント ペイロードに格納するフィールドの種類と、関連するイベント デコード情報を格納する場所が異なります。
コンシューマー
コンシューマーは、イベントのソースとして 1 つ以上のイベント トレース セッションを選択するアプリケーションです。 コンシューマーは、複数のイベント トレース セッションから同時にイベントを要求できます。システムは、時系列でイベントを配信します。 コンシューマーは、ログ ファイルに格納されているイベント、またはリアルタイムでイベントを配信するセッションからイベントを受信できます。 イベントを処理する場合、コンシューマーは開始時刻と終了時刻を指定でき、指定された時間枠内で発生したイベントのみが配信されます。
詳細については、「イベントの利用」を参照してください。
Note
ETW トレースの分析ツール: ETW イベントはプログラムで使用できますが、いくつかのツールで豊富な視覚化と分析が提供されます。
- Windows パフォーマンス アナライザー (WPA) — Windows パフォーマンス レコーダー (WPR) または xperf によってキャプチャされた ETW トレースを分析するためのグラフィカル ツールです。 CPU、ディスク、メモリ、UI の応答性分析に最適です。
- PerfView - .NETとネイティブパフォーマンス分析のためのMicrosoftから無料のオープンソースツール。 ETW を使用した CPU プロファイリング、GC 分析、およびウォール クロック調査に関する優れた機能を備えています。
- xperf (Windows Performance Toolkit) — カーネルおよびユーザー モードの ETW トレースをキャプチャするためのコマンド ライン ツール。
- tracerpt — ETW ログ ファイルからレポートを生成するための組み込みのWindows ツール。
コマンド ライン トレース ツールの一覧については、「 イベント トレース ツール」を参照してください。
見つからないイベント
Perfmon、システム診断、およびその他のシステム ツールは、イベント ログに存在しないイベントを報告し、イベント トレーシング for Windows (ETW) の設定が最適でない可能性があることを示す場合があります。 イベントは、さまざまな理由で失われる可能性があります。
イベントの合計サイズが 64K を超えています。 これには、ETW ヘッダーとデータまたはペイロードが含まれます。 イベント サイズはアプリケーションによって構成されているため、ユーザーはこれらの不足しているイベントを制御できません。
ETW バッファー サイズは、イベント の合計サイズよりも小さいです。 イベント サイズはイベントをログに記録するアプリケーションによって構成されるため、ユーザーはこれらの不足しているイベントを制御できません。
リアルタイム ログの場合、リアルタイム コンシューマーはイベントを十分に高速に消費していないか、完全に存在せず、バッキング ファイルがいっぱいになっています。 これは、イベント ログ サービスが停止し、イベントがログに記録されるときに開始された場合に発生する可能性があります。 ユーザーは、これらの不足しているイベントを制御できません。
ファイルにログを記録する場合、ディスクの速度が遅すぎてログ記録速度に追いつけません。
これらの理由から、これらの問題を、イベントを生成しているアプリケーションまたはサービスのプロバイダーに報告してください。 これらの問題は、アプリケーション開発者またはサービスがイベントをログに記録することによってのみ修正できます。 不足しているイベントがイベント ログ サービスで報告されている場合は、イベント ログ サービスの構成に問題があることを示している可能性があります。 ユーザーは、イベント ログ サービスで使用される最大ディスク領域を増やす機能が制限されている場合があり、不足しているイベントの数が減る可能性があります。