RSS avec file d’attente matérielle
RSS avec mise en file d’attente matérielle améliore les performances du système par rapport à RSS avec une seule solution de file d’attente de réception matérielle. Les cartes réseau qui prennent en charge la mise en file d’attente matérielle attribuent les données reçues à plusieurs files d’attente de réception. Les files d’attente de réception sont associées à un processeur. La carte réseau affecte les données reçues aux processeurs en fonction des valeurs de hachage et d’une table d’indirection.
La figure suivante illustre RSS avec mise en file d’attente de réception de carte réseau.
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. Le pilote n’a pas besoin de mettre en file d’attente les données afin de pouvoir planifier immédiatement les DPC initiaux sur les processeurs appropriés.
Le processus suivant se répète pour chaque interruption :
Carte réseau :
Utilise DMA pour remplir les mémoires tampons avec les données reçues.
Le pilote miniport a alloué les mémoires tampons de réception dans la mémoire partagée lors de l’initialisation.
Calcule une valeur de hachage.
Met en file d’attente la mémoire tampon d’un processeur et fournit les affectations de file d’attente au pilote miniport.
Par exemple, la carte réseau peut boucler les étapes 1 à 3 et DMA une liste d’attributions de processeur après la réception d’un certain nombre de paquets. Le mécanisme spécifique est laissé à la conception de la carte réseau.
Interrompt le système.
Les mémoires tampons reçues que le système gère en une seule interruption sont réparties entre les processeurs.
NDIS appelle la fonction MiniportInterrupt (ISR) du pilote miniport sur un processeur déterminé par le système.
Le pilote miniport demande à NDIS de mettre en file d’attente les appels de procédure différée (DDC) pour chacun des processeurs qui ont une file d’attente non vide.
Notez que tous les PDC doivent se terminer avant que le pilote active les interruptions. Notez également que l’ISR peut s’exécuter sur un processeur qui n’a pas de mémoires tampons à traiter.
NDIS appelle la fonction MiniportInterruptDPC pour chaque DPC mis en file d’attente. DPC sur un processeur donné :
Génère des descripteurs de réception pour tous les tampons reçus dans sa file d’attente 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.