若要充分利用高效能儲存體介面卡的功能,迷你端口驅動程式必須施加控制於其裝置佇列,並以能夠將效率最大化的方式暫停和繼續這些佇列的運作。
在 SCSI 連接埠佇列模型中,佇列管理是連接埠驅動程式的專用網域。 在 Storport 佇列模型中,埠驅動程式會提供數個佇列管理支援常式,讓迷你埠驅動程式有大量的佇列管理控制。
在 Storport 佇列模型中,所有要求都會在埠驅動程式中被排入每個邏輯單元的佇列。 如果沒有延伸 SRB 支援,每個邏輯單元最多可以有 255 個未完成的要求。 否則,佇列深度只會受到可用的系統資源或配接卡功能的限制。 達到佇列深度設定的限制時,Storport 會保留該邏輯單元的進一步要求,直到對該單元的未完成要求數目低於佇列上限為止。
Storport 對配接器可以擁有的未完成要求數目沒有預先定義的限制。 例如,連接 55 個邏輯單元且佇列深度為 255 的配接卡一次最多可以張貼 14,025 (55 x 255) 個要求。 如需埠驅動程式佇列模型的描述,請參閱下圖。
埠驅動程式的佇列模型
如果配接器和邏輯單元都準備好接收要求,系統會依該順序呼叫迷你埠驅動程式的 HwStorBuildIo 和 HwStorStartIo 常式。
不同於 SCSI 埠,Storport 可讓迷你埠驅動程式通知埠驅動程式忙碌狀況。 這些通訊是由下列八個常式處理,可讓迷你埠驅動程式在邏輯單元或配接器暫停或忙碌時發出訊號。
| Storport 常式 | 採取的行動 |
|---|---|
將裝置暫停指定的時段。 |
|
恢復暫停的裝置。 |
|
將適配器暫停一段指定的時間。 |
|
恢復暫停的配接卡。 |
|
讓裝置忙碌,直到裝置佇列完成指定數目的 I/O 要求為止。 |
|
使忙碌的設備恢復為可以再次接收請求的狀態。 |
|
讓配接器忙碌,直到它完成指定數目的 I/O 要求為止。 |
|
讓忙碌的配接器準備好再次接收要求。 |
當裝置暫停或忙碌時,埠驅動程式不會將任何要求傳送至裝置。 如果微型埠驅動程式以忙碌狀態(SRB_STATUS_BUSY 或 SCSISTAT_BUSY)完成要求,埠驅動程式將會不斷地重試該要求,直到該要求失敗或完成為止。
除了提供一組 SCSI 埠佇列模型中無法使用的明確佇列管理常式之外,Storport 佇列模型不會使用 SCSI 埠所採用的隱含佇列管理常式。 特別是,會忽略 NextRequest 和 NextLuRequest 通知。