Configurazione RSS

Per ottenere informazioni di configurazione RSS, un driver overlying può inviare una query OID di OID_GEN_RECEIVE_SCALE_CAPABILITIES a un driver miniport. NDIS fornisce inoltre le informazioni di configurazione RSS per l'overlying dei driver di protocollo nella struttura NDIS_BIND_PARAMETERS durante l'inizializzazione.

Il driver di overlying sceglie una funzione di hashing, un tipo e una tabella di riferimento indiretto. Per impostare queste opzioni di configurazione, il driver invia una richiesta di set OID di OID_GEN_RECEIVE_SCALE_PARAMETERS al driver miniport. Gli overlying driver possono anche eseguire una query su questo OID per ottenere le impostazioni RSS correnti. Il buffer delle informazioni per l'OID OID_GEN_RECEIVE_SCALE_PARAMETERS contiene un puntatore a una struttura NDIS_RECEIVE_SCALE_PARAMETERS.

Il driver overlying può disabilitare RSS nella scheda di interfaccia di rete. In questo caso, il driver imposta il flag NDIS_RSS_PARAM_FLAG_DISABLE_RSS nel membro Flags della struttura NDIS_RECEIVE_SCALE_PARAMETERS. Quando questo flag è impostato, il driver miniport deve ignorare tutti gli altri flag e impostazioni e disabilitare RSS nella scheda di interfaccia di rete.

NDIS elabora OID_GEN_RECEIVE_SCALE_PARAMETERS prima di passarlo al driver miniport e aggiorna la parola chiave *RSS standardizzata dell'adattatore miniport, se necessario. Per altre informazioni sulla parola chiave *RSS , vedere Parole chiave INF standardizzate per RSS.

Dopo aver ricevuto una richiesta impostata OID_GEN_RECEIVE_SCALE_PARAMETERS con il flag NDIS_RSS_PARAM_FLAG_DISABLE_RSS impostato, il driver miniport deve impostare lo stato RSS della scheda di interfaccia di rete sullo stato iniziale della scheda di interfaccia di rete dopo l'inizializzazione. Pertanto, se il driver miniport riceve una richiesta di OID_GEN_RECEIVE_SCALE_PARAMETERS set successiva con il flag NDIS_RSS_PARAM_FLAG_DISABLE_RSS cancellato, tutti i parametri devono avere gli stessi valori impostati dopo che il driver miniport ha ricevuto la richiesta OID_GEN_RECEIVE_SCALE_PARAMETERS impostata per la prima volta dopo l'inizializzazione dell'adattatore miniport.

Un driver overlying può usare l'OID OID_GEN_RECEIVE_HASH per abilitare e configurare i calcoli hash nei fotogrammi ricevuti senza abilitare RSS. I driver overlying possono anche eseguire query su questo OID per ottenere le impostazioni hash di ricezione correnti.

Il buffer delle informazioni per l'OID OID_GEN_RECEIVE_HASH contiene un puntatore a una struttura NDIS_RECEIVE_HASH_PARAMETERS. Per una richiesta set, l'OID specifica i parametri hash che devono essere usati dall'adattatore miniport. Per una richiesta di query, l'OID restituisce i parametri hash usati dall'adattatore miniport. Questo OID è facoltativo per i driver che supportano RSS.

Nota Se il calcolo hash di ricezione è abilitato, NDIS disabilita il calcolo hash prima di abilitare RSS. Se RSS è abilitato, NDIS disabilita RSS prima di abilitare il calcolo hash.

Tutte le schede miniport supportate dal driver miniport devono fornire le stesse impostazioni di configurazione hash a tutte le associazioni di protocollo successive. Questo OID include anche la chiave privata che il driver miniport o la scheda di interfaccia di rete devono usare per i calcoli hash. La chiave è lunga 320 bit (40 byte) e può contenere tutti i dati scelti dal driver overlying, ad esempio un flusso casuale di byte.

Per ribilanciare il carico di elaborazione, il driver overlying può impostare i parametri RSS e modificare la tabella di riferimento indiretto. In genere, tutti i parametri sono invariati, ad eccezione della tabella di riferimento indiretto. Tuttavia, dopo l'inizializzazione di RSS, il driver overlying potrebbe modificare altri parametri di inizializzazione RSS. Se necessario, il driver miniport può reimpostare l'hardware della scheda di interfaccia di rete per modificare la funzione hash, la chiave privata hash, il tipo hash, il numero di CPU di base o il numero di bit usati per indicizzare la tabella di riferimento indiretto.

Nota Il driver overlying può impostare questi parametri in qualsiasi momento. Ciò può causare indicazioni non in ordine. I driver Miniport che supportano TCP non sono necessari per eliminare le code di ricezione in questa istanza.

Nella figura seguente vengono forniti contenuti di esempio per due istanze della tabella di riferimento indiretto.

Diagramma che illustra il contenuto di due istanze di una tabella di riferimento indiretto RSS con una configurazione di quattro processori e 64 voci.

La figura precedente presuppone una configurazione di quattro processori e il numero di bit meno significativi usati dal valore hash è di 6 bit. Pertanto, la tabella di riferimento indiretto contiene 64 voci.

Nella figura la tabella A elenca i valori nella tabella di riferimento indiretto immediatamente dopo l'inizializzazione. In seguito, man mano che il carico di traffico normale varia, il carico del processore aumenta di sbilanciamento. Il driver overlying rileva la condizione sbilanciata e tenta di ribilanciare il carico definendo una nuova tabella di riferimento indiretto. La tabella B elenca i nuovi valori della tabella di riferimento indiretto. Nella tabella B, parte del carico dalla CPU 2 viene spostata nelle CPU 1 e 3.

Nota Quando la tabella di riferimento indiretto viene modificata, per un breve periodo di tempo (mentre le code del descrittore di ricezione corrente vengono elaborate), i pacchetti possono essere elaborati sulla CPU errata. Si tratta di una condizione temporanea normale.

Le dimensioni della tabella di riferimento indiretto sono in genere da due a otto volte il numero di processori nel sistema.

Quando il driver miniport distribuisce pacchetti alle CPU, se sono presenti troppe CPU, lo sforzo impiegato per distribuire il carico potrebbe diventare proibitivo. In questo caso, i driver overlying devono scegliere un subset di CPU in cui si verifica l'elaborazione dei dati di rete.

In alcuni casi, il numero di code di ricezione hardware disponibili potrebbe essere inferiore al numero di CPU nel sistema. Il driver miniport deve esaminare la tabella di riferimento indiretto per determinare i numeri di CPU da associare alle code hardware. Se il numero totale di numeri di CPU diversi visualizzati nella tabella di riferimento indiretto è maggiore del numero di code hardware supportate dalla scheda di interfaccia di rete, il driver miniport deve selezionare un subset dei numeri di CPU dalla tabella di riferimento indiretto. Il sottoinsieme è uguale al numero di code hardware. Il driver miniport ha ottenuto il parametro IndirectionTableSize da OID_GEN_RECEIVE_SCALE_PARAMETERS. Il driver miniport ha specificato il valore NumberOfReceiveQueues in risposta a OID_GEN_RECEIVE_SCALE_CAPABILITIES.