NetAdapterCx riceve il ridimensionamento laterale (RSS)

Receive side scaling (RSS) è una tecnologia di driver di rete che consente la distribuzione efficiente dell'elaborazione della ricezione di rete tra più CPU nei sistemi multiprocessore. RSS migliora le prestazioni del sistema e aumenta la scalabilità di rete sfruttando tutti i processori disponibili in un sistema e ribilanciando dinamicamente i carichi di lavoro della CPU.

Questo argomento evidenzia RSS per i driver client NetAdapterCx e presuppone la conoscenza dei concetti e della terminologia RSS. Per altre informazioni su RSS in generale, inclusi i diagrammi che illustrano RSS in diversi scenari hardware, vedere Receive Side Scaling.For more information about RSS in general, including diagrams illustrate RSS in different hardware scenarios, see Receive Side Scaling.

Panoramica di RSS in NetAdapterCx

RSS in NetAdapterCx è incentrato sulla semplicità di configurazione, sulla semplicità di abilitazione e disabilitazione e sull'astrazione della complessità da processore a interrupt. Un driver client per una scheda di interfaccia di rete che supporta RSS deve soddisfare solo tre criteri per supportare RSS in NetAdapterCx:

  1. Il driver deve impostare le funzionalità RSS all'avvio di una scheda Net, ma prima di chiamare NetAdapterStart. Ciò include l'implementazione di quattro callback RSS e la relativa registrazione nella struttura delle funzionalità RSS.
  2. Le code dei percorsi dati del driver devono essere create e pronte per accettare le richieste.
  3. Il driver deve trovarsi nello stato di alimentazione D0 .

La progettazione di RSS in NetAdapterCx garantisce che il sistema non chiami i callback RSS di un client e abiliti RSS fino alla fine della sequenza di alimentazione. I client non devono gestire le richieste di spostamento delle tabelle di riferimento indiretto o gestire altri eventi RSS fino a quando non sono pronti.

Successivamente, quando il driver scarica, NetAdapterCx non chiamerà i callback RSS dopo che le code dei percorsi dati sono state distrutte durante la sequenza di alimentazione. Poiché le code dei percorsi dati vengono eliminate come primo passaggio durante l'alimentazione, ciò significa che i client non devono gestire i possibili eventi RSS in qualsiasi altra fase durante l'accensione.

Impostazione delle funzionalità RSS

Per iniziare a usare RSS in NetAdapterCx, seguire questa procedura:

  1. Quando si avvia la scheda net, indicare al sistema le funzionalità e i vincoli RSS dell'hardware usando la struttura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES .
  2. Inizializzare la struttura delle funzionalità chiamando NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT.
  3. Quando si inizializza la struttura delle funzionalità RSS, impostare i membri di callback RSS della struttura per registrare le implementazioni per questi callback:
    1. EvtNetAdapterReceiveScalingEnable
    2. EvtNetAdapterReceiveScalingDisable
    3. EvtNetAdapterReceiveScalingSetHashSecretKey
    4. EvtNetAdapterReceiveScalingSetIndirectionEntries
  4. Impostare le voci SynchronizeSetIndirectionEntries della struttura delle funzionalità RSS in base alle esigenze.
  5. Passare le strutture delle funzionalità RSS inizializzate al metodo NetAdapterSetReceiveScalingCapabilities .

Abilitazione e disabilitazione di RSS

Dopo aver impostato le funzionalità RSS, il sistema continuerà con la sequenza di alimentazione per il driver. NetAdapterCx inizia a richiamare i callback RSS del driver al termine del passaggio finale della creazione di code di percorsi dati. A questo punto, RSS può essere abilitato e disabilitato in base alle esigenze del sistema.

Importante

Non è consigliabile cancellare o reimpostare la tabella di riferimento indiretto durante l'abilitazione o la disabilitazione di RSS. Il framework imposterà lo stato iniziale della tabella di riferimento indiretto.

Abilitazione di RSS

NetAdapterCx abilita RSS richiamando il callback EvtNetAdapterReceiveScalingEnable del driver. Nel contesto di questo callback, in genere si abilitano i bit di controllo nell'hardware.

Per un esempio di codice per l'abilitazione di RSS, vedere EvtNetAdapterReceiveScalingEnable.

Disabilitazione di RSS

NetAdapterCx disabilita RSS richiamando il callback EvtNetAdapterReceiveScalingDisable del driver. In questo caso, in genere si disabilita il bit di controllo nell'hardware impostato in precedenza in EvtNetAdapterReceiveScalingEnable.

Per un esempio di codice di disabilitazione di RSS, vedere EvtNetAdapterReceiveScalingDisable.

Impostazione della chiave privata hash

Dopo l'abilitazione di RSS, NetAdapterCx richiama il callback EvtNetAdapterReceiveScalingSetHashSecretKey per fornire al driver la chiave del segreto hash che la scheda di interfaccia di rete deve usare per verificare i calcoli hash. Questo callback può essere richiamato in qualsiasi momento quando RSS è in esecuzione se la chiave privata hash cambia.

Per un esempio di codice di impostazione della chiave privata hash, vedere EvtNetAdapterReceiveScalingSetHashSecretKey.

Spostamento delle voci della tabella di riferimento indiretto

Mentre RSS è in esecuzione nel sistema, i driver del protocollo di livello superiore monitorano il carico di lavoro del processore e gestiscono una tabella di riferimento indiretto che esegue il mapping delle code ai processori. Quando il driver di protocollo deve ribilanciare il carico di lavoro del processore in RSS, calcola prima di tutto un nuovo mapping per ogni voce di tabella di riferimento indiretto in un nuovo processore. Il protocollo passa quindi queste informazioni a NetAdapterCx, che gestisce la complessità del mapping riceve code e vettori di interrupt hardware al processore corretto per conto del driver client della scheda di interfaccia di rete. NetAdapterCx archivia la nuova tabella di riferimento indiretto, con voci mappate per ricevere GLI ID coda, in una struttura NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES e la passa al driver quando richiama la funzione di callback EvtNetAdapterReceiveScalingSetIndirectionEntries .

In questo callback si sposta ogni voce nella tabella di riferimento indiretto della scheda di interfaccia di rete nella coda di ricezione specificata. Ogni struttura NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY nella matrice NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES contiene l'indice hash per tale voce nella tabella, la nuova coda di ricezione a cui assegnare la voce e un campo di stato che indica se il singolo spostamento è riuscito o meno.

Il metodo di assegnazione delle voci di indice alle code di ricezione hardware dipende dalla progettazione della scheda di interfaccia di rete e dal numero di code di ricezione disponibili. Per altre informazioni e un esempio di codice, vedere EvtNetAdapterReceiveScalingSetIndirectionEntries.

Supporto cpu eterogeneo

Importante

Il supporto della CPU eterogeneo è una funzionalità non definitiva che può essere modificata in modo sostanziale prima che venga rilasciata commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.

I sistemi CPU eterogenei usano più tipi di core con velocità e funzionalità di clock diverse. Rispetto ai sistemi omogenei multiprocessore in cui ogni core è identico l'uno all'altro, i sistemi CPU eterogenei possono adattarsi meglio ai carichi di calcolo dinamici e usare meno energia.

A partire dalla versione di anteprima di WDK 25197, NetAdapterCx offre il supporto del sistema CPU eterogeneo usando in modo efficiente i vari tipi di core. Durante l'esecuzione di RSS, il sistema decide quale processore usare a seconda del carico di lavoro del traffico ricevuto dal driver client. Quando viene ricevuto meno traffico, più piccolo e efficiente dal punto di vista energetico può gestire il traffico. Quando è presente più traffico, sono necessari core più grandi e più efficienti per eseguire continuamente il polling dei pacchetti ricevuti.

Per acconsentire esplicitamente al supporto di sistema eterogeneo, l'amministratore di sistema deve impostare la parola chiave INF standardizzata*RSSProfile su NdisRssProfileBalanced. Si tratta del profilo predefinito per i sistemi eterogenei. Per consentire al sistema di decidere i core migliori da usare, non è possibile impostare parole chiave avanzate RSS.

Gli altri profili RSS sono supportati anche per i sistemi eterogenei. Se si desidera controllare impostazioni avanzate come il numero di processore di base RSS e il numero massimo di processore RSS nel sistema, è consigliabile usare un profilo RSS diverso.

È anche possibile usare NdisRssProfileBalanced in un sistema CPU omogeneo. In questo caso, il sistema decide quali processori utilizzare per RSS.