Einführung in die empfängerseitige Skalierung

Receive Side Scaling (RSS) ist eine Netzwerktreibertechnologie, die die Netzwerkempfangsverarbeitung effizient über mehrere CPUs in Multiprozessorsystemen verteilt. RSS verbessert die Netzwerkleistung, indem die Verarbeitungsverzögerungen reduziert und die CPU-Auslastung im gesamten System optimiert wird.

Hinweis

Da Hyperthread-CPUs auf demselben Kernprozessor dasselbe Ausführungsmodul verwenden, ist der Effekt nicht mit mehreren Kernprozessoren identisch. Aus diesem Grund verwendet RSS keine Hyperthreadprozessoren.

Um empfangene Daten effizient zu verarbeiten, plant die Receive-Interrupt-Dienstfunktion eines Miniporttreibers einen verzögerten Prozeduraufruf (Deferred Procedure Call, DPC). Ohne RSS gibt ein typischer DPC alle empfangenen Daten innerhalb des DPC-Aufrufs an. Daher wird die gesamte Empfangenverarbeitung, die dem Interrupt zugeordnet ist, auf der CPU ausgeführt, in der der Empfangsunterbruch auftritt. Eine Übersicht über die Nicht-RSS-Empfangenverarbeitung finden Sie unter "Nicht-RSS-Empfangenverarbeitung".

RSS ermöglicht es dem NIC- und Miniporttreiber, Empfangs-DPCs auf anderen Prozessoren zu planen. Das RSS-Design stellt sicher, dass die verarbeitung, die einer bestimmten Verbindung zugeordnet ist, auf einer zugewiesenen CPU bleibt. Die NIC implementiert eine Hashfunktion, und der resultierende Hashwert hilft bei der Auswahl einer CPU.

Die folgende Abbildung zeigt den RSS-Mechanismus zum Ermitteln einer CPU.

Screenshot des RSS-Hashfunktionsflussdiagramms, das die Netzwerkdatenverarbeitung durch Hashberechnung, Nachschlagetabelle und CPU-Zuordnung zeigt.

Eine NIC verwendet eine Hashfunktion, um einen Hashwert über einen definierten Bereich (Hashtyp) innerhalb der empfangenen Netzwerkdaten zu berechnen. Der definierte Bereich kann nicht zusammenhängend sein.

Eine Anzahl von am wenigsten signifikanten Bits (LSBs) des Hashwerts wird verwendet, um eine Indirektionstabelle zu indizieren. Die Werte in der Dereferenzierungstabelle werden verwendet, um die empfangenen Daten einer CPU zuzuweisen.

Ausführlichere Informationen zum Angeben von Dereferenzierungstabellen, Hashtypen und Hashingfunktionen finden Sie unter RSS-Konfiguration.

Mit Unterstützung von Message Signaled Interrupt (MSI) kann eine NIC auch die zugeordnete CPU unterbrechen. Weitere Informationen zur NDIS-Unterstützung für MSIs finden Sie unter NDIS MSI-X.

Hardwareunterstützung für RSS

Die folgende Abbildung zeigt die Ebenen der Hardwareunterstützung für RSS.

Screenshot der RSS-Hardware-Unterstützungsstufen, die die Hash-Berechnung mit einer Warteschlange, mehreren Warteschlangen und message-signalisierten Interrupts zeigen.

Die Hardwareunterstützung für RSS umfasst drei Ebenen:

Die NIC übergibt immer den 32-Bit-Hashwert.

Wie RSS die Systemleistung verbessert

RSS kann die Leistung des Netzwerksystems verbessern, indem folgendes reduziert wird:

  • Verarbeitungsverzögerungen durch Verteilung der Empfangenverarbeitung von einer NIC über mehrere CPUs hinweg.

    Durch die Verteilung der Empfangsverarbeitung kann sichergestellt werden, dass keine CPU stark geladen wird, während eine andere CPU im Leerlauf ist.

  • Durch Erhöhung der Wahrscheinlichkeit, dass Softwarealgorithmen, die Daten gemeinsam nutzen, auf derselben CPU ausgeführt werden, wird der durch Spin-Locks entstehende Overhead reduziert.

    Drehsperraufwand tritt z. B. auf, wenn eine Funktion, die auf CPU0 ausgeführt wird, über eine Drehsperre für Daten verfügt, auf die eine Auf CPU1 ausgeführte Funktion zugreifen muss. CPU1 dreht sich (wartet) bis CPU0 die Sperre freigibt.

  • Erneutes Laden von Caches und anderen Ressourcen durch Erhöhen der Wahrscheinlichkeit, dass Softwarealgorithmen, die Daten gemeinsam nutzen, auf derselben CPU ausgeführt werden.

    Ein solches Neuladen tritt beispielsweise auf, wenn eine Funktion, die freigegebene Daten auf CPU0 ausführt und auf sie zugreift, in einem nachfolgenden Interrupt auf CPU1 ausgeführt wird.

Um diese Leistungsverbesserungen in einer sicheren Umgebung zu erzielen, bietet RSS die folgenden Mechanismen:

  • Verteilte Verarbeitung

    RSS verteilt die Verarbeitung von Empfangsanzeigen von einer bestimmten NIC in DPCs an mehrere CPUs.

  • In-Order-Verarbeitung

    RSS behält die Reihenfolge der Übermittlung empfangener Datenpakete bei. Für jede Netzwerkverbindung erhalten RSS-Prozesse Hinweise auf eine zugeordnete CPU. Weitere Informationen zur VERARBEITUNG von RSS-Empfangen finden Sie unter "Angeben von RSS-Empfangsdaten".

  • Dynamischer Lastenausgleich

    RSS bietet eine Möglichkeit, die Netzwerkverarbeitungslast zwischen CPUs neu auszugleichen, da die Hostsystemlast unterschiedlich ist. Um die Last neu auszugleichen, können übergeordnete Treiber die Umleitungstabelle ändern. Weitere Informationen zum Angeben von Dereferenzierungstabellen, Hashtypen und Hashingfunktionen finden Sie unter RSS-Konfiguration.

  • Sendeseitige Skalierung

    RSS ermöglicht Treiberstapeln das Verarbeiten von Sende- und Empfangsdaten für eine bestimmte Verbindung auf derselben CPU. In der Regel sendet ein höhergelegener Treiber (z. B. TCP) einen Teil eines Datenblocks und wartet auf eine Bestätigung, bevor die restlichen Daten gesendet werden. Die Bestätigung löst dann nachfolgende Sendeanforderungen aus. Die RSS-Dereferenzierungstabelle identifiziert eine bestimmte CPU für die Empfangendatenverarbeitung. Standardmäßig wird die Sendeverarbeitung auf derselben CPU ausgeführt, wenn sie von der Empfangsbestätigung ausgelöst wird. Ein Treiber kann auch die CPU angeben (z. B. wenn ein Timer verwendet wird).

  • Sicherer Hash

    RSS enthält eine Signatur, die zusätzliche Sicherheit bietet. Diese Signatur schützt das System vor bösartigen Remotehosts, die versuchen könnten, das System in einen unausgewogenen Zustand zu erzwingen.

  • MSI-X-Support

    RSS führt mit Unterstützung für MSI-X die Interrupt-Dienstroutine (Interrupt Service Routine, ISR) auf derselben CPU aus, die später den DPC ausführt. Dieses Feature reduziert den Spinlock-Aufwand und die Cache-Neuladung.