次の方法で共有


Storport のキュー管理

高パフォーマンスのストレージ アダプターの機能を利用するため、ミニポート ドライバーは、効率を最大化する方法でこれらのキューを一時停止、再開、デバイス キュー制御をする必要があります。

SCSI ポート キュー モデルでは、キュー管理はポート ドライバーの排他的ドメインです。 Storport キュー モデルでは、ポート ドライバーは、ミニポート ドライバーに大量のキュー管理コントロールを提供するいくつかのキュー管理サポート ルーチンを提供します。

Storport キュー モデルでは、すべての要求が論理ユニットごとのキュー内のポート ドライバーでキューに入れられます。 拡張 SRB サポートがない場合、各論理ユニットには最大 255 個の未処理要求を含めることができます。 それ以外の場合、キューの深さは、使用可能なシステム リソースまたはアダプターの機能によってのみ制限されます。 キューの深さに設定された制限に達すると、Storport は、ユニットに対する未処理の要求の数がキューの最大値を下回るまで、その論理ユニットに対し、さらなる要求を保持します。

Storport には、アダプターが保持できる未処理の要求の数に関する定義済みの制限はありません。 たとえば、キューの深さが 255 の論理ユニットが 55 個のアダプターは、一度に最大 14,025 (55 x 255) の要求をポストできます。 ポート ドライバーのキュー モデルの説明については、次の図を参照してください。

diagram illustrating the port driver's queuing model.

ポート ドライバーのキュー モデル

アダプターと論理ユニットの両方が要求を受信する準備ができている場合、システムはミニポート ドライバーの HwStorBuildIo ルーチンおよび HwStorStartIo ルーチンをその順序で呼び出します。

SCSI ポートとは異なり、Storport では、ミニポート ドライバーがビジー状態のポート ドライバーに通知することができます。 これらの通信は、次の 8 つのルーチンによって処理されます。これにより、論理ユニットまたはアダプターが一時停止またはビジー状態のときにミニポート ドライバーに通知できます。

Storport ルーチン 実行した操作

StorPortPauseDevice

指定した期間、デバイスを一時停止します。

StorPortResumeDevice

一時停止したデバイスを再開します。

StorPortPause

指定した期間、アダプタを一時停止します。

StorPortResume

一時停止中のアダプターを再開します。

StorPortDeviceBusy

デバイス キューが指定された数の I/O 要求を完了するまで、デバイスをビジー状態にします。

StorPortDeviceReady

ビジー状態のデバイスで要求を再び受信する準備をします。

StorPortBusy

指定された数の I/O 要求が完了するまで、アダプターをビジー状態にします。

StorPortReady

ビジー状態のアダプターで要求を再受信する準備をします。

デバイスが一時停止中またはビジー状態の間、ポート ドライバーはデバイスに要求を送信しません。 ミニポート ドライバーがビジー状態 (SRB_STATUS_BUSY または SCSISTAT_BUSY) で要求を完了した場合、ポート ドライバーは要求が失敗するか完了するまで、要求を不定回数再試行します。

SCSI ポート キュー モデルでは使用できない一連の明示的なキュー管理ルーチンを提供するだけでなく、Storport キュー モデルでは、SCSI ポートで使用された暗黙的なキュー管理ルーチンは使用されません。 具体的には、NextRequest 通知と NextLuRequest 通知は無視されます。