WDF での Windows Performance Toolkit (WPT) の使用

Windows 10 以降では、Windows Performance Toolkit (WPT) を使用して、特定のカーネル モード ドライバー フレームワーク (KMDF) またはユーザー モード ドライバー フレームワーク (UMDF) 2 ドライバーのパフォーマンス データを表示できます。

WPT 用 Windows Driver Frameworks (WDF) 拡張機能はどのように役立ちますか?

WPT を使用して、パフォーマンスに関する分析情報を取得したり、パフォーマンスの問題をトラブルシューティングしたりすることができます。 次に例を示します。

  • ドライバーの WDF I/O 要求の完了率、CPU 使用率、PnP コールバックと電源コールバックに費やされた時間を調べます。
  • UMDF 2 ドライバーと同様の KMDF ドライバーを比較し、UMDF がパフォーマンス要件を満たしているかどうかを判断します。
  • WDF I/O パスのパフォーマンスの不具合を特定します。
  • 特定のコールバックのインスタンスに時間がかかっているかどうかを判断します。 その後、サンプリングされた CPU 使用率を調べて、その理由を理解します。
  • デバイスが D0 電源状態との間で電源切り替えを頻繁に行っているかどうかを確認します。

作業の開始

WPTは、Windowsアセスメント & デプロイメント キット (ADK) の一部です。 ADKは 「Windows ADKのダウンロードとインストール」から インストールできます。

WPT は、次の 2 つの別個のツールで構成されています:Windows Performance Recorder (WPT) および Windows Performance Analyzer (WPA) です。 このトピックでは、WPR を使用してトレースを記録し、WPA を使用して構成可能な GUI 形式でトレースを表示します。

Windows Performance Toolkit を使用して WDF ドライバーのパフォーマンスを測定する方法については、次の動画を見るか、動画の下の手順をお読みください。 動画と手順は同じ手順を説明します。

WDF ドライバーのイベント ログの記録と表示

  1. まだインストールしていない場合は、ドライバーをインストールします。

  2. 管理者特権でのコマンド プロンプトで、以下のコマンドを入力します。

    WdfPerfEnhancedVerifier.cmd<ServiceName><UMDF または KMDF>

    注意 WdfPerfEnhancedVerifier.cmd は、WPT をインストールした場所からコピーする必要があります。 開発用コンピューターに WPT をインストールした場合は、WPT インストール ディレクトリからターゲット コンピューターにスクリプトをコピーする必要があります。

このスクリプトは、手順 4 で ETW プロバイダーが有効になっているときにパフォーマンス分析を有効にするために必要なイベントをフレームワークがログに記録するように、指定されたドライバーのレジストリ エントリを設定します。

  1. コンピューターを再起動します。

  2. 管理者特権でのコマンド プロンプトで、以下のコマンドを入力します。

    Wpr.exe-Start WdfTraceLoggingProvider -filemode

    このコマンドにより、WDF の ETW プロバイダーが有効になります。 コンピューターがトレースの記録を開始します。

    注意 手順 2 と同様に、WPR.EXEは WPT をインストールした場所からコピーする必要があります。 開発用コンピューターに WPT をインストールした場合は、WPT インストール ディレクトリからターゲット コンピューターにこれらのファイルをコピーします。

    デスクトップ エディション (Home、Pro、Enterprise、Education) 用の Windows 10 では、トレースを記録するための GUI を提供する Wprui.exe でトレースを開始することもできます。 その他のオプションで リソース分析を展開し、WDF ドライバー アクティビティを選択します。

  3. 関心のあるシナリオを実行します。

  4. ETW トレース セッションの停止:Wpr.exe -Stop MyPerfTrace.etl

  5. Windows パフォーマンス アナライザー ビューアーでイベント トレース ログを開きます。

    Wpa.exe MyPerfTrace.etl

同じドライバーの別のトレースをキャプチャするには、Wpr.exeを使用して新しいトレースを開始および停止します。 別のドライバーのトレースをキャプチャするには、最初に新しいドライバーのWdfPerfEnhancedVerifier.cmdを再実行します。

トレースの分析

ドライバーのパフォーマンスの分析を開始するには、左側のグラフ エクスプローラーを見つけ、[計算]カテゴリを開き、[分析]タブの下にある メイン 作業領域に UMDF グラフまたは KMDF グラフをドラッグします。このスクリーンショットは、グラフ エクスプローラー ペインを示しています。

Screenshot of the Graph Explorer pane in Windows Performance Analyzer.

UMDF 用と KMDF ドライバー用の専用テーブルがあります。

UMDF I/O 要求グラフと概要テーブル

WPT では、次の 2 つの方法で WDF I/O 要求の完了スループットを表示できます。

  • 1 秒あたりに完了した I/O 要求の数
  • 各 I/O 要求の期間 (ガント チャートとして書式設定)

次のスクリーンショットは、CPU および UMDF I/O 要求のパフォーマンスに関するサンプルの概要グラフとテーブルを示しています。 UMDF I/O 要求完了率グラフでは、y 軸に 1 秒あたりの要求数が表示されます。

Screenshot of sample summary graphs for UMDF I/O Requests and CPU Usage (Sampled).

サマリー テーブルでは、ほとんどの列は自明ですが、注意すべき点がいくつかあります。 WdfDevice 列には、I/O 要求に関連付けられている WDFDEVICE ハンドルが含まれています。 ActivityID には、I/O 要求の一意の識別子が含まれています。 フレームワークは、ドライバーに I/O 要求を配信するときに、この識別子を作成します。 アクティビティ識別子が対応する IRP に既に関連付けられている場合、フレームワークはその識別子を使用します。 詳細については、「アクティビティ識別子の使用」をご参照ください。

エントリ時間は、フレームワークがドライバーに要求を配信したときのトレース タイムスタンプです。終了時刻は、ドライバーが WdfRequestComplete または関連するメソッドを呼び出して要求を完了したときのタイムスタンプです。

KMDF I/O 要求グラフとサマリーテーブル

KMDF ドライバーの I/O 要求情報を示す同様のスクリーンショットを次に示します。

Screenshot of a graph for KMDF I/O request performance.

PnP 電源コールバック グラフとサマリーテーブル

WPT は、各 PnP と電源コールバックの処理時間を表示することもできます。 次のスクリーンショットは、サンプル KMDF ドライバーとサンプル UMDF ドライバーの EvtDeviceD0Entry, EvtDeviceD0Exit および EvtDevicePrepareHardware コールバック期間を示しています。

WdfDevice 列には、コールバックに関連付けられている WDFDEVICE ハンドルが含まれています。 ActivityID には、コールバック インスタンスの一意の識別子が含まれています。

Screenshot of a PnP Power callback graph for KMDF and UMDF drivers.

インストルメント化される呼び出しはどれですか?

このセクションでは、上記のグラフとテーブルの作成に使用されるイベントについて説明します。

特定のドライバーのWdfPerfEnhancedVerifier.cmdを実行すると、システムが指定したドライバーのコールバックの一部を呼び出すとき、および指定したドライバーがいくつかのフレームワーク メソッドを呼び出すときに、フレームワークによって ETL トレース ログにイベントが記録されます。

I/O 要求がいつ開始されるかを判断するために、フレームワークは次のコールバックを呼び出したときにイベントを記録します。

フレームワークは、ドライバーが次のメソッドを呼び出すときに I/O 要求の開始イベントも記録します。

I/O 要求が完了したタイミングを判断するために、フレームワークはドライバーが呼び出すタイミングを追跡します。

最後に、PnP/Power コールバックのコールバック期間を決定するために、フレームワークは、次のドライバー指定のコールバック ルーチンを呼び出すとき、および完了時に記録します。

リソースとトラブルシューティング

  • WdfPerfEnhancedVerifier.cmd スクリプトを実行した後は、必ず再起動してください。

  • ドライバーがイベント ログを記録するように構成されているかどうかを確認するには、 !WdfKd.wdfdriverinfo カーネル デバッガー コマンドをご使用ください。 ドライバーがパフォーマンス トレース用に構成されている場合は、次のような出力が表示されます。

    !WdfKd.WdfDriverInfo Echo.sys
    …
    …
    ----------------------------------
    
    WDF Verifier settings for echo.sys is ON
      Enhanced verifier: performance analysis hooking ON
    ----------------------------------
    
  • 開発とテストの目的でのみ、ドライバー コード署名ポリシーの適用を一時的に無効にすることができます。 詳細については、「開発およびテスト中の署名されていないドライバー パッケージのインストール」をご参照ください。

Windows Performance Analyzer