RSS con Accodamento hardware
RSS con accodamento hardware migliora le prestazioni del sistema rispetto a RSS con una singola soluzione di ricezione hardware. Schede di interfaccia di rete che supportano l'accodamento hardware assegnano i dati ricevuti a più code di ricezione. Le code di ricezione sono associate a una CPU. La scheda di interfaccia di rete assegna i dati ricevuti alle CPU in base ai valori hash e a una tabella indiretta.
La figura seguente illustra l'accodamento rss con la scheda di interfaccia di rete.
Nella figura le frecce tratteggiate rappresentano un percorso alternativo per l'elaborazione della ricezione. RSS non può controllare la CPU che riceve la chiamata ISR iniziale. Il driver non deve accodare i dati in modo che possa pianificare immediatamente i DPC iniziali nelle CPU corrette.
Il processo seguente viene ripetuto per ogni interruzione:
Scheda di interfaccia di rete:
Usa DMA per riempire i buffer con i dati ricevuti.
Il driver miniport allocato i buffer di ricezione nella memoria condivisa durante l'inizializzazione.
Calcola un valore hash.
Accoda il buffer per una CPU e fornisce le assegnazioni di coda al driver miniport.
Ad esempio, la scheda di interfaccia di rete può eseguire i passaggi 1-3 e DMA un elenco di assegnazioni di CPU dopo la ricezione di alcuni pacchetti. Il meccanismo specifico viene lasciato alla progettazione della scheda di interfaccia di rete.
Interrompe il sistema.
I buffer ricevuti gestiti dal sistema in un'interruzione vengono distribuiti tra le CPU.
NDIS chiama la funzione MiniportInterrupt (ISR) del driver miniport in una CPU determinata dal sistema.
Il driver miniport richiede NDIS alle chiamate di routine posticipate (DPC) per ognuna delle CPU che hanno una coda non vuota.
Si noti che tutti i controller di dominio devono essere completati prima che il driver consenta l'interruzione. Si noti inoltre che l'ISR potrebbe essere in esecuzione in una CPU senza buffer da elaborare.
NDIS chiama la funzione MiniportInterruptDPC per ogni DPC in coda. DPC in una determinata CPU:
Le compilazioni ricevono descrittori per tutti i buffer ricevuti nella coda e indicano i dati dello stack di driver.
Per altre informazioni, vedere Indicazione dei dati di ricezione RSS.
Abilita gli interruzioni, se è l'ultimo DPC da completare. Questo interruzione viene completata e il processo viene avviato di nuovo. Il driver deve usare un'operazione atomica per identificare l'ultimo DPC da completare. Ad esempio, il driver può usare la funzione NdisInterlockedDecrement per implementare un contatore atomico .