NetAdapterCx riceve il ridimensionamento laterale (RSS)
Articolo
Receive side scaling (RSS) è una tecnologia di driver di rete che consente la distribuzione efficiente dell'elaborazione della ricezione dei dati di rete su 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 ulteriori informazioni su RSS in generale, inclusi diagrammi che illustrano RSS in diversi scenari hardware, vedere Receive Side Scaling.
Panoramica di RSS in NetAdapterCx
RSS in NetAdapterCx è incentrato su semplicità di configurazione, facilità di attivazione e disattivazione e astrazione della complessità tra processore e 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 quando si avvia un adattatore di rete, ma prima di chiamare NetAdapterStart. Sono inclusi l'implementazione di quattro callback RSS e la relativa registrazione nella struttura delle funzionalità RSS.
Le code del percorso 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 attivi le callback RSS di un client né abiliti RSS fino al completamento 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 dei percorsi dati sono state eliminate 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 l'adattatore di rete, comunicare al sistema le funzionalità e i vincoli RSS dell'hardware usando la struttura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES.
Quando si inizializza la struttura delle funzionalità RSS, impostare i membri di callback RSS della struttura per registrare le implementazioni per questi callback:
Dopo aver impostato le funzionalità RSS, il sistema continuerà con la sequenza di avvio 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
Dovresti non cancellare o reimpostare la tua 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 del tuo driver EvtNetAdapterReceiveScalingEnable. Nel contesto di questo callback, in genere si abilitano i bit di controllo nell'hardware.
NetAdapterCx disabilita RSS richiamando il callback del driver EvtNetAdapterReceiveScalingDisable. In questo contesto, di solito si disabilita il bit di controllo nell'hardware che era stato precedentemente impostato in EvtNetAdapterReceiveScalingEnable.
Dopo aver abilitato RSS, NetAdapterCx richiama la callback EvtNetAdapterReceiveScalingSetHashSecretKey per fornire al driver la chiave segreta hash che la NIC deve utilizzare nella verifica dei calcoli hash. Questo callback può essere richiamato in qualsiasi momento quando RSS è in esecuzione se la chiave del segreto hash cambia.
Spostamento delle voci della tabella di indirezione
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 indirizzamento indiretto che associa le code di ricezione ai processori. Quando il driver di protocollo deve ribilanciare il carico di lavoro del processore in RSS, calcola prima di tutto una nuova mappatura per ogni voce della tabella di indirezionamento a un nuovo processore. Il protocollo passa quindi queste informazioni a NetAdapterCx, che gestisce la complessità della mappatura delle code di ricezione e dei vettori di interrupt hardware al processore corretto per conto del driver client NIC. NetAdapterCx archivia la nuova tabella di indizione, con voci mappate agli ID coda di ricezione, in una struttura NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES e la passa al tuo 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 nell'array 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 NIC 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 fornisce alcuna garanzia, espressa o implicita, in relazione alle informazioni fornite qui.
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, core più piccoli e più efficienti dal punto di vista energetico 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 sistemi eterogenei, l'amministratore di sistema deve impostare la *RSSProfileparola chiave INF standardizzata 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.
Azure HPC è una funzionalità cloud appositamente realizzata per carichi di lavoro HPC e di intelligenza artificiale che si avvale di processori all'avanguardia e dell'interconnessione InfiniBand di classe HPC per offrire livelli ottimali di prestazioni, scalabilità e valore delle applicazioni. Azure HPC consente agli utenti di favorire l'innovazione, la produttività e l'agilità aziendale tramite una gamma a disponibilità elevata di tecnologie di intelligenza artificiale che possono essere allocate dinamicam