Condividi tramite


Routine HwStorBuildIo non sincronizzata

Nel modello I/O del driver porta SCSI, la routine StartIo del driver miniport, HwSCSIStartIo, deve trasmettere i blocchi di richiesta SCSI all'hardware il più rapidamente possibile. Questo è essenziale, perché il lavoro svolto nella routine StartIo del driver miniport viene eseguito mentre gli interruzioni sono disabilitati e in IRQL = DISPATCH_LEVEL. Sfortunatamente, questo modello non è adatto ai driver di alcuni adattatori del bus host ad alte prestazioni (HBA), perché i driver miniport per questi HBA devono eseguire una quantità significativa di elaborazione quando viene avviato I/O. Se il driver miniport esegue questa elaborazione nella routine StartIo , le prestazioni del sistema sono ridotte.

Il modello Storport I/O supporta la routine HwStorBuildIo in modo da rimuovere alcuni dei carichi di elaborazione dalla routine StartIo del driver miniport, HwStorStartIo. Nel modello di I/O Storport il sistema chiama HwStorBuildIo appena prima di chiamare la routine HwStorStartIo del driver miniport e esegue la maggior parte dell'elaborazione possibile. Questa strategia evita la contesa per i cicli della CPU e per l'accesso alle strutture di sistema critiche, ad esempio l'estensione del dispositivo, perché HwStorBuildIo viene eseguito in un irQL inferiore e non contiene blocchi di sincronizzazione.

La routine HwStorBuildIo deve convertire SRB in una struttura di dati più comoda, compilare elenchi di dispersione/raccolta e eseguire altre operazioni di elaborazione per SRB. Poiché non vengono mantenuti blocchi durante l'esecuzione della routine HwStorBuildIo , il driver miniport non deve accedere a dati diversi da quello nell'estensione SRB e SRB. Se l'accesso ad altre strutture è necessario per parte dell'elaborazione, tale parte deve comunque essere eseguita nella routine HwStartIo .

Per ottenere prestazioni massime, la routine HwStorBuildIo deve essere usata in combinazione con la modalità full-duplex.