Udostępnij za pośrednictwem


RSS z pojedynczą kolejką odbiorczą sprzętową

Sterowniki Miniport mogą obsługiwać funkcję RSS dla kart sieciowych, które obsługują obliczanie skrótów RSS i pojedynczą kolejkę deskryptorów odbiorczych.

Na poniższej ilustracji przedstawiono przetwarzanie RSS z pojedynczą kolejką deskryptorów odbioru.

Diagram ilustrujący przetwarzanie RSS z pojedynczą kolejką deskryptora odbierającego.

Na ilustracji strzałki kreskowane reprezentują alternatywną ścieżkę przetwarzania odbiorczego. RSS nie może sterować procesorem, który odbiera pierwsze wywołanie ISR.

W przeciwieństwie do przetwarzania odbioru bez użycia RSS, przetwarzanie odbioru oparte na RSS jest rozdzielane między wiele procesorów CPU. Ponadto przetwarzanie dla danego połączenia może być powiązane z danym procesorem CPU.

Następujący proces powtarza się dla każdego przerwania:

  1. Karta sieciowa używa DMA do wypełniania buforów odebranymi danymi i wywołuje przerwanie systemu.

    Sterownik miniportu przydzielił bufory odbiorcze w pamięci współdzielonej podczas inicjalizacji.

  2. Karta sieciowa może wypełnić dodatkowe bufory odbiorcze w dowolnym momencie, ale nie generuje ponownie przerwania, dopóki sterownik miniportu nie włączy przerwań.

    Odebrane bufory, które system obsługuje w jednym przerwaniu, mogą być skojarzone z wieloma różnymi połączeniami sieciowymi.

  3. NDIS wywołuje funkcję MiniportInterrupt (ISR) sterownika miniportu na procesorze określonym przez system.

  4. ISR wyłącza przerwania i prosi NDIS o umieszczenie w kolejce odroczonego wywołania procedury (DPC) na przetwarzanie odebranych danych.

  5. NDIS wywołuje funkcję MiniportInterruptDPC (DPC) na bieżącym CPU. W DPC:

    1. Sterownik miniportu używa wartości skrótu obliczanych przez kartę sieciową dla każdego odebranego buforu i ponownie przypisuje każdy odebrany bufor do kolejki odbiorczej skojarzonej z CPU.
    2. Bieżący DPC prosi NDIS o zakolejkowanie DPC dla każdego z pozostałych CPU, które są skojarzone z niepustą kolejką odbierania.
    3. Jeśli bieżąca DPC jest uruchomiona na procesorze CPU skojarzonym z niepustą kolejką, bieżąca DPC przetwarza skojarzone bufory odbiorcze i przesyła odebrane dane w górę po stosie sterowników.

    Przypisywanie kolejek i kolejkowanie dodatkowych DPC wymaga dodatkowego narzutu obciążenia procesora. Aby osiągnąć lepszą wydajność systemu, obciążenie to musi zostać zrównoważone przez lepsze wykorzystanie dostępnych procesorów CPU.

  6. DPC na danej jednostce CPU:

    1. Przetwarza bufory odbioru skorelowane z jego kolejką odbioru i przesyła dane w górę stosu sterowników. Aby uzyskać więcej informacji, zobacz Oznaczenie danych odbioru RSS.
    2. Włącza przerwania, jeśli jest to ostatni DPC do ukończenia. To przerwanie zostanie ukończone, a proces zostanie uruchomiony ponownie. Sterownik musi użyć operacji atomowej, aby zidentyfikować ostatni DPC, który ma zostać zakończony. Na przykład sterownik może użyć funkcji NdisInterlockedDecrement w celu zaimplementowania atomowego licznika.