Xperf と Netmon を使用した USB のパフォーマンスの問題の分析
このトピックでは、USB ETW ログにキャプチャされたイベントのタイムラインを表示する方法をご紹介します。
Xperf には、パフォーマンスの問題を分析するための一連のカーネル イベントが用意されています。 このコマンドを使用すると、これらのイベントを記録し、グラフで表示できます。
Xperf イベントと USB ETW イベントの両方に精通している場合は、問題のシナリオについて USB ETW ログと Xperf ログを作成し、2 つのログ ファイルをマージして、これらを一緒に分析できます。 Xperf と Netmon を一緒に使用すると、特定のシナリオのシステム イベント (Xperf) と USB イベント (Netmon) の両方を表示できます。
管理者特権のコマンド プロンプトから次のコマンドを発行し、2 つのトレースを並行して開始します。
Xperf –on Diag
Logman start Usbtrace -p Microsoft-Windows-USB-USBPORT -o usbtrace.etl -ets -nb 128 640 -bs 128
Logman update Usbtrace -p Microsoft-Windows-USB-USBHUB –ets
問題のシナリオに対応するアクションを実行し、管理者特権のコマンド プロンプトから次のコマンドを発行してトレースを停止します。
Logman stop Usbtrace -ets
Xperf –stop
次のコマンド (特権は必要ありません) を使用して、2 つのトレース ログ ファイルを 1 つのファイルにマージします。
Xperf –merge usbtrace.etl C:\kernel.etl merged.etl
この例では、マージしたファイルを merged.etl という名前で作成しています。 このファイルは、Xperf Performance Analyzer または Netmon で開くことができます。 ファイルを Xperf で開くには、次のコマンドを実行します。
Xperf merged.etl
次の図に示されているように、Xperf では、幅広いカーネル イベントに特化したグラフを表示できます。 Xperf 記録オプションと Xperf GUI の詳細については、Xperf コマンド ライン リファレンスと Windows Performance Analyzer (WPA) の説明を参照してください。
マージされたトレース ログを Netmon で開くには、Netmon を実行し、[ファイル] -> [開く] -> [キャプチャ] の順にクリックし、ファイルを選択します。 Xperf と Netmon では、マージされたファイルを同時に開くことができます。 Xperf GUI と Netmon を切り替えて、特定の期間中にシステムと USB スタックで何が起こっていたかを分析できます。 Xperf ではシステム イベントに加えて USB イベントも表示できますが、USB イベントの読み取りには Netmon を使用する方が容易です。
既定では、Netmon ではマージされたトレース ファイル内のすべてのイベントが表示されます。 USB イベントのみを表示するには、次のようなフィルターを適用します。
ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB" OR ProtocolName == "USBPort_MicrosoftWindowsUSBUSBPORT"
このフィルター テキストは、Netmon のフィルター表示ペインで入力できます。 Netmon でフィルターを使用する方法の詳細については、「ケース スタディ: ETW と Netmon の使用による不明な USB デバイスのトラブルシューティング」の「USB Netmon フィルター」を参照してください。
USB イベントのタイミングを分析するには、Netmon に表示されたイベントからイベントまでの時間差を確認します。
表示されたイベントからイベントまでの時間差を確認するには
[フレームの概要] ペインで、列のタイトルを右クリックし、[列の選択] を選択します。
[無効な列] の一覧で、[時間差] を選択し、[追加]、[OK] の順にクリックします。
タイミングを確認するイベントのみを表示するためのフィルターを作成します。 たとえば、重複しない一括転送のディスパッチ イベントから完了イベントまでの遅延を表示するには、次のフィルターを追加します。
Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Dispatch URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER" OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER" OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER with Data"
- トレースに表示されるイベントから、イベント ID (説明) を選択できます。
- フィルターでイベント ID を使用するには、[フレームの概要] ペインでイベントの説明を右クリックし、[表示フィルターに説明を追加] を選択します。