Freigeben über


RSS-Konfiguration

Um RSS-Konfigurationsinformationen abzurufen, kann ein übergeordneter Treiber eine OID-Abfrage von OID_GEN_RECEIVE_SCALE_CAPABILITIES an einen Miniport-Treiber senden. NDIS stellt die RSS-Konfigurationsinformationen auch den übergeordneten Protokolltreibern in der NDIS_BIND_PARAMETERS-Struktur während der Initialisierung zur Verfügung.

Der übergeordnete Treiber wählt eine Hashing-Funktion, einen Typ und eine Umleitungstabelle aus. Um diese Konfigurationsoptionen festzulegen, sendet der Treiber eine OID-Set-Anfrage von OID_GEN_RECEIVE_SCALE_PARAMETERS an den Miniport-Treiber. Übergeordnete Treiber können diese OID auch abfragen, um die aktuellen RSS-Einstellungen festzulegen. Der Informationspuffer für die OID OID_GEN_RECEIVE_SCALE_PARAMETERS enthält einen Zeiger auf eine NDIS_RECEIVE_SCALE_PARAMETERS-Struktur.

Der übergeordnete Treiber kann RSS auf der NIC deaktivieren. In diesem Fall legt der Treiber das Flag NDIS_RSS_PARAM_FLAG_DISABLE_RSS im Element Flags der Struktur NDIS_RECEIVE_SCALE_PARAMETERS fest. Wenn dieses Flag festgelegt ist, sollte der Miniport-Treiber alle anderen Flags und Einstellungen ignorieren und RSS auf der NIC deaktivieren.

NDIS verarbeitet OID_GEN_RECEIVE_SCALE_PARAMETERS, bevor es an den Miniport-Treiber weitergegeben wird, und aktualisiert das standardisierte Schlüsselwort *RSS des Miniport-Adapters, falls erforderlich. Weitere Informationen über das Schlüsselwort *RSS finden Sie unter Standardisierte INF-Schlüsselwörter für RSS.

Nach dem Empfang einer OID_GEN_RECEIVE_SCALE_PARAMETERS-Set-Anfrage mit gesetztem Flag NDIS_RSS_PARAM_FLAG_DISABLE_RSS sollte der Miniport-Treiber den RSS-Status der NIC nach der Initialisierung auf den Ausgangszustand der NIC festlegen. Wenn der Miniport-Treiber also eine nachfolgende Anfrage zum Setzen von OID_GEN_RECEIVE_SCALE_PARAMETERS mit deaktiviertem Flag NDIS_RSS_PARAM_FLAG_DISABLE_RSS empfängt, sollten alle Parameter dieselben Werte haben, die festgelegt wurden, nachdem der Miniport-Treiber die Anfrage zum Setzen von OID_GEN_RECEIVE_SCALE_PARAMETERS zum ersten Mal nach der Initialisierung des Miniport-Adapters empfangen hat.

Ein übergeordneter Treiber kann die OID OID_GEN_RECEIVE_HASH verwenden, um Hash-Berechnungen für empfangene Frames zu aktivieren und zu konfigurieren, ohne RSS zu aktivieren. Übergeordnete Treiber können diese OID auch abfragen, um die aktuellen Empfangs-Hash-Einstellungen festzulegen.

Der Informationspuffer für die OID OID_GEN_RECEIVE_HASH enthält einen Zeiger auf eine NDIS_RECEIVE_HASH_PARAMETERS-Struktur. Bei einer Anfrage zum Festlegen gibt die OID die Hash-Parameter an, die der Miniport-Adapter verwenden soll. Bei einer Abfrage gibt die OID die Hash-Parameter zurück, die der Miniport-Adapter verwendet. Diese OID ist für Treiber, die RSS unterstützen, optional.

Hinweis Wenn die Empfangs-Hash-Berechnung aktiviert ist, deaktiviert NDIS die Empfangs-Hash-Berechnung, bevor es RSS aktiviert. Wenn RSS aktiviert ist, deaktiviert NDIS RSS, bevor es die Empfangs-Hash-Berechnung aktiviert.

Alle Miniport-Adapter, die der Miniport-Treiber unterstützt, müssen die gleichen Hash-Konfigurationseinstellungen für alle nachfolgenden Protokollbindungen bereitstellen. Diese OID enthält auch den geheimen Schlüssel, den der Miniport-Treiber oder die NIC für Hash-Berechnungen verwenden muss. Der Schlüssel ist 320 Bit lang (40 Byte) und kann beliebige Daten enthalten, die der darüber liegende Treiber auswählt, z. B. einen zufälligen Strom von Bytes.

Um die Verarbeitungslast wieder auszugleichen, kann der übergeordnete Treiber die RSS-Parameter festlegen und die Umleitungstabelle ändern. Normalerweise bleiben alle Parameter mit Ausnahme der Umleitungstabelle unverändert. Nach der Initialisierung von RSS kann der übergeordnete Treiber jedoch andere Initialisierungsparameter von RSS ändern. Falls erforderlich, kann der Miniport-Treiber die NIC-Hardware zurücksetzen, um die Hash-Funktion, den geheimen Hash-Schlüssel, den Hash-Typ, die Basis-CPU-Nummer oder die Anzahl der Bits, die zur Indizierung der Umleitungstabelle verwendet werden, zu ändern.

Hinweis Der übergeordnete Treiber kann diese Parameter jederzeit festlegen. Dies kann zu fehlerhaften Empfangsmeldungen führen. Miniport-Treiber, die TCP unterstützen, müssen ihre Warteschlangen in dieser Instanz nicht bereinigen.

Die folgende Abbildung zeigt Beispielinhalte für zwei Instanzen der Umleitungstabelle.

Diagramm, das den Inhalt von zwei Instanzen einer RSS-Umleitungstabelle mit einer Konfiguration mit vier Prozessoren und 64 Einträgen zeigt.

In der vorhergehenden Abbildung wird von einer Konfiguration mit vier Prozessoren ausgegangen und die Anzahl der niedrigstwertigen Bits, die vom Hash-Wert verwendet werden, beträgt 6 Bits. Daher enthält die Umleitungstabelle 64 Einträge.

In der Abbildung sind in Tabelle A die Werte in der Indirektionstabelle unmittelbar nach der Initialisierung aufgeführt. Später, wenn die normale Datenverkehrslast schwankt, gerät die Prozessorlast aus dem Gleichgewicht. Der darüber liegende Treiber erkennt die unausgewogene Situation und versucht, die Ladung auszugleichen, indem er eine neue Umleitungstabelle definiert. In Tabelle B sind die Werte der neuen Umleitungstabelle aufgeführt. In Tabelle B wird ein Teil der Ausladung von CPU 2 auf die CPUs 1 und 3 verschoben.

Hinweis Wenn die Umleitungstabelle geändert wird, können für kurze Zeit (während die aktuellen Warteschlangen für die Empfangsdeskriptoren verarbeitet werden) Pakete auf der falschen CPU verarbeitet werden. Dies ist ein normaler vorübergehender Zustand.

Die Größe der Umleitungstabelle ist in der Regel zwei- bis achtmal so groß wie die Anzahl der Prozessoren im System.

Wenn der Miniport-Treiber Pakete auf CPUs verteilt, kann der Aufwand für die Lastverteilung unerschwinglich werden, wenn es viel zu viele CPUs gibt. In diesem Fall sollten die übergeordneten Treiber eine Untermenge von CPUs auswählen, auf denen die Verarbeitung der Netzwerkdaten stattfindet.

In manchen Fällen kann die Anzahl der verfügbaren Hardware-Warteschlangen geringer sein als die Anzahl der CPUs im System. Der Miniport-Treiber muss die Indirektionstabelle untersuchen, um die CPU-Nummern zu ermitteln, die den Hardware-Warteschlangen zugeordnet werden sollen. Wenn die Gesamtzahl der verschiedenen CPU-Nummern, die in der Indirektionstabelle erscheinen, größer ist als die Anzahl der von der NIC unterstützten Warteschlangen, muss der Miniport-Treiber eine Untermenge der CPU-Nummern aus der Indirektionstabelle auswählen. Die Untermenge entspricht in ihrer Anzahl der Anzahl der Hardware Warteschlangen. Der Miniport-Treiber hat den Parameter IndirectionTableSize von OID_GEN_RECEIVE_SCALE_PARAMETERS abgerufen. Der Miniport-Treiber hat den Wert NumberOfReceiveQueues als Antwort auf OID_GEN_RECEIVE_SCALE_CAPABILITIES angegeben.