Recevoir la mise à l’échelle côté version 2 (RSSv2)
La mise à l’échelle côté réception améliore les performances système liées à la gestion des données réseau sur les systèmes multiprocesseurs. NDIS 6.80 et versions ultérieures prennent en charge RSS version 2 (RSSv2), qui étend RSS en offrant une répartition dynamique par VPort des files d’attente.
Vue d’ensemble
Par rapport à RSSv1, RSSv2 réduit le temps entre la mesure de la charge du processeur et la mise à jour de la table d’indirection. Cela permet d’éviter le ralentissement en cas de trafic élevé. Pour ce faire, RSSv2 effectue ses actions à l’adresse IRQL = DISPATCH_LEVEL, dans le contexte de traitement de la demande, et fonctionne uniquement sur un sous-ensemble d’entrées de table d’indirection qui pointent vers le processeur actuel. Cela signifie que RSSv2 peut répartir dynamiquement les files d’attente de réception sur plusieurs processeurs de manière beaucoup plus réactive que RSSv1.
Deux OID, OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 et OID_GEN_RSS_SET_INDIRECTION_TABLE_ENTRIES, ont été introduits dans RSSv2 pour les pilotes miniports afin de définir les fonctionnalités RSS appropriées et de contrôler la table d’indirection respectivement. OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 est un OID standard, tandis que OID_GEN_RSS_SET_INDIRECTION_ENTRIES est un OID synchrone qui ne peut pas retourner NDIS_STATUS_PENDING. Pour plus d’informations sur ces OID, consultez leurs pages de référence individuelles. Pour plus d’informations sur les OID synchrones, consultez Interface de requête OID synchrone dans NDIS 6.80.
Terminologie RSSv2
Cette rubrique utilise les termes suivants :
Terme | Définition |
---|---|
RSSv1 | Mécanisme de mise à l’échelle côté réception de première génération. Utilise OID_GEN_RECEIVE_SCALE_PARAMETERS. |
RSSv2 | Le mécanisme de mise à l’échelle côté réception de deuxième génération pris en charge dans Windows 10, version 1803 et ultérieure, décrit dans cette rubrique. |
Entité de mise à l’échelle | L’adaptateur miniport lui-même en mode RSS natif ou un VPort en mode RSSv2. |
ITE | Entrée de table d’indirection (ITE) d’une entité de mise à l’échelle donnée. Le nombre total d’ites par VPort ne peut pas dépasser NumberOfIndirectionTableEntriesPerNonDefaultPFVPort ou NumberOfIndirectionTableEntriesForDefaultVPort en mode VMQ ou 128 dans le cas RSS natif. NumberOfIndirectionTableEntriesPerNonDefaultPFVPort et NumberOfIndirectionTableEntriesForDefaultVPort sont membres de la structure NDIS_NIC_SWITCH_CAPABILITIES . |
Mode mise à l’échelle | Stratégie de commutateur de machine virtuelle par VPort qui contrôle la façon dont ses ITE sont gérés au moment de l’exécution. Cela peut être statique (aucun déplacement d’ITE en raison de changements de charge) ou dyanmique (expansion et fusion en fonction de la charge actuelle du trafic). |
File d'attente | Objet matériel sous-jacent (file d’attente) qui sauvegarde un ITE. Selon le matériel et la table d’indirection, la file d’attente de configuration peut sauvegarder plusieurs ITE. Le nombre total de files d’attente, y compris celle utilisée par la file d’attente par défaut, ne peut pas dépasser la limite préconfigurée généralement définie par un administrateur. |
Processeur par défaut | Processeur qui reçoit des paquets pour lesquels le hachage ne peut pas être calculé. Chaque VPort a un processeur par défaut. |
Processeur principal | Processeur spécifié comme membre ProcessorAffinity de la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS lors de la création de VPort. Ce processeur peut être mis à jour au moment de l’exécution et spécifie où le trafic VMQ est dirigé. |
Processeur source | Processeur auquel l’ITE est actuellement mappé. |
UC cible | Processeur auquel l’ITE est re mappé (à l’aide de RSSv2). |
Processeur acteur | Processeur sur lequel les requêtes RSSv2 sont effectuées. |
Fonctionnalité RSSv2 publicitaire dans un pilote miniport
Les pilotes Miniport annoncent la prise en charge de RSSv2 en définissant le membre CapabilitiesFlags de la structure NDIS_RECEIVE_SCALE_CAPABILITIES avec l’indicateur NDIS_RSS_CAPS_SUPPORTS_INDEPENDENT_ENTRY_MOVE . Cette fonctionnalité est nécessaire pour activer la fonctionnalité d’équilibrage de charge du processeur de RSSv2, ainsi que l’indicateur NDIS_RECEIVE_FILTER_DYNAMIC_PROCESSOR_AFFINITY_CHANGE_SUPPORTED qui permet l’équilibrage dynamique RSSv1 pour les VPorts non par défaut (VMQs).
Notes
Les protocoles de couche supérieure supposent que le processeur principal du VPort par défaut peut être déplacé pour les pilotes miniport RSSv2.
Si un adaptateur miniport ne publie pas la fonctionnalité RSSv2, tous les VPorts avec VMQ restent en mode d’étalement statique même si ces VPorts sont demandés pour effectuer une diffusion dynamique. L’OID RSSv1 pour la configuration des paramètres RSS, OID_GEN_RECEIVE_SCALE_PARAMETERS, est utilisé pour ces VPorts qui sont toujours en mode d’étalement statique.
Les pilotes miniport n’ont besoin d’implémenter qu’un seul mécanisme de contrôle RSS : RSSv1 ou RSSv2. Si le pilote annonce la prise en charge de RSSv2, NDIS convertit les OID RSSv1 en OID RSSv2 si nécessaire pour configurer la propagation par VPort. Le pilote miniport doit prendre en charge les deux nouveaux OID et modifier le comportement du RSSv1 OID_GEN_RECEIVE_SCALE_PARAMETERS OID comme suit :
- OID_GEN_RECEIVE_SCALE_PARAMETERS est utilisé uniquement pour les requêtes dans RSSv2 et non pour définir des paramètres RSS.
- OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 est une requête et un ensemble d’OID utilisés pour configurer les paramètres de l’entité de mise à l’échelle, tels que le nombre de files d’attente, le nombre d’EIT, l’activation/désactivation RSS et les mises à jour des clés de hachage.
- OID_GEN_RSS_SET_INDIRECTION_TABLE_ENTRIES est un OID de méthode utilisé pour effectuer la modification des entrées de table d’indirection.
Gestion des OID RSSv2
OID_GEN_RECEIVE_SCALE_PARAMETERS est utilisé uniquement pour interroger les paramètres RSS actuels d’une entité de mise à l’échelle donnée. Dans RSSv1, cet OID est utilisé pour définir des paramètres. Pour les pilotes miniport compatibles RSSv2, NDIS effectue automatiquement cette conversion de rôle pour le pilote et émet les deux OID suivants pour définir les paramètres à la place.
OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 est un OID standard et est géré de la même façon que l’OID OID_GEN_RECEIVE_SCALE_PARAMETERS a été géré dans RSSv1. Cet OID n’est pas visible pour les pilotes de filtre léger (LWFs) NDIS antérieurs à NDIS 6.80.
OID_GEN_RSS_SET_INDIRECTION_TABLE_ENTRIES, cependant, est un OID synchrone qui ne peut pas retourner NDIS_STATUS_PENDING. Cet OID doit être exécuté et terminé dans le contexte du processeur à l’origine de l’OID. Comme OID_GEN_RECEIVE_SCALE_PARAMETERS_V2, il n’est pas non plus visible pour les LWFs NDIS antérieurs à NDIS 6.80. Les LWFs dans NDIS 6.80 et versions ultérieures ne sont pas autorisés à retarder cet OID ou à passer à un autre processeur. Sa charge utile contient un tableau d’actions « déplacer l’ITE » simples, chacune contenant une commande permettant de déplacer un seul ITE pour une entité de mise à l’échelle vers une autre uc cible. Les éléments du tableau peuvent référencer différentes entités de mise à l’échelle (VPorts).
Chaque type de pilote NDIS, miniport, filtre et protocole a des points d’entrée pour prendre en charge l’interface de requête OID synchrone :
Type de pilote NDIS | Gestionnaire(s) OID synchrones | Fonction à l’origine des OID synchrones |
---|---|---|
Miniport | MiniportSynchronousOidRequest | N/A |
Filtrer | NdisFSynchronousOidRequest | |
Protocol | N/A | NdisSynchronousOidRequest |
Transitions d’état RSS, mises à jour ITE et processeurs principaux/par défaut
Paramètres de direction
Dans RSSv2, différents paramètres sont utilisés pour diriger le trafic vers le processeur approprié en fonction de l’état RSS (activé ou désactivé). Lorsque RSS est désactivé, seul le processeur principal est utilisé pour diriger le trafic. Lorsque RSS est activé, le processeur par défaut et tous les ITE sont utilisés pour diriger le trafic. Ces paramètres de direction sont étiquetés comme « actifs » ou « inactifs », résumés dans le tableau suivant :
Paramètre de direction | RSS désactivé | RSS activé |
---|---|---|
Processeur principal | Actif | Inactif |
Processeur par défaut | Inactif | Actif |
ITE[0..N] | Inactif | Actif |
Lorsqu’un paramètre de direction est à l’état actif , il dirige le trafic. À partir du moment où une transition d’état RSS rend un paramètre inactif, les pilotes miniport doivent suivre les modifications apportées au paramètre jusqu’à ce que la transition inverse l’active à nouveau. Cela signifie qu’un pilote miniport doit suivre toutes les mises à jour des entrées de processeur et de table d’indirection par défaut, tandis que RSS est désactivé pour cette entité de mise à l’échelle. Lorsque RSS est activé, l’état suivi actuel du processeur par défaut et de la table d’indirection doit prendre effet.
Par exemple, considérez le scénario où le logiciel vRSS est déjà activé. Dans ce cas, la table d’indirection existe déjà dans le protocole de couche supérieure et est activement utilisée par le code de diffusion logicielle de la couche supérieure. Si, pendant l’activation du flux RSS matériel, toutes les entrées commencent à pointer vers le processeur principal avant que les mises à jour pour déplacer les entrées de table d’indirection soient émises et exécutées par le matériel, le processeur principal peut rencontrer un court blocage. Si le pilote miniport a suivi le processeur par défaut et les informations ITE, il peut diriger le trafic là où il est déjà attendu par la couche supérieure.
Notez que si les pilotes miniport doivent suivre toutes les mises à jour des paramètres de direction inactifs, ils doivent différer la validation de ces paramètres jusqu’à ce que le changement d’état RSS tente de rendre ces paramètres actifs. Par exemple, dans le cas d’une propagation logicielle alors que le flux RSS matériel est désactivé, les protocoles de couche supérieure peuvent utiliser n’importe quel processeur pour la propagation (y compris en dehors du jeu RSS de l’adaptateur). Les couches supérieures garantissent qu’au moment de la transition de l’état RSS, tous les paramètres inactifs sont valides pour le nouvel état RSS. Toutefois, le miniporteur doit toujours valider les paramètres et échouer la transition d’état RSS s’il découvre que tous les paramètres de direction inactifs suivis ne sont pas valides.
État initial et mises à jour des paramètres de direction
Le tableau suivant décrit l’état initial de l’entité de mise à l’échelle après la création (par exemple, après la création de VPort), ainsi que la façon dont les paramètres peuvent être mis à jour :
Paramètre | Description |
---|---|
Processeur principal |
|
Processeur par défaut |
|
Table d’indirection |
|
Mises à jour aux ITE et aux processeurs principaux/par défaut (à l’aide de OID_GEN_RSS_SET_INDIRECTION_TABLE_ENTRIES) est appelé à partir du processeur vers lequel pointe actuellement l’entrée correspondante. Pour un VPort donné, la couche supérieure garantit qu’aucun OID_GEN_RSS_SET_INDIRECTION_TABLE_ENTRIES OID pour déplacer des ITE ou définir les processeurs principaux/par défaut ne sera émis dans les circonstances suivantes :
- Pendant OID_GEN_RECEIVE_SCALE_PARAMETERS_V2 est en cours.
- Une fois la séquence de suppression VPort lancée. Par exemple, la couche supérieure émet l’OID de filtre défini uniquement une fois que le dernier OID pour déplacer les ITE est terminé.
Désactivation RSS
Pendant la désactivation RSS, le protocole de couche supérieure peut choisir de pointer tous les ITE vers le processeur principal, puis d’émettre l’OID pour désactiver RSS, ou il peut choisir de laisser la table d’indirection telle quelle et de désactiver RSS. Dans les deux cas, le trafic de réception doit cibler le processeur principal.
RSSv2 maintient une exigence de RSSv1 qui permet au protocole de couche supérieure de supprimer un VPort sans désactiver d’abord RSS. La couche supérieure peut définir le filtre de réception sur le VPort sur zéro, garantissant ainsi qu’aucun trafic de réception ne transite par le VPort, puis procéder à la suppression de VPort sans désactiver RSS. La couche supérieure garantit qu’aucun OID_GEN_RSS_SET_INDIRECTION_TABLE_ENTRIES OID ne sera émis pendant ou après la suppression de VPort.
Lors de la désactivation RSS et de la suppression de VPort, le pilote miniport doit prendre en charge toutes les opérations internes en attente qui peuvent exister en raison de déplacements de file d’attente précédents.
Invariants RSSv2
Le protocole de couche supérieure garantit que les invariants importants ne sont pas violés avant d’effectuer des fonctions de gestion ou des déplacements ITE. Par exemple :
- Avant de réduire le nombre de files d’attente, la couche supérieure garantit que la table d’indirection ne référence pas plus de processeurs que le nouveau nombre de files d’attente pour un VPort.
- La couche supérieure ne doit pas demander une mise à jour de table d’indirection qui enfreint le nombre de files d’attente actuellement configuré pour un VPort. Le pilote miniport doit l’appliquer et retourner un échec.
- Avant de modifier le nombre d’entrées de table d’indirection pour les adaptateurs VMMQ-RESTRICTED, la couche supérieure garantit que le contenu de la table d’indirection est normalisé à la puissance de 2.
Liens connexes
OID_GEN_RECEIVE_SCALE_PARAMETERS_V2
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour