Activation, désactivation et mise à jour de VMMQ sur un VPort
Après avoir créé un VPort, un pilote de couche supérieure peut activer, désactiver ou mettre à jour les paramètres RSS du VPort.
Le pilote peut mettre à jour la table d’indirection RSS du VPort afin de modifier les files d’attente de nombre pour un VPort. Toutefois, le type de hachage RSS, la fonction de hachage et la clé secrète de hachage d’un VPort sont considérés comme des paramètres statiques et ne sont pas modifiés par les pilotes qui se superposent pendant la durée de vie d’un VPort. Si un pilote de couche supérieure souhaite modifier l’un des paramètres statiques RSS, il doit supprimer et recréer le VPort.
Le pilote de couche supérieure active, désactive ou modifie les paramètres RSS d’un VPort en émettant une requête OID OID_GEN_RECEIVE_SCALE_PARAMETERS . Le pilote de couche supérieure définit le champ VPortId de la structure NDIS_OID_REQUEST sur l’ID du VPort cible de la nouvelle configuration.
Le pilote de couche supérieure définit également la structure NDIS_RECEIVE_SCALE_PARAMETERS utilisée dans la requête OID comme suit. Notez qu’en fonction des fonctionnalités VMMQ publiées par l’adaptateur miniport sous-jacent, certains champs peuvent être définis sur la même valeur pour tous les VPort PF.
Définissez le membre Révision de l’en-tête sur NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3.
Définissez l’indicateur NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED pour spécifier que le membre DefaultProcessorNumber n’a pas changé.
Définissez BaseCpuNumber sur zéro.
Définissez DefaultProcessorNumber pour spécifier le processeur RSS par défaut pour ce VPort. Le miniport peut supposer que le processeur par défaut fait partie de la liste des processeurs RSS, mais il ne peut pas supposer que le processeur RSS par défaut se trouve dans la table d’indirection actuelle.
Définissez HashInformation pour indiquer le type de hachage et la fonction de hachage que la carte réseau doit utiliser pour calculer la valeur de hachage des paquets reçus pour ce VPort. Le pilote de couche supérieure peut définir ce champ sur une valeur différente pour chaque VPort.
Définissez IndirectionTableSize pour spécifier la taille de la table d’indirection en octets. Définissez ce champ sur la même valeur pour tous les VPorts PF. Le pilote de couche supérieure doit s’assurer que le nombre d’entrées dans la table d’indirection est une puissance de deux.
Définissez IndirectionTableOffset pour spécifier le décalage de la table indirection à partir du début de la structure NDIS_RECEIVE_SCALE_PARAMETERS .
Définissez HashSecretKeySize pour spécifier la taille de la clé secrète de hachage en octets. Le pilote de couche supérieure peut définir une clé secrète différente pour chaque VPort si l’adaptateur miniport le prend en charge. Pour plus d’informations, consultez Fonctionnalités VMMQ publicitaires.
Définissez HashSecretKeyOffset pour spécifier le décalage de la clé secrète de hachage à partir du début de la structure NDIS_RECEIVE_SCALE_PARAMETERS . Le pilote de couche supérieure peut définir une clé secrète différente pour chaque VPort si l’adaptateur miniport le prend en charge. Pour plus d’informations, consultez Fonctionnalités VMMQ publicitaires.
Définissez ProcessorMaskOffset, NumberOfProcessorMasks et ProcessorMasksEntrySize de manière appropriée.
Lorsqu’un pilote miniport reçoit une demande OID pour désactiver VMMQ pour un VPort, il doit revenir à l’indication de tous les paquets reçus pour ce VPort sur le processeur spécifié par le champ ProcessorAffinity dans la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS utilisée dans la requête OID OID_NIC_SWITCH_CREATE_VPORT .
Modification du nombre de files d’attente pour un VPort
Le nombre de processeurs uniques utilisés dans la table d’indirection d’un VPort ne peut pas dépasser la valeur du champ NumQueuePairs de la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS spécifiée dans la dernière requête OID OID_NIC_SWITCH_CREATE_VPORT émise. Ces processeurs seront un sous-ensemble du jeu de processeurs RSS retourné par un appel à NdisGetRssProcessorInformation. Pour plus d’informations, consultez Allocation de VPorts pour VMMQ. Toutefois, les tables d’indirection sur différents VPorts peuvent contenir le même processeur.
Pour réduire le nombre de files d’attente d’un VPort PF, un pilote de couche supérieure doit :
Envoyez un OID OID_GEN_RECEIVE_SCALE_PARAMETERS avec la taille de table d’indirection d’origine. Toutefois, la table d’indirection à cette étape peut uniquement référencer le nombre de processeurs distincts jusqu’au nouveau nombre de files d’attente. Si la nouvelle table d’indirection doit être plus petite que la table d’origine en raison de l’indicateur NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED de la structure de NDIS_NIC_SWITCH_PARAMETERS , l’émetteur doit garantir que la table d’indirection à cette étape contiendra la nouvelle table d’indirection répliquée autant de fois que nécessaire pour répondre à l’exigence d’indicateur RESTRICTED pour le nombre de files d’attente d’origine.
Envoyez un OID OID_NIC_SWITCH_VPORT_PARAMETERS avec un nouveau nombre de files d’attente.
Envoyez un OID_GEN_RECEIVE_SCALE_PARAMETERS avec la nouvelle taille de table d’indirection si elle a changé.
Pour augmenter le nombre de files d’attente d’un VPort PF, un pilote de couche supérieure doit :
Le pilote n’a pas besoin de mettre à jour la table d’indirection actuelle avant l’étape 2, car la table référence uniquement le nombre de processeurs distincts jusqu’au nombre actuel de files d’attente.
Envoyez un OID OID_NIC_SWITCH_VPORT_PARAMETERS avec un nouveau nombre de files d’attente. Si l’indicateur RESTRICTED est défini, le pilote miniport doit répliquer en interne la table d’indirection d’origine autant de fois que nécessaire pour correspondre à la taille requise de la table d’indirection pour le nouveau nombre de files d’attente.
Envoyez un OID OID_GEN_RECEIVE_SCALE_PARAMETERS avec une nouvelle taille de table d’indirection si elle a changé.