テクニカル ドキュメント #17



Doc ID: 17
製品: WinDriver
Version:  --

WinDriver を使用して、どのようにドライバのパフォーマンスを向上できますか?

ドライバのパフォーマンスおよびデータ転送率は、OS の仕様、ハードウェアおよびドライバの設計に依存します。

PCI/ISA の場合
=========
WD_Transfer() を呼んで、カーネルでメモリにアクセスする代わりに、ユーザー モード アプリケーションから直接、メモリ アドレスにアクセスできます。
[直接メモリにアクセス場合、以下のようにユーザー モード マップを使用します:
cardReg.Card.Item[i].I.Mem.dwUserDirectAddr

- ユーザー マニュアルの WD_CardRegister() を参照してください]。

I/O アドレスにアクセスする場合、WD_Transfer() の複数回の呼び出しを WD_MultiTransfer() を1回呼び出すように置き換えて、文字列転送を使用することによって、ドライバのパフォーマンスを向上します。
[このことは、メモリ アクセスにも当てはまりますが、直接メモリにアクセスする方が早いです]。

ドライバのパフォーマンスをより向上させるには、WinDriver の Kernel PlugIn 機能を使用して、ドライバの全体的なパフォーマンスを向上することによって、ユーザー モードからカーネルへコードのクリティカルな部分のパフォーマンスを向上します。たとえば、この機能で、カーネルで直接割り込みを処理できます。Kernel PlugIn の詳細はユーザー マニュアルを参照してください。Kernel PlugIn は、VxWorks および Windows CE には対応していません。これらの OS は、ユーザー モードとカーネルの区別がありません。VxWorks の場合、windrvr_isr call-back 関数を使用して、割り込み処理速度を向上できます。


USB の場合
=======
データ転送率を向上させるには、複数のデータ転送 (小さなデータ バッファを使用) を1回のデータ転送 (大きなデータ転送を使用) に置き換えてください。これによって、関数の呼び出しの重複が避けられ、ユーザーとカーネル モード間のコンテキストの切り替えを減少できます。
[データ バッファのサイズを WDU_Transfer() 関数の dwBufferSize 引数に設定します]。
メモ: WDU_Transfer() への呼び出しで使用するバッファのサイズは、デバイスの最大パケット サイズに制限されていませんが、最大パケット サイズの倍数のバッファ サイズを使用することを推奨します。

デバイスのファームウェアを編集することによって、転送率を向上することもできます (たとえば、ハードウェアの最大パケット サイズを大きくすることによって)。