RSS avec une file d’attente de réception matérielle unique
Les pilotes Miniport peuvent prendre en charge RSS pour les cartes réseau qui prennent en charge le calcul de hachage RSS et une file d’attente de descripteur de réception unique.
La figure suivante illustre le traitement RSS avec une file d’attente de descripteur de réception unique.
Dans la figure, les flèches en pointillés représentent un autre chemin d’accès pour le traitement de la réception. RSS ne peut pas contrôler le processeur qui reçoit l’appel ISR initial.
Contrairement au traitement de réception non RSS, le traitement de réception basé sur RSS est distribué sur plusieurs processeurs. En outre, le traitement d’une connexion donnée peut être lié à un processeur donné.
Le processus suivant se répète pour chaque interruption :
La carte réseau utilise DMA pour remplir les mémoires tampons avec les données reçues et interrompt le système.
Le pilote miniport a alloué les mémoires tampons de réception dans la mémoire partagée lors de l’initialisation.
La carte réseau peut remplir des mémoires tampons de réception supplémentaires à tout moment, mais ne s’interrompt pas à nouveau tant que le pilote miniport n’a pas activé les interruptions.
Les mémoires tampons reçues que le système gère en une seule interruption peuvent être associées à de nombreuses connexions réseau différentes.
NDIS appelle la fonction MiniportInterrupt (ISR) du pilote miniport sur un processeur déterminé par le système.
L’ISR désactive les interruptions et demande À NDIS de mettre en file d’attente un appel de procédure différée (DPC) pour traiter les données reçues.
NDIS appelle la fonction MiniportInterruptDPC (DPC) sur le processeur actuel. Dans la DPC :
- Le pilote miniport utilise les valeurs de hachage que la carte réseau a calculées pour chaque mémoire tampon reçue et réattribue chaque mémoire tampon reçue à une file d’attente de réception associée à un processeur.
- La DPC actuelle demande à NDIS de mettre en file d’attente un DPC pour chacun des autres processeurs associés à une file d’attente de réception non vide.
- Si le DPC actuel s’exécute sur un processeur associé à une file d’attente non vide, le DPC actuel traite les mémoires tampons de réception associées et indique les données reçues dans la pile des pilotes.
L’affectation de files d’attente et la mise en file d’attente de DPC supplémentaires nécessitent une surcharge de traitement supplémentaire. Pour améliorer les performances du système, cette surcharge doit être compensée par une meilleure utilisation des processeurs disponibles.
DPC sur un processeur donné :
- Traite les mémoires tampons de réception associées à sa file d’attente de réception et indique les données dans la pile des pilotes. Pour plus d’informations, consultez Indication des données de réception RSS.
- Active les interruptions, s’il s’agit du dernier DPC à se terminer. Cette interruption est terminée et le processus redémarre. Le pilote doit utiliser une opération atomique pour identifier le dernier DPC à terminer. Par exemple, le pilote peut utiliser la fonction NdisInterlockedDecrement pour implémenter un compteur atomique.