Mise à l’échelle côté réception de NetAdapterCx (RSS)

La mise à l’échelle côté réception (RSS) est une technologie de pilote réseau qui permet une distribution efficace de la réception du trafic réseau en répartissant le traitement de réception entre plusieurs processeurs dans des systèmes multiprocesseur. RSS améliore les performances du système et augmente la scalabilité du réseau en exploitant tous les processeurs disponibles dans un système et en rééquilibrant dynamiquement les charges de travail du processeur.

Cette rubrique met en évidence RSS pour les pilotes clients NetAdapterCx et suppose la connaissance des concepts et de la terminologie RSS. Pour plus d’informations sur RSS en général, notamment des diagrammes illustrant RSS dans différents scénarios matériels, consultez La mise à l’échelle côté réception.

Vue d’ensemble de RSS dans NetAdapterCx

RSS dans NetAdapterCx se concentre sur la facilité de configuration, la simplicité de l'activation et de la désactivation, ainsi que sur l'abstraction de la complexité du lien processeur-interruption. Un pilote client pour un adaptateur réseau compatible RSS doit simplement satisfaire trois critères pour prendre en charge RSS dans NetAdapterCx :

  1. Le pilote doit définir des fonctionnalités RSS lors du démarrage d’une carte réseau, mais avant d’appeler NetAdapterStart. Cela inclut l’implémentation de quatre rappels RSS et leur inscription dans la structure des fonctionnalités RSS.
  2. Les files d'attente du chemin de données du pilote doivent être créées et prêtes à accepter les demandes.
  3. Le pilote doit être dans l’état d’alimentation D0 .

La conception de RSS dans NetAdapterCx garantit que le système n'active pas les fonctions de rappel RSS d'un client ni n'active RSS avant la fin de la séquence de mise sous tension. Les clients n’ont pas besoin de gérer les demandes de déplacement de tables indirectes ou de gérer d’autres événements RSS tant que tout ce dont ils ont besoin n’est pas prêt.

Plus tard, lorsque le pilote est déchargé, NetAdapterCx n’appelle pas les rappels RSS une fois que les files d’attente datapath ont été détruites pendant la séquence de mise hors tension. Étant donné que les files d’attente datapath sont détruites lors de la première étape de la mise sous tension, cela signifie que les clients n’ont pas à gérer les événements RSS possibles à tout autre stade pendant la mise sous tension.

Définition des fonctionnalités RSS

Pour bien démarrer avec RSS dans NetAdapterCx, procédez comme suit :

  1. Lorsque vous démarrez votre adaptateur net, indiquez au système les fonctionnalités et contraintes RSS de votre matériel à l’aide de la structure NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES .
  2. Initialisez la structure des fonctionnalités en appelant NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT.
  3. Lorsque vous initialisez la structure des fonctionnalités RSS, définissez les membres de rappel RSS de la structure pour inscrire vos implémentations pour ces rappels :
    1. EvtNetAdapterReceiveScalingEnable
    2. EvtNetAdapterReceiveScalingDisable
    3. EvtNetAdapterReceiveScalingSetHashSecretKey
    4. EvtNetAdapterReceiveScalingSetIndirectionEntries
  4. Définissez la structure de fonctionnalités RSS de SynchronizeSetIndirectionEntries selon les besoins.
  5. Passez les structures initialisées de fonctionnalités RSS à la méthode NetAdapterSetReceiveScalingCapabilities.

Activation et désactivation de RSS

Une fois que vous avez défini les fonctionnalités RSS, le système continuera avec la séquence d’alimentation de votre pilote. NetAdapterCx commence à appeler les rappels RSS de votre pilote une fois la dernière étape de création des files d'attente datapath terminée. À ce stade, RSS peut être activé et désactivé en fonction des besoins du système.

Important

Vous ne devez pas effacer ou réinitialiser votre table d’indirection lors de l’activation ou de la désactivation de RSS. Le framework définira l'état initial de votre table d'indirection.

Activation de RSS

NetAdapterCx active RSS en invoquant le rappel EvtNetAdapterReceiveScalingEnable de votre pilote. Dans le contexte de ce rappel, vous activez généralement les bits de contrôle dans votre matériel.

Pour obtenir un exemple de code qui permet l’activation de RSS, consultez EvtNetAdapterReceiveScalingEnable.

Désactivation de RSS

NetAdapterCx désactive RSS en appelant le rappel EvtNetAdapterReceiveScalingDisable de votre pilote. Ici, vous désactivez généralement le bit de contrôle dans votre matériel que vous avez précédemment défini dans EvtNetAdapterReceiveScalingEnable.

Pour voir un exemple de code de désactivation de RSS, consultez EvtNetAdapterReceiveScalingDisable.

Définition de la clé secrète de hachage

Une fois RSS activé, NetAdapterCx invoque le rappel EvtNetAdapterReceiveScalingSetHashSecretKey pour fournir à votre pilote la clé secrète de hachage que votre NIC doit utiliser pour vérifier les calculs de hachage. Ce rappel peut être appelé à tout moment lorsque RSS est en cours d’exécution si la clé secrète de hachage change.

Pour obtenir un exemple de code de définition de la clé secrète de hachage, consultez EvtNetAdapterReceiveScalingSetHashSecretKey.

Déplacement d’entrées de table d’indirection

Pendant que RSS s’exécute sur le système, les pilotes de protocole supérieur surveillent la charge de travail du processeur et gèrent une table d’indirection qui mappe les files d’attente aux processeurs. Lorsque le pilote de protocole doit rééquilibrer la charge de travail du processeur dans RSS, il calcule d’abord un nouveau mappage pour chaque entrée de table indirection vers un nouveau processeur. Ensuite, le protocole transmet ces informations à NetAdapterCx, qui gère la complexité du mappage des files d’attente de réception et des vecteurs d’interruption matérielle au processeur approprié pour le compte de votre pilote client de carte réseau. NetAdapterCx stocke la nouvelle table indirection, avec des entrées mappées pour recevoir des ID de file d’attente, dans une structure NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES et la transmet à votre pilote lorsqu’elle appelle la fonction de rappel EvtNetAdapterReceiveScalingSetIndirectionEntries .

Dans cette fonction de rappel, vous devez déplacer chaque entrée de la table d’indirection de votre carte réseau vers la file d’attente de réception spécifiée. Chaque structure NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY dans le tableau NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES contient l’index de hachage de cette entrée dans la table, la nouvelle file d’attente de réception à laquelle affecter l’entrée et un champ d’état indiquant si ce déplacement individuel a réussi ou non.

La méthode d’affectation d’entrées d’index aux files d’attente de réception matérielles dépend de la conception de votre carte réseau et du nombre de files d’attente de réception qu’elle contient. Pour plus d’informations et un exemple de code, consultez EvtNetAdapterReceiveScalingSetIndirectionEntries.

Prise en charge hétérogène du processeur

Important

La prise en charge hétérogène des processeurs est une fonctionnalité préalable qui peut être sensiblement modifiée avant sa publication commerciale. Microsoft n’offre aucune garantie, expresse ou implicite, en ce qui concerne les informations fournies ici.

Les systèmes de CPU hétérogènes utilisent plusieurs types de cœurs qui ont des vitesses d'horloge et des fonctionnalités différentes. Comparé aux systèmes homogènes multiprocesseurs où chaque cœur est identique à l’un de l’autre, les systèmes de processeur hétérogènes peuvent mieux s’ajuster aux charges de calcul dynamique et utiliser moins d’énergie.

À compter de la version de prévisualisation de WDK 25197, NetAdapterCx offre une prise en charge hétérogène du système de CPU en utilisant efficacement les différents types de cœurs. Pendant que RSS est en cours d’exécution, le système décide du processeur à utiliser en fonction de la charge de travail de trafic reçue par le pilote client. Lorsqu’il y a moins de trafic reçu, des cœurs plus petits et plus efficaces peuvent gérer le trafic. Lorsqu’il y a plus de trafic, des cœurs plus volumineux et plus performants sont nécessaires pour interroger en permanence les paquets reçus.

Pour opter pour la prise en charge des systèmes hétérogènes, l’administrateur système doit définir le *RSSProfilemot-clé INF normalisé sur NdisRssProfileBalanced. Il s’agit du profil par défaut pour les systèmes hétérogènes. Pour permettre au système de décider des meilleurs cœurs à utiliser, vous ne pouvez pas définir de mots clés avancés RSS.

Les autres profils RSS sont également pris en charge pour les systèmes hétérogènes. Si vous souhaitez contrôler les paramètres avancés comme le numéro du processeur de base RSS et le nombre maximal de processeur RSS sur le système, vous devez utiliser un autre profil RSS.

Vous pouvez également utiliser NdisRssProfileBalanced sur un système d’UC homogène. Dans ce cas, le système décide quels processeurs utiliser pour RSS.