Функция 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 процессоров. В этом случае ОС назначает основную группу для каждого узла NUMA. Основная группа всегда содержит наибольшее количество процессоров. В этом случае возвращается структура сходства групп для основной группы узла. Дополнительные сведения об этом изменении в поведении см. в разделе Поддержка NUMA. Если код выполняется в системах с более чем 64 процессорами на узел NUMA, рассмотрите возможность использования KeQueryNodeActiveAffinity2.
[out, optional] Count
Указатель на расположение, в которое подпрограмма записывает количество активных процессоров, представленных в маске сходства узлов, на которую указывает affinity. Если эти сведения не требуются, для этого параметра можно задать значение NULL .
Начиная с Windows Server 2022, счетчик возвращается для основной группы узла. Дополнительные сведения о первичных группах см. выше.
Возвращаемое значение
None
Remarks
Выделенный вызывающим объектом буфер, на который указывает параметр Affinity , должен быть достаточно большим, чтобы содержать структуру GROUP_AFFINITY . Элемент Mask этой структуры содержит маску сходства, которая указывает, какие процессоры активны. Если процессор активен, соответствующий бит в маске равен одному. Все остальные биты равны нулю.
В многопроцессорной архитектуре NUMA узел — это коллекция процессоров, которые совместно используют быстрый доступ к области памяти. Доступ к памяти является неоднородным, так как процессор может получить доступ к памяти на своем узле быстрее, чем к памяти на других узлах.
Число процессоров в узле не может превышать число битов в маске сходства в структуре, на которую указывает affinity. Маска сходства также определяет максимальное количество процессоров в группе.
В 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 | Любой уровень |