Windows 用 USB イベント トレーシングの概要

このトピックでは、ユニバーサル シリアル バス (USB) のトレースおよびログ機能に関するクライアント ドライバー開発者向けの情報を提供します。 この情報は、USB デバイスの開発やデバッグを行うユーザーのために提供されるものです。 これには、ツールのインストール方法、トレース ファイルの作成方法、USB トレース ファイル内のイベントの分析方法に関する情報が含まれています。 このトピックは、USB のトレースおよびロギング機能を正常に使用するために必要な USB エコシステムとハードウェアについて包括的に理解していることを前提としています。

イベント トレースを解釈するには、Windows の「Windows の USB ホスト側ドライバー」、公式の「USB 仕様、および USB デバイス クラスの仕様」も理解しておく必要があります。

Windows のイベント トレーシングについて

Event Tracing for Windows (ETW) は、オペレーティング システムによって提供される汎用的な高速トレース機能です。 カーネルに実装されているバッファリングおよびロギング メカニズムを使用して、ユーザー モード アプリケーションとカーネル モード デバイス ドライバーの両方によって発生するイベントのトレース メカニズムを提供します。 さらに、ETW はログを動的に有効または無効にする機能を提供するため、再起動やアプリケーションの再起動を必要とせずに、運用環境で詳細なトレースを簡単に実行できます。 ログ記録メカニズムでは、非同期書き込みスレッドによってディスクに書き込まれるプロセッサごとのバッファーが使用されます。 このバッファリングにより、大規模なサーバー アプリケーションは混乱を最小限に抑えながらイベントを書き込むことができます。

ETW は Windows 2000 で導入されました。 それ以来、さまざまなコア オペレーティング システムおよびサーバー コンポーネントが、そのアクティビティを計測するために ETW を採用してきました。 ETW は現在、Windows プラットフォーム上の主要なインストルメンテーション テクノロジの 1 つです。 インストルメンテーションに ETW を使用するサードパーティ アプリケーションが増えており、その一部は Windows が提供するイベントを利用しています。 ETW は Windows プリプロセッサ (WPP) ソフトウェア トレース テクノロジにも抽象化されています。このテクノロジでは、開発中のデバッグ用に printf スタイルのメッセージをトレースするために、一連の使いやすいマクロが提供されています。

ETW は Windows Vista および Windows 7 向けに大幅にアップグレードされました。 最も重要な新機能の 1 つは、統合されたイベント プロバイダー モデルと API です。 つまり、新しい統合 API は、ログ トレースとイベント ビューアーへの書き込みを、イベント プロバイダーにとって 1 つの一貫した使いやすいメカニズムに結合します。 同時に、開発者とエンドユーザーのエクスペリエンスを向上させるために、いくつかの新機能が ETW に追加されました。

ETW と WPP の詳細については、「イベント トレース」および「Windows イベント トレーシング (ETW)」を参照してください。

ETW ログの USB サポート

USB は、ますます多様化する周辺機器を PC に接続する最も普及した手段の 1 つです。 USB ホスト PC と USB 周辺機器のインストール ベースは非常に大きく、システム ベンダー、デバイス ベンダー、エンド ユーザーは、USB デバイスがシステムおよびデバイス レベルで完璧に動作することを期待し、要求しています。

USB デバイスの大規模なインストール ベースとその急増により、Windows USB ソフトウェア スタック、USB ホスト コントローラー、および USB デバイス間の互換性の問題が明らかになりました。 これらの互換性の問題は、デバイスの動作障害、システムのハング、システムのクラッシュなど、お客様に問題を引き起こします。

システムやデバイスに直接アクセスしたり、場合によってはシステム クラッシュ ダンプを使用したりしない限り、USB デバイスの問題を調査してデバッグすることは困難または不可能でした。 ハードウェアへの完全なアクセスとクラッシュ ダンプがあったとしても、関連情報の抽出は時間のかかるテクニックであり、一部のコア USB ドライバー開発者のみが知っている内容です。 ハードウェアまたはソフトウェア アナライザーを使用して USB の問題をデバッグできますが、非常に高価であり、ごく一部の専門家のみが使用できます。

Windows 7 の USB ETW サポート

Windows 7 では、ETW は、USB ドライバー スタックが USB 関連の問題の調査、診断、デバッグを支援するために活用できるイベント ログ メカニズムを提供します。 USB ドライバー スタック ETW イベント ログは、USB ドライバー スタックの既存のアドホック ログ メカニズムによって提供されるほとんどまたはすべてのデバッグ機能を制限なくサポートします。 これにより、USB 関連の問題のデバッグが容易になります。これにより、長期的により堅牢な USB ドライバー スタックが提供されます。

Windows 7 の USB ホスト コントローラー ドライバーと USB ハブ ドライバーに ETW ログを追加しました。 USB ホスト コントローラー ドライバー層には、ホスト コントローラー ポート ドライバー (usbport.sys) とミニポート ドライバー (usbehci.sys、usbohci.sys、および usbuhci.sys) が含まれています。 USB ハブ ドライバー層は、USB ハブ ドライバー (usbhub.sys) で構成されます。 USB ドライバー ETW イベント プロバイダーは、Windows 7 のすべてのエディションと SKU に含まれています。

  • USB ハブ イベント

    USB イベント収集が有効になっている間、USB ハブ イベント プロバイダーは、USB ハブの追加と削除、すべてのハブのデバイス概要イベント、およびポート ステータスの変更を報告します。 これらのイベントを使用して、ほとんどのデバイス列挙エラーの根本原因を特定できます。

  • USB ポート イベント

    USB イベント収集が有効になっている間、USB ポート イベント プロバイダーは、クライアント ドライバーからの I/O、デバイス エンドポイントの開閉、ミニポートの開始と停止などのミニポートの状態遷移を報告します。 ログに記録された I/O には、物理 USB ポートの状態に対する要求が含まれます。 物理 USB ポートの状態遷移は、コア USB ドライバー スタック内のアクティビティの主要なイニシエーターの 1 つです。

Windows 8 の USB ETW サポート

Windows 8 では、USB 3.0 デバイスをサポートする USB ドライバー スタックが用意されています。 マイクロソフトが提供する USB 3.0 ドライバー スタックは、Usbxhci.sys、Ucx01000.sys、および Usbhub3.sys の 3 つのドライバーで構成されます。 3 つのドライバーはすべて連携して動作し、ほとんどの USB 3.0 ホスト コントローラーのネイティブ サポートを Windows に追加します。 新しいドライバー スタックは、SuperSpeed、High Speed、Full Speed、および Low Speed のデバイスをサポートします。 USB 2.0 ドライバー スタックは、Windows 8 でサポートされています。 USB 3.0 ドライバー スタックは、イベント トレースを通じて、ホスト コントローラーとそれに接続されているすべてのデバイスの詳細なアクティビティを表示します。

  • USB Hub3 イベント

    USB イベント収集が有効になっている間、USB Hub3 イベント プロバイダーは、USB ハブの追加と削除、すべてのハブのデバイス概要イベント、ポート ステータスの変更、USB デバイスとハブの電源状態を報告します。 ポート状態の変更は、物理 USB ポートの状態遷移であり、コア USB ドライバー スタック内のアクティビティの主要なイニシエーターの 1 つです。 Hub3 は、ほとんどのデバイス列挙失敗の根本原因を示す列挙プロセスの段階を報告します。 StateMachine キーワード (keyword) を有効にすると、Hub3 はソフトウェア デバイス、ハブ、ポート オブジェクトの内部ステート マシン アクティビティを報告します。これによって、ドライバーのロジックをより詳細に把握できます。

  • USB UCX イベント

    USB イベント収集が有効になっている間、USB UCX イベント プロバイダーは、クライアント ドライバーからの I/O、およびデバイス エンドポイントとエンドポイント ストリームのオープン/クローズを報告します。 StateMachine キーワード (keyword) を有効にすると、UCX はホスト コントローラーとエンドポイント オブジェクトの内部ステート マシン アクティビティを報告します。これによって、ドライバーのロジックをより詳細に把握できます。

  • USB xHCI イベント

    USB イベント収集が有効になっている間、USB xHCI イベント プロバイダーは、システムの xHCI コントローラーのプロパティと xHCI 操作の低レベルの詳細を報告します。 xHCI は、xHCI ハードウェアに送信され、xHCI ハードウェアによって完了されたコマンド要求を、xHCI 固有の完了コードを含めて報告します。

このセクションの内容

トピック 説明
Logman を使用して USB イベント トレースをキャプチャする方法 このトピックでは、Logman ツールを使用して USB ETW イベント トレースをキャプチャする方法について説明します。 Logman は、Windows に組み込まれているトレース ツールです。 Logman を使用して、イベントをイベント トレース ログ ファイルにキャプチャできます。
USB ETW トレースでのアクティビティ ID GUID の使用 このトピックでは、アクティビティ ID GUID に関する情報、イベント トレース プロバイダーに GUID を追加する方法、Netmon で GUID を表示する方法について説明します。
Netmon での USB ETW トレース Microsoft ネットワーク モニター (Netmon とも呼ばれる) を使用して、USB ETW イベント トレースを表示できます。 Netmon はトレースを自動的に解析しません。 それには USB ETW パーサーが必要です。 USB ETW パーサーは、USB ETW イベント トレースの構造を記述したテキスト ファイルであり、Network Monitor Parser Language (NPL) で書かれています。 パーサーは、USB 固有の列とフィルターも定義します。 これらのパーサーにより、Netmon は USB ETW トレースの解析に最適なツールとなります。
USB ETW での Xperf の使用 このトピックでは、Xperf と Netmon を使用して USB トレース データを分析する方法について説明します。
USB ETW と電源管理 このトピックでは、ETW を使用して USB セレクティブ サスペンド状態を調査し、Windows PowerCfg ユーティリティを使用してシステムのエネルギー効率の問題を特定する方法について簡単に概要を説明します。

USB ETW の使用
Windows の USB イベント トレーシング