I am trying to understand the the concept of Processor Groups and the supported APIs.
From what I read, in order to get the logical processors information, one needs to use GetLogicalProcessorInformationEx API in order to get a global
view of all logical processors in a system.
From the MS white paper on supporting > 64 processors, the relationship of different "sets" are:
Group >= Numa Node >= Processor(socket) >= Core >= Logical Processor
meaning in a processor group (at most 64 logical processors), there are at least one numa node, which has at least one processor package (socket), which has at least one core, which has at least one logical processor.
By looking at the GetLogicalProcessorInformationEx api,
if the processor relationship is RelationProcessorPackage
it will return a PROCESSOR_RELATIONSHIP structure which, according to MSDN,
"Represents information about affinity within a processor group". So that means each of this structure is bounded to a processor group.
typedef struct _PROCESSOR_RELATIONSHIP {
BYTE Flags;
BYTE EfficiencyClass;
BYTE Reserved[21];
WORD GroupCount;
GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
However, in the remark section, it said:
If the PROCESSOR_RELATIONSHIP structure represents a processor package, the
GroupCount member is 1 only if all processors are in the same processor group. If the package contains more than one NUMA node, the system might assign different NUMA nodes to
different processor groups. In this case, the GroupCount member is the number of groups to which NUMA nodes in the package are assigned.
Does that mean if GroupCount is not 1, the GroupMask can points to multiple process groups? But the original definition from the white paper is
a processor group contains one or more processor packages. How can a single package contains logical processors that span multiple processor groups?
Jackson
***Post moved by the moderator to the appropriate forum category.***