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 | 任何级别 |