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 della 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.
In questo argomento viene evidenziato RSS per i driver client NetAdapterCx e si presuppone una 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 su semplicità di configurazione, semplicità di abilitazione e disabilitazione e astrazione della complessità da processore a interrupt. Un driver client per una scheda di interfaccia di rete con supporto RSS deve soddisfare solo tre criteri per supportare RSS in NetAdapterCx:
- Il driver deve impostare le funzionalità RSS all'avvio di una scheda net, ma prima di chiamare NetAdapterStart. Sono inclusi l'implementazione di quattro callback RSS e la relativa registrazione nella struttura delle funzionalità RSS.
- Le code dei percorsi dati del driver devono essere create e pronte per accettare le richieste.
- 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 indirette o gestire altri eventi RSS fino a quando non sono pronti.
Successivamente, quando il driver viene scaricato, NetAdapterCx non chiamerà i callback RSS dopo che le code del percorso dati sono state distrutte durante la sequenza di risparmio di energia. Poiché le code dei percorsi dati vengono eliminate come primo passaggio durante il risparmio di energia, ciò significa che i client non devono gestire i possibili eventi RSS in qualsiasi altra fase durante il risparmio di energia.
Impostazione delle funzionalità RSS
Per iniziare a usare RSS in NetAdapterCx, seguire questa procedura:
- Quando si avvia la scheda net, comunicare al sistema le funzionalità e i vincoli RSS dell'hardware usando la struttura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES .
- Inizializzare la struttura delle funzionalità chiamando NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT.
- Quando si inizializza la struttura delle funzionalità RSS, impostare i membri di callback RSS della struttura per registrare le implementazioni per questi callback:
- Impostare le voci SynchronizeSetIndirectionEntries della struttura delle funzionalità RSS in base alle esigenze.
- 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 di 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 aver abilitato RSS, NetAdapterCx richiama il callback EvtNetAdapterReceiveScalingSetHashSecretKey per fornire al driver la chiave privata hash che deve essere usata nella verifica dei calcoli hash. Questo callback può essere richiamato in qualsiasi momento quando RSS è in esecuzione se la chiave del segreto hash cambia.
Per un esempio di codice relativo all'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 a 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 NIC. 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 tale 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 di cui dispone. Per altre informazioni e un esempio di codice, vedere EvtNetAdapterReceiveScalingSetIndirectionEntries.
Supporto della CPU eterogeneo
Importante
Supporto CPU eterogeneo è una funzionalità non definitiva che può essere modificata significativamente prima che venga rilasciata commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
I sistemi DI 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 supporto eterogeneo del sistema CPU 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 si riceve meno traffico, più piccoli e più efficienti possono gestire il traffico. Quando è presente un traffico maggiore, sono necessari core 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 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 usare per RSS.