NetAdapterCx empfangsseitige Skalierung (RSS)

Empfangsseitige Skalierung (RSS) ist eine Netzwerktreibertechnologie, die die effiziente Verteilung der Netzwerkeingangsverarbeitung über mehrere CPUs in Multiprozessorsystemen ermöglicht. RSS verbessert die Systemleistung und erhöht die Netzwerkskalierbarkeit, indem alle verfügbaren Prozessoren in einem System genutzt und CPU-Workloads dynamisch neu angepasst werden.

In diesem Thema werden RSS für NetAdapterCx-Clienttreiber hervorgehoben und kenntnisse über RSS-Konzepte und -Terminologie vorausgesetzt. Weitere Informationen zu RSS im Allgemeinen, einschließlich Diagrammen zur Veranschaulichung von RSS in verschiedenen Hardwareszenarien, finden Sie unter Empfangsseitige Skalierung.

Übersicht über RSS in NetAdapterCx

RSS in NetAdapterCx konzentriert sich auf die einfache Konfiguration, die Einfachheit der Aktivierung und Deaktivierung sowie die Abstraktion der Komplexität von Prozessor zu Unterbrechung. Ein Clienttreiber für eine RSS-fähige NIC muss nur drei Kriterien erfüllen, um RSS in NetAdapterCx zu unterstützen:

  1. Der Treiber muss RSS-Funktionen beim Starten eines Netzadapters festlegen, aber vor dem Aufruf von NetAdapterStart. Dies umfasst die Implementierung von vier RSS-Rückrufen und deren Registrierung in der RSS-Funktionsstruktur.
  2. Die Datapath-Warteschlangen des Treibers müssen erstellt und bereit sein, Anforderungen anzunehmen.
  3. Der Treiber muss sich im Energiezustand D0 befinden.

Das Design von RSS in NetAdapterCx garantiert, dass das System die RSS-Rückrufe eines Clients nicht aufruft und RSS erst am Ende der Einschaltsequenz aktiviert. Clients müssen keine Verschiebungsanforderungen für Dereferenzierungstabellen verwalten oder andere RSS-Ereignisse verarbeiten, bis alles, was sie benötigen, bereit ist.

Später, wenn der Treiber entladen wird, ruft NetAdapterCx RSS-Rückrufe nicht auf, nachdem Datapath-Warteschlangen während der Herunterschaltsequenz zerstört wurden. Da Datapath-Warteschlangen als erster Schritt während des Herunterschaltens abgerissen werden, bedeutet dies, dass Clients während des Herunterschaltens keine möglichen RSS-Ereignisse in einer anderen Phase behandeln müssen.

Festlegen von RSS-Funktionen

Führen Sie die folgenden Schritte aus, um mit RSS in NetAdapterCx zu beginnen:

  1. Informieren Sie das System beim Starten des Netzadapters über die RSS-Funktionen und Einschränkungen Ihrer Hardware mithilfe der NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES-Struktur .
  2. Initialisieren Sie die Funktionsstruktur, indem Sie NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT aufrufen.
  3. Legen Sie beim Initialisieren der RSS-Funktionsstruktur die RSS-Rückrufmember der Struktur fest, um Ihre Implementierungen für diese Rückrufe zu registrieren:
    1. EvtNetAdapterReceiveScalingEnable
    2. EvtNetAdapterReceiveScalingDisable
    3. EvtNetAdapterReceiveScalingSetHashSecretKey
    4. EvtNetAdapterReceiveScalingSetIndirectionEntries
  4. Legen Sie die SynchronizeSetIndirectionEntries der RSS-Funktionsstruktur entsprechend fest.
  5. Übergeben Sie die initialisierten RSS-Funktionsstrukturen an die NetAdapterSetReceiveScalingCapabilities-Methode .

Aktivieren und Deaktivieren von RSS

Nachdem Sie RSS-Funktionen festgelegt haben, wird das System mit der Einschaltsequenz für Ihren Treiber fortgesetzt. NetAdapterCx beginnt mit dem Aufrufen der RSS-Rückrufe Ihres Treibers, sobald der letzte Schritt der Erstellung von Datapath-Warteschlangen abgeschlossen ist. An diesem Punkt kann RSS bei Bedarf vom System aktiviert und deaktiviert werden.

Wichtig

Sie sollten Ihre Dereferenzierungstabelle beim Aktivieren oder Deaktivieren von RSS nicht löschen oder zurücksetzen. Das Framework legt den Anfänglichen Dereferenzierungstabellenzustand fest.

Aktivieren von RSS

NetAdapterCx aktiviert RSS, indem der EvtNetAdapterReceiveScalingEnable-Rückruf Ihres Treibers aufgerufen wird. Im Kontext dieses Rückrufs aktivieren Sie in der Regel Steuerbits in Ihrer Hardware.

Ein Codebeispiel zum Aktivieren von RSS finden Sie unter EvtNetAdapterReceiveScalingEnable.

Deaktivieren von RSS

NetAdapterCx deaktiviert RSS, indem der EvtNetAdapterReceiveScalingDisable-Rückruf Ihres Treibers aufgerufen wird. Hier deaktivieren Sie in der Regel das Steuerbit in Ihrer Hardware, das Sie zuvor in EvtNetAdapterReceiveScalingEnable festgelegt haben.

Ein Codebeispiel zum Deaktivieren von RSS finden Sie unter EvtNetAdapterReceiveScalingDisable.

Festlegen des geheimen Hashschlüssels

Sobald RSS aktiviert ist, ruft NetAdapterCx den EvtNetAdapterReceiveScalingSetHashSecretKey-Rückruf auf, um Ihrem Treiber den geheimen Hashschlüssel bereitzustellen, den Ihre NIC zum Überprüfen von Hashberechnungen verwenden sollte. Dieser Rückruf kann jederzeit aufgerufen werden, wenn RSS ausgeführt wird, wenn sich der geheime Hashschlüssel ändert.

Ein Codebeispiel zum Festlegen des geheimen Hashschlüssels finden Sie unter EvtNetAdapterReceiveScalingSetHashSecretKey.

Verschieben von Dereferenzierungstabelleneinträgen

Während RSS auf dem System ausgeführt wird, überwachen Protokolltreiber der oberen Ebene die Prozessorworkload und verwalten eine Dereferenzierungstabelle, die Empfangswarteschlangen Prozessoren zuordnet. Wenn der Protokolltreiber die Prozessorworkload in RSS neu ausgleichen muss, berechnet er zunächst eine neue Zuordnung für jeden Dereferenzierungstabelleneintrag zu einem neuen Prozessor. Anschließend übergibt das Protokoll diese Informationen an NetAdapterCx, das die Komplexität der Zuordnung von Empfangswarteschlangen und Hardwareunterbrechungsvektoren zum richtigen Prozessor im Namen Ihres NIC-Clienttreibers behandelt. NetAdapterCx speichert die neue Dereferenzierungstabelle mit Einträgen, die Empfangswarteschlangen-IDs zugeordnet sind, in einer NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES-Struktur und übergibt sie an Ihren Treiber, wenn die Rückruffunktion EvtNetAdapterReceiveScalingSetIndirectionEntries aufgerufen wird.

In diesem Rückruf verschieben Sie jeden Eintrag in der Dereferenzierungstabelle Ihrer NIC in die angegebene Empfangswarteschlange. Jede NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY Struktur im NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES Array enthält den Hashindex für diesen Eintrag in der Tabelle, die neue Empfangswarteschlange, der der Eintrag zugewiesen werden soll, und ein Statusfeld, das angibt, ob diese einzelne Verschiebung erfolgreich war oder nicht.

Die Methode zum Zuweisen von Indexeinträgen zu Hardware-Empfangswarteschlangen hängt vom Entwurf Ihrer NIC und der Anzahl der Empfangswarteschlangen ab. Weitere Informationen und ein Codebeispiel finden Sie unter EvtNetAdapterReceiveScalingSetIndirectionEntries.

Unterstützung heterogener CPU

Wichtig

Heterogene CPU-Unterstützung ist eine Vorabversionsfunktion, die vor der kommerziellen Veröffentlichung erheblich geändert werden kann. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.

Heterogene CPU-Systeme verwenden mehrere Arten von Kernen mit unterschiedlichen Taktgeschwindigkeiten und Funktionen. Im Vergleich zu homogenen Multiprozessorsystemen, bei denen jeder Kern identisch ist, können heterogene CPU-Systeme sich besser an dynamische Computinglasten anpassen und weniger Energie verbrauchen.

Ab WDK-Vorschauversion 25197 bietet NetAdapterCx heterogene CPU-Systemunterstützung, indem die verschiedenen Kerntypen effizient genutzt werden. Während RSS ausgeführt wird, entscheidet das System abhängig von der vom Clienttreiber empfangenen Datenverkehrsworkload, welcher Prozessor verwendet werden soll. Wenn weniger Datenverkehr empfangen wird, können kleinere, energieeffizientere Kerne den Datenverkehr verarbeiten. Wenn mehr Datenverkehr vorhanden ist, sind größere, leistungsfähigere Kerne erforderlich, um die empfangenen Pakete kontinuierlich abzufragen.

Um sich für heterogene Systemunterstützung zu entscheiden, muss der Systemadministrator das standardisierte INF-Schlüsselwort*RSSProfile auf NdisRssProfileBalanced festlegen. Dies ist das Standardprofil für heterogene Systeme. Damit das System die besten Kerne für die Verwendung auswählen kann, können Sie erweiterte RSS-Schlüsselwörter nicht festlegen.

Die anderen RSS-Profile werden auch für heterogene Systeme unterstützt. Wenn Sie erweiterte Einstellungen wie die RSS-Basisprozessornummer und die maximale RSS-Prozessornummer auf dem System steuern möchten, sollten Sie ein anderes RSS-Profil verwenden.

Sie können auch NdisRssProfileBalanced für ein homogenes CPU-System verwenden. In diesem Fall entscheidet das System, welche Prozessoren für RSS verwendet werden sollen.