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 成員包含一個相似性遮罩,指出哪些處理器為作用中。 如果處理器為使用中,遮罩中的對應位就是一個。 所有其他位都是零。
在 NUMA 多處理器架構中,節點是可共用記憶體區域快速存取的處理器集合。 記憶體存取不一致,因為處理器可以比存取其他節點中的記憶體更快存取其節點中的記憶體。
節點中的處理器數目不能超過 Affinity 所指向結構中親和性遮罩中的位數目。 同質遮罩也會決定群組中的處理器數目上限。
在 Windows 10 版本 2004 和舊版中,如果在系統初始化期間,Windows 遇到 NUMA 硬體節點,其中包含比放入群組更多的邏輯處理器,Windows 會將節點分割成較小的邏輯節點。 這些節點中的每一個都不會超過群組大小上限。 NodeNumber 參數會識別邏輯節點。 若要取得每個群組的處理器數目上限,請呼叫 KeQueryMaximumProcessorCountEx 例程。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 和更新版本的 Windows。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | 任何層級 |