Condividi tramite


Receive Side Scaling Version 2 (RSSv2)

Receive Side Scaling migliora le prestazioni del sistema correlate alla gestione dei dati di rete nei sistemi multiprocessore. NDIS 6.80 e versioni successive supportano RSS versione 2 (RSSv2), che estende RSS offrendo distribuzione dinamica per VPort delle code.

Panoramica

Rispetto a RSSv1, RSSv2 riduce il tempo tra la misurazione del carico della CPU e l'aggiornamento della tabella di riferimento indiretto. In questo modo si evita un rallentamento durante situazioni di traffico elevato. A tale scopo, RSSv2 esegue le azioni in IRQL = DISPATCH_LEVEL, nel contesto del processore di gestione della richiesta e opera solo su un subset di voci di tabella di riferimento indiretto che puntano al processore corrente. Ciò significa che RSSv2 può distribuire dinamicamente le code su più processori in modo molto più reattivo rispetto a RSSv1.

Due OID, OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 e OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES, sono stati introdotti in RSSv2 per i driver miniport per impostare le funzionalità RSS appropriate e controllare rispettivamente la tabella di riferimento indiretto. OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 è un OID regolare, mentre OID_GEN_RSS_edizione Standard T_INDIRECTION_ENTRIES è un OID sincrono che non può restituire NDIS_STATUS_PENDING. Per altre info su questi ID, vedi le singole pagine di riferimento. Per altre info sugli ID sincroni, vedi Interfaccia di richiesta OID sincrona in NDIS 6.80.

Terminologia di RSSv2

In questo argomento vengono utilizzate le condizioni seguenti:

Termine Definizione
RSSv1 Il meccanismo di ridimensionamento laterale della prima generazione. Usa OID_GEN_RECEIVE_SCALE_PARAMETERS.
RSSv2 Il meccanismo di ridimensionamento laterale della seconda generazione supportato in Windows 10, versione 1803 e successive, descritto in questo argomento.
Ridimensionamento dell'entità L'adattatore miniport stesso in modalità RSS nativa o VPort in modalità RSSv2.
ITE Voce della tabella di riferimento indiretto (ITE) di una determinata entità di ridimensionamento. Il numero totale di ITEs per VPort non può superare NumberOfIndirectionTableEntriesPerNonDefaultPFVPort o NumberOfIndirectionTableEntriesForDefaultVPort in modalità VMQ o 128 nel caso RSS nativo. NumberOfIndirectionTableEntriesPerNonDefaultPFVPort e NumberOfIndirectionTableEntriesForDefaultVPort sono membri della struttura NDIS_NIC_SWITCH_CAPABILITIES .
Modalità di ridimensionamento I criteri vmswitch per VPort che controllano la modalità di gestione degli IT in fase di esecuzione. Può trattarsi di un'operazione statica (senza spostamenti ITE dovuti a modifiche al carico) o dinamiche (espansione e unione a seconda del carico di traffico corrente).
Queue Oggetto hardware sottostante (coda) che supporta un ite. A seconda dell'hardware e della tabella di riferimento indiretto, la coda di configurazione può eseguire il backup di più ITE. Il numero totale di code, incluso quello usato dalla coda predefinita, non può superare il limite preconfigurato in genere impostato da un amministratore.
Processore predefinito Processore che riceve pacchetti per i quali non è possibile calcolare l'hash. Ogni VPort ha un processore predefinito.
Processore primario Processore specificato come membro ProcessorAffinity della struttura NDIS_NIC_SWITCH_VPORT_PARAMETERS durante la creazione di VPort. Questo processore può essere aggiornato in fase di esecuzione e specifica dove viene indirizzato il traffico VMQ.
CPU di origine Processore a cui è attualmente mappato l'ITE.
CPU di destinazione Processore a cui viene eseguito nuovamente il mapping dell'ITE (tramite RSSv2).
CPU attore Processore in cui vengono effettuate richieste RSSv2.

Pubblicità della funzionalità RSSv2 in un driver miniport

I driver Miniport annunciano il supporto RSSv2 impostando il membro CapabilitiesFlags della struttura NDIS_RECEIVE_SCALE_CAPABILITIES con il flag NDIS_RSS_C piattaforma di strumenti analitici_SUPPORTS_INDEPENDENT_ENTRY_MOVE. Questa funzionalità è necessaria per abilitare la funzionalità di bilanciamento del carico della CPU RSSv2, insieme al flag NDIS_RECEIVE_FILTER_DYNAMIC_PROCESSOR_AFFINITY_CHANGE_SUPPORTED che abilita il bilanciamento dinamico RSSv1 per vPort non predefiniti (VMQs).

Nota

I protocolli di livello superiore presuppongono che il processore primario del VPort predefinito possa essere spostato per i driver miniport RSSv2.

Se una scheda miniport non annuncia la funzionalità RSSv2, tutte le porte virtuali abilitate per VMQ rimangono in modalità di distribuzione statica anche se queste VPort sono richieste per eseguire la distribuzione dinamica. L'OID RSSv1 per la configurazione dei parametri RSS, OID_GEN_RECEIVE_SCALE_PARAMETERS, viene usato per queste VPort ancora in modalità di distribuzione statica.

I driver Miniport devono implementare solo un meccanismo di controllo RSS: RSSv1 o RSSv2. Se il driver annuncia il supporto RSSv2, NDIS convertirà gli ID RSSv1 in UNITÀ ORGANIZZATIVE RSSv2, se necessario per configurare la distribuzione per VPort. Il driver miniport deve supportare i due nuovi OID e modificare il comportamento di RSSv1 OID_GEN_RECEIVE_SCALE_PARAMETERS OID come indicato di seguito:

  • OID_GEN_RECEIVE_SCALE_PARAMETERS viene usato solo per le richieste di query in RSSv2 e non per l'impostazione dei parametri RSS.
  • OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 è una query e un set OID usato per configurare i parametri dell'entità di ridimensionamento, ad esempio il numero di code, il numero di ITE, l'abilitazione/disabilitazione RSS e gli aggiornamenti delle chiavi hash.
  • OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES è un OID metodo usato per eseguire la modifica delle voci della tabella di riferimento indiretto.

Gestione degli ID RSSv2

OID_GEN_RECEIVE_SCALE_PARAMETERS viene usato solo per eseguire query sui parametri RSS correnti di una determinata entità di ridimensionamento. In RSSv1 questo OID viene usato per impostare i parametri. Per i driver miniport compatibili con RSSv2, NDIS esegue automaticamente questa conversione del ruolo per il driver e rilascia i due OID seguenti per impostare i parametri.

OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 è un OID regolare e viene gestito allo stesso modo dell'OID OID_GEN_RECEIVE_SCALE_PARAMETERS gestito in RSSv1. Questo OID non è visibile ai driver di filtro NDIS leggeri (LWFs) prima di NDIS 6.80.

OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES, tuttavia, è un OID sincrono che non può restituire NDIS_STATUS_PENDING. Questo OID deve essere eseguito e completato nel contesto del processore che ha originato l'OID. Come OID_GEN_RECEIVE_SCALE_PARAMETERS_V2, non è visibile anche per NDIS LWFs prima di NDIS 6.80. Le LWF in NDIS 6.80 e versioni successive non possono ritardare questo OID o spostarsi in un altro processore. Il payload contiene una matrice di semplici azioni di spostamento ITE, ognuna delle quali contiene un comando per spostare un singolo ITE per un'entità di ridimensionamento in una CPU di destinazione diversa. Gli elementi della matrice possono fare riferimento a entità di ridimensionamento diverse (VPorts).

Ogni tipo di driver NDIS, miniport, filtro e protocollo include punti di ingresso per supportare l'interfaccia di richiesta OID sincrona:

Tipo di driver NDIS Gestori OID sincroni Funzione per l'origine di OID sincroni
Miniport MiniportSynchronousOidRequest N/D
Filtro NdisFSynchronousOidRequest
Protocollo N/D NdisSynchronousOidRequest

Transizioni di stato RSS, aggiornamenti ITE e processori primari/predefiniti

Parametri di spostamento

In RSSv2 vengono usati parametri diversi per indirizzare il traffico verso la CPU corretta a seconda dello stato RSS (abilitato o disabilitato). Quando RSS è disabilitato, viene usato solo il processore primario per indirizzare il traffico. Quando RSS è abilitato, vengono usati sia il processore predefinito che tutti gli ITE per indirizzare il traffico. Questi parametri di spostamento vengono etichettati come "attivi" o "inattivi", riepilogati nella tabella seguente:

Parametro di spostamento RSS disabilitato RSS abilitato
Processore primario Attive Non attiva
Processore predefinito Non attiva Attive
ITE[0..N] Non attiva Attive

Quando un parametro di spostamento è nello stato attivo , indirizza il traffico. Dal momento di una transizione di stato RSS che rende un parametro inattivo, i driver miniport devono tenere traccia delle modifiche al parametro fino a quando la transizione inversa non la attiva nuovamente. Ciò significa che un driver miniport deve tenere traccia di tutti gli aggiornamenti delle voci predefinite della tabella processore e indiretto mentre RSS è disabilitato per tale entità di ridimensionamento. Quando RSS è abilitato, lo stato corrente rilevato per il processore predefinito e la tabella di riferimento indiretto dovrebbero avere effetto.

Si consideri, ad esempio, lo scenario in cui è già abilitato il software vRSS. In questo caso, la tabella di riferimento indiretto esiste già nel protocollo di livello superiore e viene usata attivamente dal codice di distribuzione software del livello superiore. Se, durante l'abilitazione RSS hardware, tutte le voci iniziano a puntare al processore primario prima degli aggiornamenti per spostare le voci della tabella di riferimento indiretto vengono rilasciate ed eseguite dall'hardware, il processore primario potrebbe riscontrare un breve jam. Se il driver miniport ha rilevato le informazioni predefinite sul processore e sull'ITE, può indirizzare il traffico a dove è già previsto dal livello superiore.

Si noti che, mentre i driver miniport devono tenere traccia di tutti gli aggiornamenti ai parametri di spostamento inattivi, devono rinviare la convalida di tali parametri fino a quando la modifica dello stato RSS non tenta di rendere attivi questi parametri. Ad esempio, nel caso della distribuzione del software mentre rss hardware è disabilitato, i protocolli di livello superiore possono usare qualsiasi processore per la distribuzione (incluso il set RSS dell'adattatore). I livelli superiori assicurano che, al momento della transizione dello stato RSS, tutti i parametri inattivi siano validi per il nuovo stato RSS. Tuttavia, il driver miniport deve comunque convalidare i parametri e non eseguire la transizione dello stato RSS se rileva che eventuali parametri di spostamento inattivi rilevati non sono validi.

Stato iniziale e aggiornamenti ai parametri di spostamento

La tabella seguente descrive lo stato iniziale dell'entità di ridimensionamento dopo la creazione (ad esempio, dopo la creazione di VPort), nonché il modo in cui è possibile aggiornare i parametri:

Parametro Descrizione
Processore primario
Processore predefinito
Tabella di riferimento indiretto

Aggiornamenti agli ITes e ai processori primari/predefiniti (usando OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES) viene richiamato dal processore a cui punta attualmente la voce corrispondente. Per un determinato VPort, il livello superiore garantisce che non vengano rilasciati OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES OID per spostare gli IT o impostare i processori primari/predefiniti in queste circostanze:

  1. Mentre OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 è in corso.
  2. Dopo l'avvio della sequenza di eliminazione VPort. Ad esempio, il livello superiore rilascia l'OID filtro impostato solo dopo il completamento dell'ultimo OID per spostare gli IT.

Disabilitazione RSS

Durante la disabilitazione RSS, il protocollo di livello superiore potrebbe scegliere di puntare tutti gli ITE al processore primario, quindi rilasciare l'OID per disabilitare RSS oppure potrebbe scegliere di lasciare invariata la tabella di riferimento indiretto e disabilitare RSS. In entrambi i casi, la ricezione del traffico deve avere come destinazione il processore primario.

RSSv2 mantiene un requisito di RSSv1 che consente al protocollo di livello superiore di eliminare un VPort senza prima disabilitare RSS. Il livello superiore può impostare il filtro di ricezione sul VPort su zero, assicurando quindi che nessun flusso di traffico di ricezione attraverso il VPort, quindi procedere con l'eliminazione VPort senza disabilitare RSS. Il livello superiore garantisce che non vengano rilasciati OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES ID durante o dopo l'eliminazione di VPort.

Durante la disabilitazione RSS e l'eliminazione di VPort, il driver miniport deve occuparsi di eventuali operazioni interne in sospeso che potrebbero esistere a causa degli spostamenti della coda precedenti.

Invarianti RSSv2

Il protocollo di livello superiore garantisce che le invarianti importanti non vengano violate prima di eseguire le funzioni di gestione o gli spostamenti ITE. Ad esempio:

  1. Prima di ridurre il numero di code, il livello superiore garantisce che la tabella di riferimento indiretto non faccia riferimento a più processori rispetto al nuovo numero di code per un VPort.
  2. Il livello superiore non deve richiedere un aggiornamento indiretto della tabella che viola il numero di code attualmente configurato per un VPort. Il driver miniport deve applicare questa operazione e restituire un errore.
  3. Prima di modificare il numero di voci di tabella di riferimento indiretto per le schede VMMQ-RESTRICTED, il livello superiore garantisce che il contenuto della tabella di riferimento indiretto sia normalizzato alla potenza di 2.

OID_GEN_RECEIVE_SCALE_PARAMETERS_V2

OID_GEN_RSS_edizione Standard T_INDIRECTION_TABLE_ENTRIES

Interfaccia di richiesta OID sincrona in NDIS 6.80