Nicht synchronisierte HwStorBuildIo-Routine

Im E/A-Modell des SCSI-Port-Miniporttreibers sollte die StartIo-Routine des Miniporttreibers, HwScsiStartIo, SCSI-Anforderungsblöcke (SRBs) so schnell wie möglich an die Hardware übertragen. Dies ist von entscheidender Bedeutung, da die Arbeit in der StartIo-Routine des Miniporttreibers ausgeführt wird, während Interrupts deaktiviert sind und IRQL = DISPATCH_LEVEL. Leider eignet sich dieses Modell nicht gut für Treiber einiger Hochleistungs-Host bus-Adapter (HBAs), da die Miniporttreiber für diese HBAs beim Initiieren der E/A einen erheblichen Verarbeitungsaufwand ausführen müssen. Wenn der Miniporttreiber diese Verarbeitung in seiner StartIo-Routine ausführt, beeinträchtigt dies die Systemleistung.

Das Storport-E/A-Modell unterstützt die HwStorBuildIo-Routine , um einen Teil der Verarbeitungslast aus der StartIo-Routine des Miniporttreibers, HwStorStartIo, zu entfernen. Im Storport-E/A-Modell ruft das System HwStorBuildIo kurz vor dem Aufrufen der HwStorStartIo-Routine des Miniporttreibers auf und verarbeitet dort so viel wie möglich. Diese Strategie vermeidet Konflikte für CPU-Zyklen und den Zugriff auf kritische Systemstrukturen, z. B. die Geräteerweiterung, da HwStorBuildIo mit einem niedrigeren IRQL ausgeführt wird und keine Synchronisierungssperren enthält.

Die HwStorBuildIo-Routine sollte den SRB in eine komfortablere Datenstruktur übersetzen, Scatter-/Gather-Listen erstellen und andere SRB-verarbeitungen durchführen. Da während der Ausführung der HwStorBuildIo-Routine keine Sperren gehalten werden, sollte der Miniporttreiber auf keine anderen Daten als die in der SRB- und der SRB-Erweiterung zugreifen. Wenn für einen Teil der Verarbeitung Zugriff auf andere Strukturen erforderlich ist, sollte dieser Teil weiterhin in der HwStartIo-Routine ausgeführt werden.

Um eine maximale Leistung zu erzielen, sollte die HwStorBuildIo-Routine in Verbindung mit dem Vollduplexmodus verwendet werden.