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
指向一个位置的指针,例程在其中写入由 Affinity 指向的节点关联掩码中表示的活动处理器数。 如果不需要此信息,可以将此参数设置为 NULL 。
从 Windows Server 2022 开始,返回的计数针对节点的主组。 请参阅上面有关主要组的详细信息。
返回值
无
备注
Affinity 参数指向的调用方分配的缓冲区必须足够大,才能包含GROUP_AFFINITY结构。 此结构的 Mask 成员包含一个关联掩码,用于指示哪些处理器处于活动状态。 如果处理器处于活动状态,则掩码中的相应位为 1。 所有其他位均为零。
在 NUMA 多处理器体系结构中,节点是共享对内存区域的快速访问的处理器的集合。 内存访问是不统一的,因为处理器访问其节点中的内存的速度比它访问其他节点中的内存更快。
节点中的处理器数不能超过 Affinity 指向的结构中的相关性掩码中的位数。 关联掩码还确定组中的最大处理器数。
在 Windows 10 版本 2004 及更早版本中,如果在系统初始化期间,Windows 遇到包含的逻辑处理器多于可放入组的 NUMA 硬件节点,则 Windows 会将该节点拆分为较小的逻辑节点。 其中每个节点都不超过最大组大小。 NodeNumber 参数标识逻辑节点。 若要获取每个组的最大处理器数,请调用 KeQueryMaximumProcessorCountEx 例程。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows 7 和更高版本的 Windows 中可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 任何级别 |