Partilhar via


Gerenciamento de Filas do Storport

Para aproveitar os recursos dos adaptadores de armazenamento de alto desempenho, os drivers de miniport devem exercer controle sobre suas filas de dispositivos, pausando e retomando essas filas de maneiras que maximizarão a eficiência.

No modelo de fila da porta SCSI, o gerenciamento de fila é o domínio exclusivo do driver de porta. No modelo de fila do Storport, o driver de porta fornece várias rotinas de suporte de gerenciamento de filas que dão ao driver de miniportus uma quantidade significativa de controle de gerenciamento de fila.

No modelo de fila do Storport, todas as solicitações são enfileiradas no driver de porta em filas por unidade lógica. Sem suporte estendido ao SRB, cada unidade lógica pode ter no máximo 255 solicitações pendentes. Caso contrário, a profundidade da fila só será limitada pelos recursos do sistema disponíveis ou pelos recursos do adaptador. Quando o limite definido para a profundidade da fila é atingido, o Storport mantém outras solicitações para essa unidade lógica até que o número de solicitações pendentes para a unidade caia abaixo do máximo da fila.

Não há limites predefinidos do Storport no número de solicitações pendentes que um adaptador pode ter. Por exemplo, um adaptador com 55 unidades lógicas anexadas a ele com uma profundidade de fila de 255 pode postar até um máximo de 14.025 (55 x 255) solicitações por vez. Consulte o diagrama a seguir para obter uma descrição do modelo de enfileiramento do driver de porta.

diagrama ilustrando o modelo de enfileiramento do driver de porta.

Modelo de enfileiramento do Driver de Porta

Se o adaptador e uma unidade lógica estiverem prontos para receber uma solicitação, o sistema chamará as rotinas HwStorBuildIo e HwStorStartIo do driver de miniporto nessa ordem.

Ao contrário da Porta SCSI, o Storport permite que os drivers de miniporte notifiquem o driver de porta de condições de disponibilidade. Essas comunicações são tratadas pelas oito rotinas a seguir, que permitem que o driver de miniporte sinalize quando a unidade lógica ou o adaptador está em pausa ou ocupado.

Rotina do Storport Ação executada

StorPortPauseDevice

Pause um dispositivo por um período de tempo especificado.

StorPortResumeDevice

Retomar um dispositivo em pausa.

StorPortPause

Pause um adaptador por um período de tempo especificado.

StorPortResume

Retomar um adaptador pausado.

StorPortDeviceBusy

Deixe um dispositivo ocupado até que a fila do dispositivo tenha concluído um número especificado de solicitações de E/S.

StorPortDeviceReady

Prepare um dispositivo ocupado para receber solicitações novamente.

StorPortBusy

Deixe um adaptador ocupado até que ele tenha concluído um número especificado de solicitações de E/S.

StorPortReady

Prepare um adaptador ocupado para receber solicitações novamente.

Enquanto um dispositivo está em pausa ou ocupado, o driver de porta não envia nenhuma solicitação para o dispositivo. Se um driver de miniporto concluir uma solicitação com um status ocupado (SRB_STATUS_BUSY ou SCSISTAT_BUSY), o driver de porta tentará novamente a solicitação um número indefinido de vezes, até que a solicitação falhe ou seja concluída.

Além de fornecer um conjunto de rotinas explícitas de gerenciamento de filas que não estão disponíveis no modelo de fila da porta SCSI, o modelo de fila storport não usa as rotinas implícitas de gerenciamento de fila que a Porta SCSI empregou. Em particular, as notificações NextRequest e NextLuRequest são ignoradas.