同期されていない HwStorBuildIo ルーチン
SCSI ポート ミニポート ドライバー I/O モデルでは、ミニポート ドライバーの StartIo ルーチン、HwScsiStartIo は、可能な限り迅速にハードウェアに SCSI 要求ブロック (SRB) を送信する必要があります。 これは必須です。ミニポート ドライバーの StartIo ルーチンで行われる作業は、割り込みが無効になっている間、IRQL = DISPATCH_LEVEL で実行されるためです。 残念ながら、このモデルは、一部の高性能ホスト バス アダプター (HBA) のドライバーには適していません。これらの HBA のミニポート ドライバーは、I/O が開始されたときに大量の処理を行う必要があるためです。 その StartIo ルーチンでミニポート ドライバーがこの処理を行う場合は、システムのパフォーマンスが低下します。
Storport I/O モデルでは、ミニポート ドライバーの StartIo ルーチンである HwStorStartIo から処理負荷の一部を削除するために、HwStorBuildIo ルーチンがサポートされています。 Storport I/O モデルでは、システムはミニポート ドライバーの HwStorStartIo ルーチンを呼び出す直前に HwStorBuildIo を呼び出し、可能な限り多くの処理を行います。 HwStorBuildIo は低い IRQL で実行され、同期ロックを保持しないため、CPU サイクルやデバイス拡張などの重要なシステム構造へのアクセスの競合を回避します。
HwStorBuildIo ルーチンは、SRB をより便利なデータ構造に変換し、散布図/収集リストを作成し、SRB ごとのその他の処理を行う必要があります。 HwStorBuildIo ルーチンの実行中にロックは保持されないため、ミニポート ドライバーは SRB および SRB 拡張のデータ以外のデータにアクセスできません。 処理の一部に他の構造体へのアクセスが必要な場合は、その部分を HwStartIo ルーチンで実行する必要があります。
最大のパフォーマンスを実現するには、HwStorBuildIo ルーチンを全二重モードと組み合わせて使用する必要があります。