Partager via


KeQueryNodeActiveAffinity, fonction (wdm.h)

La routine KeQueryNodeActiveAffin ity obtient l’affinité de processeur actuelle d’un nœud spécifié dans un système multiprocesseur qui a une architecture d’accès à la mémoire non uniforme (NUMA).

Syntaxe

void KeQueryNodeActiveAffinity(
  [in]            USHORT          NodeNumber,
  [out, optional] PGROUP_AFFINITY Affinity,
  [out, optional] PUSHORT         Count
);

Paramètres

[in] NodeNumber

Numéro de nœud. Si un système multiprocesseur contient n nœuds, les nœuds sont numérotés de 0 à n-1. Pour obtenir le numéro de nœud le plus élevé (n-1) dans le système, appelez la routine KeQueryHighestNodeNumber.

[out, optional] Affinity

Pointeur vers une mémoire tampon allouée par l’appelant dans laquelle la routine écrit une structure GROUP_AFFINITY. Cette structure contient le numéro de groupe du groupe qui contient le nœud identifié par NodeNumberet un masque d’affinité qui indique les processeurs logiques du nœud qui sont actifs. Vous pouvez définir ce paramètre sur NULL si vous n’avez pas besoin de ces informations.

À compter de Windows Server 2022, un nœud peut s’étendre sur plusieurs groupes. Cela se produit lorsqu’un nœud contient plus de 64 processeurs. Dans ce cas, le système d’exploitation affecte un groupe principal pour chaque nœud NUMA. Le groupe principal est toujours celui qui contient le plus de processeurs. Dans ce cas, la structure d’affinité de groupe retournée correspond au groupe principal du nœud. Pour plus d’informations sur ce changement de comportement, consultez prise en charge de NUMA. Si votre code s’exécute sur des systèmes avec plus de 64 processeurs par nœud NUMA, envisagez plutôt d’utiliser KeQueryNodeActiveAffinity2.

[out, optional] Count

Pointeur vers un emplacement dans lequel la routine écrit le nombre de processeurs actifs représentés dans le masque d’affinité de nœud pointé par Affinity . Vous pouvez définir ce paramètre sur NULL si vous n’avez pas besoin de ces informations.

À compter de Windows Server 2022, le nombre retourné correspond au groupe principal du nœud. Consultez plus d’informations sur les groupes principaux ci-dessus.

Valeur de retour

Aucun

Remarques

La mémoire tampon allouée par l’appelant qui est pointée par le paramètre Affinity doit être suffisamment grande pour contenir une structure GROUP_AFFINITY. Le Mask membre de cette structure contient un masque d’affinité qui indique quels processeurs sont actifs. Si un processeur est actif, le bit correspondant dans le masque est un. Tous les autres bits sont zéro.

Dans une architecture multiprocesseur NUMA, un nœud est une collection de processeurs qui partagent un accès rapide à une région de mémoire. L’accès à la mémoire n’est pas uniforme, car un processeur peut accéder à la mémoire dans son nœud plus rapidement qu’il ne peut accéder à la mémoire dans d’autres nœuds.

Le nombre de processeurs d’un nœud ne peut pas dépasser le nombre de bits dans le masque d’affinité dans la structure pointée par affinité. Le masque d’affinité détermine également le nombre maximal de processeurs dans un groupe.

Dans Windows 10, version 2004 et versions antérieures, si, pendant l’initialisation du système, Windows rencontre un nœud matériel NUMA qui contient plus de processeurs logiques que ce qui s’adapte à un groupe, Windows fractionne le nœud en nœuds logiques plus petits et logiques. Chacun de ces nœuds ne dépasse pas la taille maximale du groupe. Le paramètre NodeNumber identifie un nœud logique. Pour obtenir le nombre maximal de processeurs par groupe, appelez la routine KeQueryMaximumProcessorCountEx.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows 7 et versions ultérieures de Windows.
plateforme cible Universel
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL N’importe quel niveau

Voir aussi

KeQueryNodeActiveAffinity2

KeQueryLogicalProcessorRelationship

GROUP_AFFINITY

KeQueryHighestNodeNumber

KeQueryHighestNodeNumber

KeQueryMaximumProcessorCountEx