Freigeben über


RSS mit signalisierten Interrupts

Miniport-Treiber können MSIs (Message Signaled Interrupts) unterstützen, um die RSS-Leistung zu verbessern. MSIs ermöglichen es der NIC, einen Interrupt für die CPU anzufordern, die die empfangenen Daten verarbeitet. Weitere Informationen zur NDIS-Unterstützung für MSI finden Sie unter NDIS MSI-X.

Die folgende Abbildung veranschaulicht RSS mit MSI-X.

Diagramm zur Veranschaulichung von RSS mit MSI-X in einem Netzwerkstapel.

In der Abbildung stellen die gestrichelten Pfeile die Verarbeitung einer anderen Verbindung dar. RSS mit MSI-X ermöglicht es der NIC, die richtige CPU für eine Verbindung zu unterbrechen.

Der folgende Prozess wird für jeden Interrupt wiederholt:

  1. Die NIC:

    1. Verwendet DMA, um Puffer mit empfangenen Daten zu füllen.

      Der Miniporttreiber hat während der Initialisierung die Empfangspuffer im freigegebenen Speicher zugeordnet.

    2. Berechnet einen Hashwert.

    3. Stellt den Puffer in eine Warteschlange für eine CPU und stellt die Warteschlangenzuweisungen für den Miniporttreiber bereit. Beispielsweise könnte die NIC die Schritte 1 bis 3 und DMA eine Liste der CPU-Zuweisungen nach dem Empfang einer bestimmten Anzahl von Paketen durchschleifen. Der spezifische Mechanismus bleibt dem NIC-Entwurf überlassen.

    4. Bei Verwendung von MSI-X wird die CPU unterbrochen, die einer nicht leeren Warteschlange zugeordnet ist.

  2. Die NIC kann zusätzliche Empfangspuffer füllen und sie jederzeit der Warteschlange hinzufügen, unterbricht diese CPU jedoch nicht erneut, bis der Miniporttreiber die Interrupts für diese CPU aktiviert.

  3. NDIS ruft die ISR des Miniporttreibers ( MiniportInterrupt) auf der aktuellen CPU auf.

  4. Der ISR deaktiviert Interrupts für die aktuelle CPU und stellt einen DPC auf der aktuellen CPU in die Warteschlange.

    Interrupts können weiterhin auf den anderen CPUs auftreten, während der DPC auf der aktuellen CPU ausgeführt wird.

  5. NDIS ruft die MiniportInterruptDPC-Funktion für jeden DPC in der Warteschlange auf. Jeder DPC:

    1. Builds empfangen Deskriptoren für alle empfangenen Puffer in der Warteschlange und geben die Daten im Treiberstapel an. Weitere Informationen finden Sie unter Angeben von RSS-Empfangsdaten.
    2. Aktiviert Interrupts für die aktuelle CPU. Dieser Interrupt ist abgeschlossen, und der Prozess wird erneut gestartet. Beachten Sie, dass kein atomischer Vorgang erforderlich ist, um den Fortschritt anderer DPCs nachzuverfolgen.