Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Miniporttreiber können RSS für NICs unterstützen, die RSS-Hashberechnung und eine einzelne Empfangsdeskriptorwarteschlange unterstützen.
Die folgende Abbildung veranschaulicht die RSS-Verarbeitung mit einer einzelnen Empfangsdeskriptorwarteschlange.
In der Abbildung stellen die gestrichelten Pfeile einen alternativen Pfad für die Empfangsverarbeitung dar. RSS kann die CPU nicht steuern, die den anfänglichen ISR-Aufruf empfängt.
Im Gegensatz zur Nicht-RSS-Empfangsverarbeitung wird die RSS-basierte Empfangsverarbeitung über mehrere CPUs verteilt. Außerdem kann die Verarbeitung für eine bestimmte Verbindung an eine bestimmte CPU gebunden werden.
Der folgende Vorgang wird für jeden Interrupt wiederholt:
Die NIC verwendet DMA zum Ausfüllen von Puffern mit empfangenen Daten und unterbricht das System.
Der Miniporttreiber hat während der Initialisierung die Empfangspuffer im gemeinsam genutzten Speicher zugewiesen.
Die NIC kann jederzeit zusätzliche Empfangspuffer ausfüllen, aber nicht erneut unterbrechen, bis der Miniporttreiber die Unterbrechungen aktiviert.
Die empfangenen Puffer, die das System in einem Interrupt behandelt, können vielen verschiedenen Netzwerkverbindungen zugeordnet werden.
NDIS ruft die MiniportInterrupt-Funktion (ISR) des Miniporttreibers auf einer systembestimmten CPU auf.
Der ISR deaktiviert die Unterbrechungen und fordert NDIS auf, einen verzögerten Prozeduraufruf (Deferred Procedure Call, DPC) in die Warteschlange zu stellen, um die empfangenen Daten zu verarbeiten.
NDIS ruft die MiniportInterruptDPC-Funktion (DPC) auf der aktuellen CPU auf. Im DPC:
- Der Miniporttreiber verwendet die Hashwerte, die die NIC für jeden empfangenen Puffer berechnet hat, und weist jeden empfangenen Puffer einer Empfangswarteschlange zu, die einer CPU zugeordnet ist.
- Der aktuelle DPC fordert NDIS auf, für jede der anderen CPUs, die einer nicht leeren Empfangswarteschlange zugeordnet sind, einen DPC in die Warteschlange zu stellen.
- Wenn der aktuelle DPC auf einer CPU ausgeführt wird, die einer nicht leeren Warteschlange zugeordnet ist, verarbeitet der aktuelle DPC die zugeordneten Empfangspuffer und gibt die empfangenen Daten im Treiberstapel an.
Das Zuweisen von Warteschlangen und das Einreihen zusätzlicher DPCs erfordert zusätzlichen Verarbeitungsaufwand. Um eine verbesserte Systemleistung zu erzielen, muss dieser Aufwand durch eine bessere Auslastung der verfügbaren CPUs ausgeglichen werden.
Der DPC auf einer bestimmten CPU:
- Verarbeitet die Empfangspuffer, die der Empfangs-Queue zugeordnet sind, und leitet die Daten im Treiberstapel weiter. Weitere Informationen finden Sie unter Angeben von RSS-Empfangsdaten.
- Aktiviert die Unterbrechungen, wenn es der letzte DPC ist, der abgeschlossen werden soll. Dieser Interrupt ist abgeschlossen und der Vorgang wird erneut gestartet. Der Treiber muss eine Atomoperation verwenden, um den letzten DPC zu identifizieren. Beispielsweise kann der Treiber die NdisInterlockedDecrement-Funktion verwenden, um einen Atomzähler zu implementieren.