Fonction KeQueryNodeActiveAffinity (wdm.h)
La routine KeQueryNodeActiveAffinity obtient l’affinité processeur actuelle d’un nœud spécifié dans un système multiprocesseur doté d’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) du 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 NodeNumber et un masque d’affinité qui indique quels processeurs logiques du nœud 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 à 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 est pour le 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 qui sont 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
None
Remarques
La mémoire tampon allouée à l’appelant pointée par le paramètre Affinity doit être suffisamment grande pour contenir une structure GROUP_AFFINITY . Le membre Mask 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 en 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 d’autres nœuds.
Le nombre de processeurs dans un nœud ne peut pas dépasser le nombre de bits dans le masque d’affinité dans la structure pointée par Affinity. 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 lors de l’initialisation du système, Windows rencontre un nœud matériel NUMA qui contient plus de processeurs logiques qu’un groupe, Windows divise le nœud en nœuds logiques plus petits. 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 .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows 7 et versions ultérieures de Windows. |
Plateforme cible | Universal |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | N’importe quel niveau |