RSS Configuration

Pour obtenir des informations de configuration RSS, un pilote qui se superpose peut envoyer une requête OID de OID_GEN_RECEIVE_SCALE_CAPABILITIES à un pilote miniport. NDIS fournit également les informations de configuration RSS pour les pilotes de protocole excessivement dans la structure NDIS_BIND_PARAMETERS lors de l’initialisation.

Le pilote qui se superpose choisit une fonction de hachage, un type et une table d’indirection. Pour définir ces options de configuration, le pilote envoie une demande de jeu OID de OID_GEN_RECEIVE_SCALE_PARAMETERS au pilote miniport. Les pilotes trop avancés peuvent également interroger cet OID pour obtenir les paramètres RSS actuels. La mémoire tampon d’informations de l’OID OID_GEN_RECEIVE_SCALE_PARAMETERS contient un pointeur vers une structure de NDIS_RECEIVE_SCALE_PARAMETERS .

Le pilote qui se superpose peut désactiver RSS sur la carte réseau. Dans ce cas, le pilote définit l’indicateur NDIS_RSS_PARAM_FLAG_DISABLE_RSS dans le membre Indicateurs de la structure NDIS_RECEIVE_SCALE_PARAMETERS. Lorsque cet indicateur est défini, le pilote miniport doit ignorer tous les autres indicateurs et paramètres et désactiver RSS sur la carte réseau.

NDIS traite OID_GEN_RECEIVE_SCALE_PARAMETERS avant de le transmettre au pilote miniport et met à jour la mot clé *RSS standardisée de l’adaptateur miniport, si nécessaire. Pour plus d’informations sur l’mot clé *RSS, consultez Mots clés INF standardisés pour RSS.

Après avoir reçu une demande de jeu de OID_GEN_RECEIVE_SCALE_PARAMETERS avec l’indicateur NDIS_RSS_PARAM_FLAG_DISABLE_RSS défini, le pilote miniport doit définir l’état RSS de la carte réseau sur l’état initial de la carte réseau après l’initialisation. Par conséquent, si le pilote miniport reçoit une demande de jeu de OID_GEN_RECEIVE_SCALE_PARAMETERS ultérieure avec l’indicateur de NDIS_RSS_PARAM_FLAG_DISABLE_RSS effacé, tous les paramètres doivent avoir les mêmes valeurs que celles définies après que le pilote de miniport a reçu la OID_GEN_RECEIVE_SCALE_PARAMETERS demande de jeu pour la première fois après l’initialisation de l’adaptateur miniport.

Un pilote trop important peut utiliser l’OID OID_GEN_RECEIVE_HASH pour activer et configurer les calculs de hachage sur les trames reçues sans activer RSS. Les pilotes en sur-ment peuvent également interroger cet OID pour obtenir les paramètres de hachage de réception actuels.

La mémoire tampon d’informations de l’OID OID_GEN_RECEIVE_HASH contient un pointeur vers une structure NDIS_RECEIVE_HASH_PARAMETERS . Pour une demande de jeu, l’OID spécifie les paramètres de hachage que l’adaptateur miniport doit utiliser. Pour une requête, l’OID retourne les paramètres de hachage que l’adaptateur miniport utilise. Cet OID est facultatif pour les pilotes qui prennent en charge RSS.

Note Si le calcul de hachage de réception est activé, NDIS désactive le calcul de hachage de réception avant d’activer RSS. Si RSS est activé, NDIS désactive RSS avant d’activer le calcul de hachage de réception.

Tous les adaptateurs miniports pris en charge par le pilote miniport doivent fournir les mêmes paramètres de configuration de hachage à toutes les liaisons de protocole suivantes. Cet OID inclut également la clé secrète que le pilote miniport ou la carte réseau doivent utiliser pour les calculs de hachage. La clé a une longueur de 320 bits (40 octets) et peut contenir toutes les données choisies par le pilote sur-repose, par exemple, un flux aléatoire d’octets.

Pour rééquilibrer la charge de traitement, le pilote de sur-position peut définir les paramètres RSS et modifier la table d’indirection. Normalement, tous les paramètres sont inchangés, à l’exception de la table d’indirection. Toutefois, une fois RSS initialisé, le pilote de sur-position peut modifier d’autres paramètres d’initialisation RSS. Si nécessaire, le pilote miniport peut réinitialiser le matériel de la carte réseau pour modifier la fonction de hachage, la clé secrète de hachage, le type de hachage, le numéro d’UC de base ou le nombre de bits utilisés pour indexer la table d’indirection.

Note Le pilote qui se superpose peut définir ces paramètres à tout moment. Cela peut entraîner des indications de réception dans le désordre. Les pilotes miniports qui prennent en charge TCP ne sont pas nécessaires pour vider leurs files d’attente de réception dans cette instance.

La figure suivante fournit un exemple de contenu pour deux instances de la table d’indirection.

Diagramme illustrant le contenu de deux instances d’une table d’indirection RSS avec une configuration de quatre processeurs et 64 entrées.

La figure précédente suppose une configuration de quatre processeurs, et le nombre de bits les moins significatifs utilisés à partir de la valeur de hachage est de 6 bits. Par conséquent, la table d’indirection contient 64 entrées.

Dans la figure, le tableau A répertorie les valeurs de la table d’indirection immédiatement après l’initialisation. Plus tard, à mesure que la charge normale du trafic varie, la charge du processeur augmente déséquilibré. Le pilote de surélémentation détecte la condition déséquilibrée et tente de rééquilibrer la charge en définissant une nouvelle table d’indirection. Le tableau B répertorie les nouvelles valeurs de table d’indirection. Dans le tableau B, une partie de la charge du processeur 2 est déplacée vers les processeurs 1 et 3.

Note Lorsque la table d’indirection est modifiée, pendant une courte période (pendant que les files d’attente de descripteur de réception actuelles sont en cours de traitement), les paquets peuvent être traités sur le processeur incorrect. Il s’agit d’une condition temporaire normale.

La taille de la table d’indirection est généralement de deux à huit fois le nombre de processeurs dans le système.

Lorsque le pilote miniport distribue des paquets aux processeurs, s’il y a beaucoup trop de processeurs, l’effort consacré à la distribution de la charge peut devenir prohibitif. Dans ce cas, les pilotes qui se superposent doivent choisir un sous-ensemble de processeurs sur lesquels le traitement des données réseau se produit.

Dans certains cas, le nombre de files d’attente de réception matérielle disponibles peut être inférieur au nombre de processeurs sur le système. Le pilote miniport doit examiner la table d’indirection pour déterminer les nombres de processeurs à associer aux files d’attente matérielles. Si le nombre total de différents numéros d’UC qui apparaissent dans la table d’indirection est supérieur au nombre de files d’attente matérielles que la carte réseau prend en charge, le pilote miniport doit choisir un sous-ensemble des numéros d’UC de la table indirection. Le sous-ensemble est égal en nombre au nombre de files d’attente matérielles. Le pilote miniport a obtenu le paramètre IndirectionTableSize à partir de OID_GEN_RECEIVE_SCALE_PARAMETERS. Le pilote miniport a spécifié la valeur NumberOfReceiveQueues en réponse à OID_GEN_RECEIVE_SCALE_CAPABILITIES.