KeQueryNodeActiveAffinity 函数 (wdm.h)

KeQueryNodeActiveAffinity 例程获取多处理器系统中具有非统一内存访问(NUMA)体系结构的指定节点的当前处理器关联。

语法

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

参数

[in] NodeNumber

节点号。 如果多处理器系统包含 n 节点,则节点数从 0 到 n-1。 若要获取系统中的最高节点数(n-1),请调用 KeQueryHighestNodeNumber 例程。

[out, optional] Affinity

指向调用方分配的缓冲区的指针,该缓冲区将例程写入 GROUP_AFFINITY 结构。 此结构包含组的组号包含由 NodeNumber标识的节点的组号,以及指示节点中哪些逻辑处理器处于活动状态的关联掩码。 如果不需要此信息,可以将此参数设置为 NULL

从 Windows Server 2022 开始,节点可以跨越多个组。 当节点包含 64 个以上的处理器时,就会发生这种情况。 在这种情况下,OS 为每个 NUMA 节点分配一个主组。 主组始终是包含最多处理器的组。 在这种情况下,返回的组相关性结构适用于节点的主组。 有关此行为更改的详细信息,请参阅 NUMA 支持。 如果代码在每个 NUMA 节点超过 64 个处理器的系统上运行,请考虑改用 KeQueryNodeActiveAffinity2

[out, optional] Count

指向例程写入节点关联掩码中表示的活动处理器数的位置的指针,该掩码由 关联指向。 如果不需要此信息,可以将此参数设置为 NULL

从 Windows Server 2022 开始,返回的计数是节点的主组。 请参阅上面有关主要组的详细信息。

返回值

没有

言论

地缘 参数指向的调用方分配的缓冲区必须足够大,才能包含 GROUP_AFFINITY 结构。 此结构的 掩码 成员包含一个关联掩码,指示哪些处理器处于活动状态。 如果处理器处于活动状态,掩码中的相应位为 1。 所有其他位均为零。

在 NUMA 多处理器体系结构中,节点是一组处理器,可共享对内存区域的快速访问。 内存访问不统一,因为处理器可以比在其他节点中访问内存更快访问其节点中的内存。

节点中的处理器数不能超过 关联所指向的结构中关联掩码中的位数。 关联掩码还确定组中的最大处理器数。

在 Windows 10 版本 2004 和更早版本中,如果在系统初始化期间,Windows 遇到包含比适合组更多的逻辑处理器的 NUMA 硬件节点,Windows 会将节点拆分为更小的逻辑节点。 其中每个节点不超过最大组大小。 NodeNumber 参数标识逻辑节点。 若要获取每个组的最大处理器数,请调用 KeQueryMaximumProcessorCountEx 例程。

要求

要求 价值
最低支持的客户端 在 Windows 7 及更高版本的 Windows 中可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别

另请参阅

KeQueryNodeActiveAffinity2

KeQueryLogicalProcessorRelationship

GROUP_AFFINITY

KeQueryHighestNodeNumber

KeQueryHighestNodeNumber

KeQueryMaximumProcessorCountEx