Rotina HwStorBuildIo não sincronizada
No modelo de E/S do driver scsi port-miniport, a rotina StartIo do driver de miniport, HwScsiStartIo, deve transmitir SRBs (blocos de solicitação SCSI) para o hardware o mais rápido possível. Isso é essencial, pois o trabalho feito na rotina StartIo do driver de miniporto é realizado enquanto as interrupções são desabilitadas e em IRQL = DISPATCH_LEVEL. Infelizmente, esse modelo não é adequado para drivers de alguns HBAs (adaptadores de ônibus host) de alto desempenho, pois os drivers de miniporta para esses HBAs devem fazer uma quantidade significativa de processamento quando a E/S é iniciada. Se o driver de miniporta fizer esse processamento em sua rotina StartIo , ele prejudicará o desempenho do sistema.
O modelo de E/S do Storport dá suporte à rotina HwStorBuildIo em um esforço para remover parte da carga de processamento da rotina StartIo do driver de miniport, HwStorStartIo. No modelo de E/S do Storport, o sistema chama HwStorBuildIo pouco antes de chamar a rotina HwStorStartIo do driver de miniport e faz o máximo de processamento possível lá. Essa estratégia evita a contenção de ciclos de CPU e o acesso a estruturas críticas do sistema, como a extensão do dispositivo, porque o HwStorBuildIo é executado em um IRQL inferior e não mantém bloqueios de sincronização.
A rotina HwStorBuildIo deve traduzir o SRB para uma estrutura de dados mais conveniente, criar listas de dispersão/coleta e fazer outro processamento por SRB. Como nenhum bloqueio é mantido durante a execução da rotina HwStorBuildIo , o driver de miniporto não deve acessar nenhum dado além disso no SRB e na extensão SRB. Se o acesso a outras estruturas for necessário para parte do processamento, essa parte ainda deverá ser executada na rotina HwStartIo .
Para obter o desempenho máximo, a rotina HwStorBuildIo deve ser usada em conjunto com o modo full-duplex.