未同步的 HwStorBuildIo 例程

在 SCSI 端口微型端口驱动程序 I/O 模型中,微型端口驱动程序的 StartIo 例程 HwScsiStartIo 应尽快将 SCSI 请求块 (SRB) 传输到硬件。 这一点至关重要,因为在微型端口驱动程序的 StartIo 例程中完成的工作是在禁用中断时完成的,并且 IRQL = DISPATCH_LEVEL。 遗憾的是,此模型并不适合某些高性能主机总线适配器的驱动程序 (HBA) ,因为这些 HBA 的微型端口驱动程序必须在启动 I/O 时执行大量处理。 如果微型端口驱动程序在其 StartIo 例程中执行此处理,则会降低系统性能。

Storport I/O 模型支持 HwStorBuildIo 例程,以消除微型端口驱动程序的 StartIo 例程 HwStorStartIo 的某些处理负担。 在 Storport I/O 模型中,系统在调用微型端口驱动程序的 HwStorStartIo 例程之前调用 HwStorBuildIo ,并在那里执行尽可能多的处理。 此策略可避免 CPU 周期和访问关键系统结构(如设备扩展)的争用,因为 HwStorBuildIo 以较低的 IRQL 执行,并且不保留同步锁。

HwStorBuildIo 例程应将 SRB 转换为更方便的数据结构,生成散点/收集列表,并按 SRB 执行其他处理。 由于在执行 HwStorBuildIo 例程期间不保留锁,因此微型端口驱动程序不应访问除 SRB 和 SRB 扩展中的数据以外的数据。 如果部分处理需要访问其他结构,则仍应在 HwStartIo 例程中执行该部分。

若要实现最佳性能,应将 HwStorBuildIo 例程与全双工模式结合使用。