Condividi tramite


Funzione KeQueryNodeActiveAffinity (wdm.h)

La routine KeQueryNodeActiveAffinity ottiene l'affinità del processore corrente di un nodo specificato in un sistema multiprocessore con un'architettura NUMA (Non Uniform Memory Access).

Sintassi

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

Parametri

[in] NodeNumber

Numero del nodo. Se un sistema multiprocessore contiene n nodi, i nodi vengono numerati da 0 a n-1. Per ottenere il numero di nodo più alto (n-1) nel sistema, chiamare la routine KeQueryHighestNodeNumber .

[out, optional] Affinity

Puntatore a un buffer allocato dal chiamante in cui la routine scrive una struttura GROUP_AFFINITY . Questa struttura contiene il numero di gruppo del gruppo che contiene il nodo identificato da NodeNumber e una maschera di affinità che indica quali processori logici nel nodo sono attivi. È possibile impostare questo parametro su NULL se non sono necessarie queste informazioni.

A partire da Windows Server 2022, un nodo può estendersi su più gruppi. Ciò si verifica quando un nodo contiene più di 64 processori. In questo caso, il sistema operativo assegna un gruppo primario per ogni nodo NUMA. Il gruppo primario è sempre quello che contiene la maggior parte dei processori. In questo caso, la struttura di affinità di gruppo restituita è per il gruppo primario del nodo. Per altre info su questa modifica del comportamento, vedi Supporto NUMA. Se il codice viene eseguito in sistemi con più di 64 processori per nodo NUMA, è consigliabile usare invece KeQueryNodeActiveAffinity2.

[out, optional] Count

Puntatore a una posizione in cui la routine scrive il numero di processori attivi rappresentati nella maschera di affinità nodo a cui punta Affinità. È possibile impostare questo parametro su NULL se non sono necessarie queste informazioni.

A partire da Windows Server 2022, il conteggio restituito è per il gruppo primario del nodo. Vedi altre informazioni sui gruppi primari precedenti.

Valore restituito

nessuno

Osservazioni

Il buffer allocato dal chiamante a cui punta il parametro Affinity deve essere sufficientemente grande per contenere una struttura GROUP_AFFINITY . Il membro Mask di questa struttura contiene una maschera di affinità che indica quali processori sono attivi. Se un processore è attivo, il bit corrispondente nella maschera è uno. Tutti gli altri bit sono zero.

In un'architettura multiprocessore NUMA, un nodo è una raccolta di processori che condividono l'accesso rapido a un'area di memoria. L'accesso alla memoria non è uniforme perché un processore può accedere alla memoria nel nodo più velocemente di quanto possa accedere alla memoria in altri nodi.

Il numero di processori in un nodo non può superare il numero di bit nella maschera di affinità nella struttura a cui punta Affinità. La maschera di affinità determina anche il numero massimo di processori in un gruppo.

In Windows 10 versione 2004 e versioni precedenti, se durante l'inizializzazione del sistema, Windows rileva un nodo hardware NUMA che contiene più processori logici rispetto a un gruppo, Windows suddivide il nodo in nodi logici più piccoli. Ognuno di questi nodi non supera le dimensioni massime del gruppo. Il parametro NodeNumber identifica un nodo logico. Per ottenere il numero massimo di processori per gruppo, chiamare la routine KeQueryMaximumProcessorCountEx .

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows 7 e versioni successive di Windows.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Qualsiasi livello

Vedi anche

KeQueryNodeActiveAffinity2

KeQueryLogicalProcessorRelationship

GROUP_AFFINITY

KeQueryHighestNodeNumber

KeQueryHighestNodeNumber

KeQueryMaximumProcessorCountEx