あなたのドライバはどれくらいの時間を DPC と ISR に費やしていますか?
最終更新日: 2005年8月13日
良好なシステム パフォーマンスを得るには、Windows カーネル モード ドライバで遅延プロシージャ呼び出し (DPC) と割り込みサービス ルーチン (ISR) に費やされる時間を可能な限り短くする必要があります。DPC と ISR は、より高い割り込み要求レベル (IRQL) で実行されます。つまり、DPC は DISPATCH_LEVEL、ISR はデバイスの IRQL で実行されます。ドライバで DPC と ISR に時間を費やしすぎると、システムにおけるスレッド処理の妨げとなり、システム全体のパフォーマンスが低下します。ドライバでは、ISR に費やす時間は 25 マイクロ秒以下、DPC に費やす時間は 100 マイクロ秒以下でなければなりません。
Windows カーネル モード ドライバで DPC と ISR に費やされる時間は、新しい Tracelog の機能を使用して測定できます。Tracelog は、Windows Driver Kit (WDK) で提供されるコマンド ライン ツールで、ソフトウェア トレース セッションの管理機能を備えています。Tracelog の DPC および ISR トレース機能では、トレース中にカーネルで実行されているすべてのドライバの活動がキャプチャされます。トレース用にインストルメントされていないドライバに対しても同様です。
Windows XP SP2 以降のバージョンの Windows は、DPC と ISR のトレース用にインストルメントされています。しかし、DPC および ISR の活動を実際にトレースするには、Windows Vista 用の WDK、およびそれ以降のバージョンの WDK で提供されているバージョンの Tracelog が必要です。このツールは、%winddk%\tools\tracing フォルダにインストールされています。
DPC および ISR トレース セッションの開始
下記の Tracelog コマンドは、DPC および ISR トレース セッションを開始し、出力をイベント トレース ログ ファイル dpcisr.etl に保存します。
tracelog -start -f test01.etl -dpcisr -UsePerfCounter -b 64
このコマンド行のパラメータは、下記のとおりです。
| • | tracelog -start コマンドは、トレース セッションを開始します。"NT カーネル ロガー" は、既定のトレース プロバイダであり、コマンドで指定する必要はありませんが、-guid パラメータを使用してプロバイダを指定することはできません。 |
| • | -f パラメータは、ログ セッションを作成し、トレース メッセージをイベント トレース ログ ファイル test01.etl に出力します。 |
| • | -dpcisr パラメータは、DPC、ISR、コンテキスト スイッチ、およびイメージの読み込みのトレースを有効にします。 |
| • | -UsePerfCounter パラメータは、低解像度のシステム時刻ではなく、高解像度のパフォーマンス カウンタ クロックの値を各トレース メッセージと共に記録します。これが必要なのは、DPC および ISR で費やされる時間を測定するには、システム タイマの解像度が低すぎ、DPC および ISR イベントのログをフォーマットする Tracerpt が、レポート用にパフォーマンス カウンタ クロックの値を必要とするからです。Tracerpt は、Windows XP 以降のバージョンの Windows で提供されています。 |
| • | -b は、トレース バッファのサイズを 64 KB に増やします。DPC および ISR トレースは、高ボリュームのトレース メッセージを高い率で生成するので、トレース バッファが小さすぎるとイベントが "失われる" 可能性があります。-max パラメータを使用してバッファの数を増やす必要がある場合もあります。バッファの既定数は、プロセッサの数、物理メモリの量、および使用中のオペレーティング システムに依存します。 |
トレースが数分間実行されるようにして、トレースの実行中にドライバを使用してください。レポートの統計情報は、トレース トレース セッションが実行されている期間における平均を示すものです。そのため、複数のテスト状況をシミュレーションする場合、別々のトレース セッション中にテストを実行してください。イベントが失われそうかどうかを確認するには、tracelog -q コマンドを定期的に発行します。そして、必要に応じ、tracelog -update を使用してトレース セッション用にバッファ サイズを増やすか、より多くのバッファを追加します (たとえば、 tracelog -update -b 128 -max 40.)
ドライバを使用し終えたら、下記のコマンドを使用してトレース セッションを中止します。
tracelog -stop
DPC および ISR トレース レポートの作成
DPC メッセージおよび ISR メッセージの概要がイベント トレース ログに示されるようにするには、Windows XP SP2 以降のバージョンの Windows で提供されているバージョンの Tracerpt を使用してください。
下記の Tracerpt コマンドは、test01.etl ファイルのメッセージをフォーマットし、Windows XP SP2 の活動に関するテキスト形式のレポートを作成します。
tracerpt test01.etl -report dpcisr.txt -df
このコマンドのパラメータは、下記のとおりです。
| • | -report パラメータは、分析の方法と出力ファイルの名前 (dpcisr.txt) を指定します。 |
| • | -df パラメータは、Windows XP SP2 のみで、メッセージを正しくフォーマットするために必要です。Windows Server 2003 SP1 以降のバージョンの Windows では、-f HTML を使用して HTML 形式のレポートを作成できます。 |
DPC および ISR イベント トレース セッションのレポートには、トレース中に実行されている各プロセスのディスク入出力に関するイメージ統計情報とデータに加えて、DPC および ISR の実行に関する下記のような情報が含まれます。
| • | DPC および ISR でのプロセッサの使用状況。トレースされた各ドライバで DPC ルーチンおよび ISR ルーチンの処理に費やされたプロセッサ時間がパーセンテージで示されます。 |
| • | 異なる時間範囲に分散する、DPC および ISR の実行時間の分布。トレースされたすべての DPC ルーチンと ISR ルーチン、および個々のルーチンのインスタンスに対して示されます。 |
| • | トレース全体に対する個々の ISR から DPC までの待機時間の分布。ISR の終了から関連する DPC の開始までの遅延間隔が示されます。 |
たとえば、下記のサンプル レポートの抜粋は、ipsec.sys に対する DPC の実行時間の分布を示しています。Lower Bound と Upper Bound の列は、時間の範囲をマイクロ秒で示しています。このレポートは、このドライバの DPC ルーチンの半数以上が 100 〜 250 マイクロ秒の間で実行されており、推奨されるしきい値を超えていることを示しています。
+------------------------------------------------------------------------------+
| Distribution of ipsec.sys (F7AA7449) DPC execution times for the whole trace |
+------------------------------------------------------------------------------+
| Lower Bound Upper Bound Count Percent |
+------------------------------------------------------------------------------+
| 0 1 0 0.00% |
| 1 2 0 0.00% |
| 2 3 8 42.11% |
| 3 4 1 5.26% |
| 4 5 0 0.00% |
| 5 10 0 0.00% |
| 10 25 0 0.00% |
| 25 50 0 0.00% |
| 50 100 0 0.00% |
| 100 250 10 52.63% |
+------------------------------------------------------------------------------+
| 19 100.00% |
+------------------------------------------------------------------------------+
Tracelog と -dpcisr パラメータの詳細については、Windows Driver Kit のドキュメントの "Tracelog" に関する説明を参照してください。Tracelog のドキュメントでは、広範にわたる例が "Example 15: Measuring DPC/ISR Time" に含まれており、DPC および ISR トレースの手順の詳細を示し、Tracerpt が生成するレポートの例を説明しています。
プロセッサの IRQL がカーネル モード ドライバの動作に与える影響については、「詳細情報」の項に示されている、「スケジューリング、スレッド コンテキスト、および IRQL」のページを参照してください。
そのためには、どうすればよいでしょうか。
| • | -dpcisr パラメータを指定して Tracelog を実行し、ドライバで DPC ルーチンと ISR ルーチンに費やされている時間を調べます。 |
| • | ドライバの DPC ルーチンと ISR ルーチンを、できるだけ速く実行されるよう最適化します。 |
詳細情報 :
Windows Driver Kit (WDK)
WDK のリリース バージョンは、Windows Driver Kit (WDK) の入手のページ、または MSDN Subscription から入手可能です。
Example 15: Measuring DPC/ISR Time
Event Tracing
スケジューリング、スレッド コンテキスト、および IRQL
マルチメディア プラットフォームに対するデバイス ドライバのパフォーマンスの考慮点