Gestione code Storport
Per sfruttare le funzionalità delle schede di archiviazione ad alte prestazioni, i driver miniport devono esercitare il controllo sulle code dei dispositivi, sospendere e riprendere queste code in modi che ottimizzano l'efficienza.
Nel modello di coda delle porte SCSI, la gestione delle code è il dominio esclusivo del driver di porta. Nel modello di coda Storport, il driver della porta fornisce diverse routine di supporto per la gestione delle code che forniscono al driver miniport una quantità significativa di controllo di gestione delle code.
Nel modello di coda Storport tutte le richieste vengono accodate nel driver di porta in code per unità logiche. Senza il supporto SRB esteso, ogni unità logica può avere un massimo di 255 richieste in sospeso. In caso contrario, la profondità della coda è limitata solo dalle risorse di sistema disponibili o dalle funzionalità dell'adattatore. Quando viene raggiunto il limite impostato per la profondità della coda, Storport mantiene ulteriori richieste a tale unità logica fino a quando il numero di richieste in sospeso per l'unità scende al di sotto del valore massimo della coda.
Non esistono limiti predefiniti da Storport per il numero di richieste in sospeso che un adattatore può avere. Ad esempio, un adattatore con 55 unità logiche collegate con una profondità di coda pari a 255 potrebbe registrare fino a un massimo di 14.025 (55 x 255) richieste alla volta. Per una descrizione del modello di accodamento del driver di porta, vedere il diagramma seguente.
Modello di accodamento del driver di porta
Se l'adattatore e un'unità logica sono entrambi pronti per ricevere una richiesta, il sistema chiama le routine HwStorBuildIo e HwStorStartIo del driver miniport in tale ordine.
A differenza della porta SCSI, Storport consente ai driver miniport di notificare al driver della porta condizioni di occupato. Queste comunicazioni vengono gestite dalle otto routine seguenti, che consentono al driver miniport di segnalare quando l'unità logica o l'adattatore è sospeso o occupato.
Storport Routine | Azione intrapresa |
---|---|
Sospendere un dispositivo per un periodo di tempo specificato. |
|
Riprendere un dispositivo sospeso. |
|
Sospendere un adattatore per un periodo di tempo specificato. |
|
Riprendere un adattatore sospeso. |
|
Rendere un dispositivo occupato fino a quando la coda del dispositivo non ha completato un numero specificato di richieste di I/O. |
|
Rendere un dispositivo occupato pronto per ricevere nuovamente le richieste. |
|
Rendere un adattatore occupato fino a quando non è stato completato un numero specificato di richieste di I/O. |
|
Rendere un adattatore occupato pronto per ricevere nuovamente le richieste. |
Mentre un dispositivo è in pausa o occupato, il driver della porta non invia richieste al dispositivo. Se un driver miniport completa una richiesta con stato occupato (SRB_STATUS_BUSY o SCSISTAT_BUSY), il driver della porta ritenta la richiesta un numero illimitato di volte, fino a quando la richiesta non riesce o non viene completata.
Oltre a fornire un set di routine di gestione delle code esplicite non disponibili nel modello di coda delle porte SCSI, il modello di coda Storport non usa le routine di gestione delle code implicite utilizzate dalla porta SCSI. In particolare, le notifiche NextRequest e NextLuRequest vengono ignorate.