Поделиться через


Функция 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, возвращается счетчик для основной группы узла. Дополнительные сведения о первичных группах см. выше.

Возвращаемое значение

Никакой

Замечания

Выделенный вызывающим буфером, на который указывает параметр Affinity, должен быть достаточно большим, чтобы содержать структуру GROUP_AFFINITY. Элемент Mask этой структуры содержит маску сходства, указывающую, какие процессоры активны. Если процессор активен, соответствующий бит в маске является одним. Все остальные биты равны нулю.

В многопроцессорной архитектуре NUMA узел представляет собой коллекцию процессоров, которые совместно используют быстрый доступ к области памяти. Доступ к памяти не является универсальным, так как процессор может получить доступ к памяти в узле быстрее, чем он может получить доступ к памяти в других узлах.

Число процессоров в узле не может превышать количество битов в маске сходства в структуре, на которую указывает affinity. Маска сходства также определяет максимальное количество процессоров в группе.

В Windows 10 версии 2004 и более ранних версиях, если во время инициализации системы Windows встречает аппаратный узел NUMA, содержащий более логические процессоры, чем будет помещаться в группу, Windows разбивает узел на меньшие логические узлы. Каждый из этих узлов не превышает максимальный размер группы. Параметр NodeNumber определяет логический узел. Чтобы получить максимальное количество процессоров для каждой группы, вызовите процедуру KeQueryMaximumProcessorCountEx.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows 7 и более поздних версиях Windows.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень

См. также

KeQueryNodeActiveAffinity2

KeQueryLogicalProcessorRelationship

GROUP_AFFINITY

KeQueryHighestNodeNumber

KeQueryHighestNodeNumber

KeQueryMaximumProcessorCountEx