NetAdapterCx schalen aan de ontvangstzijde (RSS)
RSS (Receive Side Scaling) is een netwerkstuurprogramma-technologie die het mogelijk maakt om de verwerking van netwerkontvangst efficiënt te verdelen over meerdere CPU's binnen multiprocessorsystemen. RSS verbetert de systeemprestaties en verhoogt de schaalbaarheid van het netwerk door gebruik te maken van alle beschikbare processors in een systeem en de CPU-workloads dynamisch te verdelen.
In deze topic wordt RSS voor NetAdapterCx-clientstuurprogramma's belicht en wordt ervan uitgegaan dat u kennis hebt van RSS-concepten en -terminologie. Zie Receive Side Scalingvoor meer informatie over RSS in het algemeen, inclusief diagrammen die RSS illustreren in verschillende hardwarescenario's.
Overzicht van RSS in NetAdapterCx
RSS in NetAdapterCx richt zich op het gemak van configuratie, eenvoud van inschakeling en uitschakelen en abstractie van processor-to-interrupt complexiteit. Een clientstuurprogramma voor een NIC die geschikt is voor RSS hoeft alleen aan drie criteria te voldoen om RSS in NetAdapterCx te ondersteunen:
- Het stuurprogramma moet RSS-mogelijkheden instellen bij het starten van een netadapter, maar voordat u NetAdapterStartaanroept. Dit omvat het implementeren van vier RSS-callbacks en het registreren ervan in de structuur van de RSS-mogelijkheden.
- De datapathwachtrijen van het stuurprogramma moeten worden gemaakt en klaar zijn om aanvragen te accepteren.
- De bestuurder moet de energiestatus D0 hebben.
Het ontwerp van RSS in NetAdapterCx garandeert dat het systeem de RSS-callbacks van een client niet aanroept en RSS pas inschakelt tot aan het einde van de opstartsequentie. Clients hoeven geen aanvragen voor het verplaatsen van indirecte tabellen te beheren of andere RSS-gebeurtenissen te verwerken totdat alles wat ze nodig hebben gereed is.
Wanneer de bestuurder later aan het lossen is, roept NetAdapterCx geen RSS-callbacks aan nadat datapathwachtrijen zijn vernietigd tijdens de uitschakelsequentie. Omdat datapathwachtrijen als de eerste stap tijdens het inschakelen worden uitgeschakeld, betekent dit dat clients tijdens het inschakelen geen mogelijke RSS-gebeurtenissen hoeven af te handelen in een andere fase.
RSS-mogelijkheden instellen
Volg deze stappen om aan de slag te gaan met RSS in NetAdapterCx:
- Wanneer u uw netadapter start, vertelt u het systeem over de RSS-mogelijkheden en beperkingen van uw hardware met behulp van de NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES structuur.
- Initialiseer de structuur van de mogelijkheden door NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INITaan te roepen.
- Wanneer u de structuur van de RSS-mogelijkheden initialiseert, stelt u de callback-leden van de structuur in om uw implementaties te registreren voor deze callbacks.
- Stel de SynchronizeSetIndirectionEntries van de RSS-mogelijkhedenstructuur in, indien van toepassing.
- Verzend de geïnitialiseerde structuren van RSS-mogelijkheden naar de NetAdapterSetReceiveScalingCapabilities methode.
RSS in- en uitschakelen
Nadat u RSS-mogelijkheden hebt ingesteld, gaat het systeem verder met de opstartprocedure voor uw bestuurder. NetAdapterCx begint met het aanroepen van RSS-callbacks van uw stuurprogramma zodra de laatste stap van het maken van datapath-wachtrijen is voltooid. Op dit moment kan RSS indien nodig door het systeem worden ingeschakeld en uitgeschakeld.
Belangrijk
Je moet niet de indirectietabel wissen of opnieuw instellen bij het in- of uitschakelen van RSS. Het framework stelt de status van de initiële indirectietabel in.
RSS inschakelen
NetAdapterCx schakelt RSS in door de EvtNetAdapterReceiveScalingEnable callback van uw stuurprogramma aan te roepen. In de context van deze callback schakelt u meestal controlebits in uw hardware in.
Zie EvtNetAdapterReceiveScalingEnablevoor een codevoorbeeld van het inschakelen van RSS.
RSS uitschakelen
NetAdapterCx schakelt RSS uit door de callbackfunctie EvtNetAdapterReceiveScalingDisable van uw driver aan te roepen. Hier schakelt u meestal de besturingsbit uit in uw hardware die u eerder hebt ingesteld in EvtNetAdapterReceiveScalingEnable.
Zie EvtNetAdapterReceiveScalingDisablevoor een codevoorbeeld van het uitschakelen van RSS.
De geheime hash-sleutel instellen
Zodra RSS is ingeschakeld, roept NetAdapterCx de EvtNetAdapterReceiveScalingSetHashSecretKey callback aan om uw stuurprogramma te voorzien van de hash-geheime sleutel die uw NIC moet gebruiken bij het verifiëren van hashberekeningen. Deze callback kan op elk gewenst moment worden aangeroepen wanneer RSS wordt uitgevoerd als de hashgeheime sleutel wordt gewijzigd.
Zie EvtNetAdapterReceiveScalingSetHashSecretKeyvoor een codevoorbeeld van het instellen van de hash-geheime sleutel.
Indirecte tabelvermeldingen verplaatsen
Terwijl RSS op het systeem wordt uitgevoerd, bewaken protocolstuurprogramma's van de bovenliggende laag de processorworkload en onderhouden ze een indirecte tabel die ontvangwachtrijen aan processors koppelt. Wanneer het protocolstuurprogramma de werkbelasting van de processor in RSS opnieuw moet verdelen, wordt eerst een nieuwe toewijzing berekend voor elke invoer in de indirectietabel naar een nieuwe processor. Vervolgens geeft het protocol deze informatie door aan NetAdapterCx, dat de complexiteit van ontvangstwachtrijen en hardware-interruptvectoren beheert en toewijst aan de juiste processor namens uw NIC-clientstuurprogramma. NetAdapterCx slaat de nieuwe indirectietabel op, waarin vermeldingen zijn gemapt op wachtrij-ID's, in een NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES struct en geeft deze door aan uw stuurprogramma wanneer het de callback-functie EvtNetAdapterReceiveScalingSetIndirectionEntries aanroept.
In deze callback verplaatst u elke vermelding in de indirectietabel van uw NIC naar de opgegeven ontvangstwachtrij. Elke NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY structuur in de NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES tabel bevat de hash-index voor dat item in de lijst, de nieuwe ontvangstrij waaraan het item moet worden toegewezen, en een statusveld dat aangeeft of de verplaatsing van dat specifieke item is geslaagd.
De methode voor het toewijzen van indexvermeldingen aan hardware-ontvangstwachtrijen is afhankelijk van het ontwerp van uw NIC en het aantal ontvangstwachtrijen dat deze heeft. Zie EvtNetAdapterReceiveScalingSetIndirectionEntriesvoor meer informatie en een codevoorbeeld.
Heterogene CPU-ondersteuning
Belangrijk
Heterogene CPU-ondersteuning is een prereleasefunctie die aanzienlijk kan worden gewijzigd voordat deze commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Heterogene CPU-systemen gebruiken meerdere typen kernen met verschillende kloksnelheden en -functionaliteiten. Vergeleken met homogene multiprocessorsystemen waarbij elke kern identiek is aan elkaar, kunnen heterogene CPU-systemen zich beter aanpassen aan dynamische rekenbelastingen en minder energie gebruiken.
Vanaf WDK preview versie 25197 biedt NetAdapterCx heterogene CPU-systeemondersteuning door efficiënt gebruik te maken van de verschillende kerntypen. Terwijl RSS wordt uitgevoerd, bepaalt het systeem welke processor moet worden gebruikt, afhankelijk van de verkeersworkload die door het clientstuurprogramma wordt ontvangen. Wanneer er minder verkeer wordt ontvangen, kunnen kleinere, efficiëntere kernen het verkeer verwerken. Wanneer er meer verkeer is, zijn er meer krachtige kernen nodig om continu de ontvangen pakketten te peilen.
De systeembeheerder moet de *RSSProfilegestandaardiseerde INF-trefwoorden instellen op NdisRssProfileBalancedom u te kunnen aanmelden voor heterogene systeemondersteuning. Dit is het standaardprofiel voor heterogene systemen. Als u wilt toestaan dat het systeem de beste kernen kan gebruiken, kunt u geen geavanceerde RSS-trefwoorden instellen.
De andere RSS-profielen worden ook ondersteund voor heterogene systemen. Als u geavanceerde instellingen wilt beheren, zoals het RSS-basisprocessornummer en het maximale RSS-processornummer op het systeem, moet u een ander RSS-profiel gebruiken.
U kunt ook NdisRssProfileBalanced op een homogeen CPU-systeem gebruiken. In dit geval bepaalt het systeem welke processors moeten worden gebruikt voor RSS.