处理器组

Windows 的 Windows 7 和 Windows Server 2008 R2 及更高版本的 64 位版本支持单台计算机中的 64 多个逻辑处理器。 此功能不适用于 32 位版本的 Windows。

具有多个物理处理器的系统或具有多个内核的物理处理器的系统为操作系统提供了多个逻辑处理器。 从 操作系统 、应用程序或驱动程序的角度来看,逻辑处理器是一个逻辑计算引擎。 核心 一个处理器单元,可以包含一个或多个逻辑处理器。 物理处理器 可以包含一个或多个内核。 物理处理器与处理器包、套接字或 CPU 相同。

对具有 64 多个逻辑处理器的系统的支持基于处理器组 的概念,该处理器组是一组静态的,最多 64 个逻辑处理器被视为单个计划实体。 处理器组编号从 0 开始。 逻辑处理器少于 64 个的系统始终有一个组,即组 0。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持处理器组。

系统启动时,操作系统将创建处理器组,并将逻辑处理器分配给组。 如果系统能够热添加处理器,则操作系统允许系统运行时可能到达的处理器的组空间。 操作系统可最大程度地减少系统中组的数量。 例如,具有 128 个逻辑处理器的系统将具有两个处理器组,每个组中有 64 个处理器,而不是每个组中具有 32 个逻辑处理器的四个组。

为了提高性能,操作系统在向组分配逻辑处理器时考虑物理位置。 如果可能,核心中所有逻辑处理器以及物理处理器中所有内核都分配到同一组。 物理上彼此靠近的物理处理器将分配到同一组。 除非节点的容量超过最大组大小,否则 NUMA 节点将分配给单个组。 有关详细信息,请参阅 NUMA 支持

在处理器少于 64 个的系统上,现有应用程序无需修改即可正常运行。 无论处理器数量如何,不调用任何使用处理器关联掩码或处理器编号的函数的应用程序都将在所有系统上正常运行。 若要在具有 64 多个逻辑处理器的系统上正确运行,可能需要修改以下类型的应用程序:

  • 必须修改管理、维护或显示整个系统每个处理器信息的应用程序,以支持超过 64 个逻辑处理器。 此类应用程序的一个示例是Windows 任务管理器,它显示系统中每个处理器的工作负荷。
  • 对于性能至关重要且可有效缩放到超过 64 个逻辑处理器的应用程序,必须修改这些应用程序才能在此类系统上运行。 例如,数据库应用程序可能会受益于修改。
  • 如果应用程序使用具有每个处理器数据结构的 DLL,并且尚未修改 DLL 以支持超过 64 个逻辑处理器,则必须将应用程序中调用 DLL 导出的函数的所有线程分配到同一组。

默认情况下,应用程序受限于单个组,这应为典型应用程序提供足够的处理能力。 操作系统最初以轮循机制方式将每个进程分配给系统中各个组的单个组。 进程开始执行分配给一个组。 进程的第一个线程最初在进程分配到的组中运行。 每个新创建的线程都分配到与创建它的线程相同的组。

需要使用多个组才能在超过 64 个处理器上运行的应用程序必须显式确定其线程的运行位置,并负责设置线程与所需组的处理器关系。 INHERIT _ PARENT _ AFFINITY标志可用于指定父进程 (该父进程可能不同于当前进程) 生成新进程的关联。 如果进程在单个组中运行,则它可以使用 GetProcessAffinityMaskSetProcessAffinityMask 读取和修改其关联,同时保留在同一组中;如果修改了进程关联,则新关联将应用于其线程。

可以在创建时将 PROC THREAD ATTRIBUTE GROUP _ _ _ _ AFFINITY 扩展属性与 CreateRemoteThreadEx 函数一起指定线程的关联。 创建线程后,可以通过调用 SetThreadAffinityMaskSetThreadGroupAffinity来更改其关联。 如果将线程分配到与进程不同的组,则进程的关联将更新为包含线程的关联,并且该进程将成为多组进程。 必须对单个线程进行进一步的关联更改;不能使用 SetProcessAffinityMask 修改多组进程的关联GetProcessGroupAffinity函数检索进程及其线程分配到的组集。

若要为与作业对象关联的所有进程指定相关性,请对 JobObjectGroupInformationJobObjectGroupInformationEx 信息类使用 SetInformationJobObject函数。

逻辑处理器按组号和组相对处理器编号进行标识。 这由 PROCESSOR NUMBER _ 结构 表示。 旧函数使用的数字处理器编号是组相对的。

有关支持 64 多个处理器的操作系统体系结构更改的讨论,请参阅支持具有 64多个处理器的系统的白皮书。

有关支持处理器组的新函数和结构的列表,请参阅进程和线程 中的新增功能

多个处理器

NUMA 支持