共用方式為


Storport 佇列管理

若要利用高效能儲存介面卡的功能,迷你埠驅動程式必須利用其裝置佇列、暫停和繼續這些佇列,以最大化效率的方式控制這些佇列。

在 SCSI 埠佇列模型中,佇列管理是埠驅動程式的獨佔網域。 在 Storport 佇列模型中,埠驅動程式會提供數個佇列管理支援常式,讓迷你埠驅動程式擁有大量的佇列管理控制。

在 Storport 佇列模型中,所有要求都會排入每個邏輯單元佇列的埠驅動程式中。 如果沒有延伸的 SRB 支援,每個邏輯單元最多可以有 255 個未處理的要求。 否則,佇列深度只會受限於可用的系統資源或介面卡的功能。 達到佇列深度的限制時,Storport 會保留該邏輯單元的進一步要求,直到該單位的未處理要求數目低於佇列最大值為止。

Storport 在介面卡可以擁有的未完成要求數目上,沒有預先定義的限制。 例如,連接 55 個邏輯單元的配接器,且佇列深度為 255 的配接器一次最多可以張貼 14,025 (55 x 255) 要求。 如需埠驅動程式佇列模型的描述,請參閱下圖。

說明埠驅動程式佇列模型的圖表。

埠驅動程式的佇列模型

如果配接器和邏輯單元都準備好接收要求,系統會依該順序呼叫迷你埠驅動程式的 HwStorBuildIoHwStorStartIo 常式。

不同于 SCSI 埠,Storport 允許迷你埠驅動程式通知埠驅動程式忙碌狀況。 下列八個常式會處理這些通訊,這可讓迷你埠驅動程式在邏輯單元或配接器暫停或忙碌時發出訊號。

Storport 常式 採取動作

StorPortPauseDevice

在指定的時間週期內暫停裝置。

StorPortResumeDevice

繼續暫停的裝置。

StorPortPause

暫停配接器一段指定的時間。

StorPortResume

繼續暫停的配接器。

StorPortDeviceBusy

讓裝置忙碌,直到裝置佇列完成指定的 I/O 要求數目為止。

StorPortDeviceReady

讓忙碌裝置準備好再次接收要求。

StorPortBusy

讓配接器忙碌,直到它完成指定的 I/O 要求數目為止。

StorPortReady

讓忙碌配接器準備好再次接收要求。

當裝置暫停或忙碌時,埠驅動程式不會傳送任何要求給裝置。 如果迷你埠驅動程式完成狀態為忙碌狀態 (SRB_STATUS_BUSY或SCSISTAT_BUSY) 的要求,埠驅動程式將會重試要求無限次數,直到要求失敗或完成為止。

除了提供一組無法在 SCSI 埠佇列模型中使用的明確佇列管理常式之外,Storport 佇列模型不會使用採用 SCSI 埠的隱含佇列管理常式。 特別是,會忽略 NextRequestNextLuRequest 通知。