Partager via


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

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. La RSS améliore les performances du système et augmente la capacité d’extension 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 présente le RSS pour les pilotes clients NetAdapterCx et suppose une connaissance des concepts et de la terminologie de la RSS. Pour en savoir plus sur la RSS en général, notamment avec des schémas illustrant la RSS dans différents scénarios matériels, consultez Mise à l’échelle côté réception.

Vue d’ensemble de la RSS dans NetAdapterCx

La RSS dans NetAdapterCx est axée sur la facilité de configuration, la simplicité d’activation et de désactivation, et l’abstraction de la complexité du processeur à l’interruption. Un pilote client pour une carte d’interface réseau compatible avec la RSS doit uniquement répondre à trois critères pour prendre en charge la RSS dans NetAdapterCx :

  1. Le pilote doit définir des fonctionnalités de 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 de la RSS.
  2. Les files d’attente de chemins 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 la RSS dans NetAdapterCx garantit que le système n’appelle pas les rappels RSS d’un client et active la RSS jusqu’à la fin de la séquence de mise sous tension. Les clients n’ont pas à gérer les demandes de déplacement de tables d’indirection ou d’autres événements RSS tant que tout ce dont ils ont besoin n’est pas prêt.

Ultérieurement, lors du déchargement du pilote, NetAdapterCx n’appelle pas les rappels RSS après que les files d’attente des chemins de données ont été détruites pendant la séquence de mise sous tension. Étant donné que les files d’attente de chemins de données sont détruites en premier lieu lors de la mise hors tension, cela signifie que les clients n’ont pas à gérer d’éventuels événements RSS à un autre stade de la mise hors tension.

Définition des fonctionnalités de la RSS

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

  1. Lorsque vous démarrez votre carte réseau, indiquez au système les fonctionnalités et les 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 de la 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 des fonctionnalités de la RSS de SynchronizeSetIndirectionEntries selon les besoins.
  5. Transmettez les structures des fonctionnalités de la RSS initialisées à la méthode NetAdapterSetReceiveScalingCapabilities.

Activer et désactiver la RSS

Une fois que vous avez défini les fonctionnalités de la RSS, le système continue avec la séquence d’alimentation de votre pilote. NetAdapterCx commence à invoquer les rappels RSS de votre pilote une fois que l’étape finale de création des files d’attente des chemins de données est terminée. À ce stade, la RSS peut être activée et désactivée 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 la RSS. L’infrastructure définit l’état initial de votre table d’indirection.

Activation d’RSS

NetAdapterCx active la RSS en appelant 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 d’activation de la RSS, consultez EvtNetAdapterReceiveScalingEnable.

Désactivation de RSS

NetAdapterCx désactive la 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 obtenir un exemple de code de désactivation de la RSS, consultez EvtNetAdapterReceiveScalingDisable.

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

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

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

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

Pendant l’exécution de la RSS 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. Pour rééquilibrer la charge de travail du processeur dans la RSS, le pilote de protocole calcule d’abord un nouveau mappage pour chaque entrée de table indirection vers un nouveau processeur. Puis, il 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 la carte d’interface réseau. NetAdapterCx stocke la nouvelle table d’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 ce rappel, vous déplacez chaque entrée dans la table d’indirection de votre carte d’interface 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’attribution des entrées d’index aux files d’attente de réception matérielles dépend de la conception de votre carte d’interface réseau et du nombre de files d’attente de réception dont elle dispose. Pour en savoir plus et obtenir un exemple de code, consultez EvtNetAdapterReceiveScalingSetIndirectionEntries.

Prise en charge d’un processeur hétérogène

Important

La prise en charge d’un processeur hétérogène est une fonctionnalité de préversion qui peut être sensiblement modifiée avant sa publication commerciale. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.

Les systèmes avec des processeurs hétérogènes utilisent plusieurs types de cœurs qui ont différentes vitesses d’horloge et fonctionnalités. Par rapport aux systèmes avec des multiprocesseurs homogènes, où chaque cœur est identique à l’autre, les systèmes avec des processeurs hétérogènes sont plus à même de s’adapter aux charges informatiques dynamiques et de consommer moins d’énergie.

À compter de la version préliminaire 25197 de WDK, NetAdapterCx offre une prise en charge de systèmes avec des processeurs hétérogènes en utilisant efficacement les différents types de cœurs. Pendant l’exécution de la RSS, le système décide quel processeur utiliser en fonction de la charge de travail de trafic reçue par le pilote client. Lorsque le trafic reçu est moins important, des cœurs plus petits et plus économes en énergie peuvent gérer le trafic. Lorsque le trafic est plus important, des cœurs plus grands et plus performants sont nécessaires pour interroger en permanence les paquets reçus.

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

Les autres profils de la 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 de la RSS et le nombre maximal de processeur de la RSS sur le système, vous devez utiliser un autre profil RSS.

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