Einführung in die empfangsseitige Skalierung
Receive Side Scaling (RSS) ist eine Netzwerktreibertechnologie, die die effiziente Verteilung der Netzwerkeingangsverarbeitung über mehrere CPUs in Multiprozessorsystemen ermöglicht.
Hinweis
Da Hyperthread-CPUs auf demselben Kernprozessor dieselbe Ausführungs-Engine verwenden, ist der Effekt nicht mit mehreren Kernprozessoren identisch. Aus diesem Grund verwendet RSS keine Hyperthreadprozessoren.
Um empfangene Daten effizient zu verarbeiten, plant die Empfangsunterbrechungsdienstfunktion eines Miniporttreibers einen Verzögerten Prozeduraufruf (DPC). Ohne RSS gibt ein typischer DPC alle empfangenen Daten innerhalb des DPC-Aufrufs an. Daher wird die gesamte Empfangsverarbeitung, die dem Interrupt zugeordnet ist, auf der CPU ausgeführt, in der der Empfangs-Interrupt stattfindet. Eine Übersicht über die Nicht-RSS-Empfangsverarbeitung finden Sie unter Nicht-RSS-Empfangsverarbeitung.
RSS ermöglicht es dem NIC- und Miniporttreiber, den Empfang von DPCs auf anderen Prozessoren zu planen. Der RSS-Entwurf stellt sicher, dass die mit einer bestimmten Verbindung verknüpfte Verarbeitung auf einer zugewiesenen CPU verbleibt. Die NIC implementiert eine Hashfunktion, und der resultierende Hashwert hilft bei der Auswahl einer CPU.
Die folgende Abbildung veranschaulicht den RSS-Mechanismus zum Bestimmen einer CPU.
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 Reihe von wenig signifikanten Bits (LSBs) des Hashwerts werden verwendet, um eine Indirektionstabelle zu indizieren. Die Werte in der Indirektierungstabelle werden verwendet, um die empfangenen Daten einer CPU zuzuweisen.
Ausführlichere Informationen zum Angeben von Indirektierungstabellen, Hashtypen und Hashfunktionen finden Sie unter RSS-Konfiguration.
Mit unterstützung von Message Signaled Interrupt (MSI) kann eine NIC auch die zugehörige CPU unterbrechen. Weitere Informationen zur NDIS-Unterstützung für MSIs finden Sie unter NDIS MSI-X.
Die folgende Abbildung veranschaulicht die Ebenen der Hardwareunterstützung für RSS.
Es gibt drei mögliche Hardwareunterstützungsstufen für RSS:
Hashberechnung mit einer einzelnen Warteschlange: Die NIC berechnet den Hashwert, und der Miniporttreiber weist empfangene Pakete Warteschlangen zu, die CPUs zugeordnet sind.
Hashberechnung mit mehreren Empfangswarteschlangen: Die NIC weist die empfangenen Datenpuffer DEN CPUs zugeordneten Warteschlangen zu.
Message Signaled Interrupts (MSIs): Die NIC unterbricht die CPU, die die empfangenen Pakete verarbeiten soll.
Die NIC übergibt immer den 32-Bit-Hashwert.
RSS kann die Leistung des Netzwerksystems verbessern, indem folgendes reduziert wird:
Verarbeitungsverzögerungen durch Verteilen der Empfangsverarbeitung von einer NIC auf mehrere CPUs.
Durch das Verteilen der Empfangsverarbeitung wird sichergestellt, dass keine CPU stark geladen wird, während sich eine andere CPU im Leerlauf befindet.
Spin locken Sie den Overhead, indem Sie die Wahrscheinlichkeit erhöhen, dass Softwarealgorithmen, die Daten freigeben, auf derselben CPU ausgeführt werden.
Der Spin Lock-Overhead tritt beispielsweise auf, wenn eine Funktion, die auf CPU0 ausgeführt wird, über eine Spinsperre für Daten verfügt, auf die eine Funktion, die auf CPU1 ausgeführt wird, zugreifen muss. CPU1 dreht (wartet), bis CPU0 die Sperre freigibt.
Erneutes Laden von Caches und anderen Ressourcen, indem die Wahrscheinlichkeit erhöht wird, 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 darauf 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.
Auftragsverarbeitung
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-Empfang finden Sie unter Angeben von RSS-Empfangsdaten.
Dynamischer Lastenausgleich
RSS bietet ein Mittel zum Ausgleich der Netzwerkverarbeitungslast zwischen CPUs, wenn die Auslastung des Hostsystems variiert. Um die Last auszugleichen, können überlastende Treiber die Indirektionstabelle ändern. Weitere Informationen zum Angeben von Indirektierungstabellen, Hashtypen und Hashfunktionen finden Sie unter RSS-Konfiguration.
Sendseitige Skalierung
RSS ermöglicht Treiberstapeln das Verarbeiten von sende- und empfangsseitigen Daten für eine bestimmte Verbindung auf derselben CPU. In der Regel sendet ein Überlastungstreiber (z. B. TCP) einen Teil eines Datenblocks und wartet auf eine Bestätigung, bevor der Saldo der Daten gesendet wird. Die Bestätigung löst dann nachfolgende Sendeanforderungen aus. Die RSS-Indirektionstabelle identifiziert eine bestimmte CPU für die Empfangsdatenverarbeitung. Standardmäßig wird die Sendeverarbeitung auf derselben CPU ausgeführt, wenn sie durch die 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öswilligen Remotehosts, die versuchen könnten, das System in einen unausgewogenen Zustand zu zwingen.
MSI-X-Unterstützung
RSS mit Unterstützung für MSI-X führt die Interruptdienstroutine (ISR) auf derselben CPU aus, die später den DPC ausführt. Dies reduziert den Mehraufwand für spin lock und das Erneute Laden von Caches.