8.4.3. 处理器层次结构
对于计算平台而言,拥有大量共享公共资源(例如缓存)并且具有会影响处理器组的公共电源状态的处理器是非常典型的。这些处理器以分层方式进行组织。例如,一个系统可能包含一组 NUMA 节点,每个节点具有若干插槽,这些插槽可能包含多个处理器组,而每个处理器组又可能包含单独的处理器核心,每个核心还可能包含多个硬件线程。不同的体系结构使用不同的术语来表示逻辑关联的处理器,但 package、cluster、module 和 socket 等术语是典型示例。ACPI 使用术语处理器容器来描述一组关联的处理器。如果处理器以某种方式相关联,例如共享缓存或影响它们全部的低功耗模式,则称这些处理器属于某个容器。

图 8.6 处理器层次结构
上图描述了一个示例系统,它由一个系统级处理器容器组成,该容器又包含两个 cluster 处理器容器,而每个 cluster 处理器容器又包含两个处理器。整个集合称为处理器层次结构,并使用标准树术语来指代其不同部分。例如,单个处理器或容器称为节点,驻留在处理器容器内的节点称为该父节点的子节点,等等。此示例是对称的,但这并不是要求。例如,一个系统可以在不同容器中包含不同数量的处理器,或者具有非对称层次结构,其中拓扑树的一侧比另一侧更深。还要注意,虽然此示例包含一个涵盖所有处理器的单一顶层处理器容器,但这并不是要求。允许使用树的集合来描述一个系统。(见下方注释)
注释
处理器层次结构可用于描述系统拓扑的若干不同特性。主要示例是共享电源状态,详见“更低功耗空闲状态”中的低功耗空闲状态。
8.4.3.1. 处理器容器设备
这个可选设备是一个容器对象,其行为很像命名空间中的总线节点。它可以包含子对象,这些子对象可以是处理器设备,也可以是其他处理器容器。这允许表示分层的处理器拓扑。层次结构中的每个处理器容器或处理器在本文中均称为节点。处理器容器设备使用硬件标识符 (_HID) ACPI0010 进行声明。
为了帮助支持那些不解析处理器容器的操作系统,容器可以携带值为 PNP0A05 的兼容 ID (_CID),其表示通用容器设备(参见设备类特定对象)
处理器容器声明必须提供一个 _UID 方法,返回一个在处理器容器层次结构中唯一的 ID。处理器容器必须在其作用域内包含其他处理器容器或其他处理器设备声明。此外,处理器容器还可以在其作用域内包含以下方法:
表 8.4 处理器容器设备对象
| 对象 | 描述 |
|---|---|
| _LPI | 为处理器容器所表示的层次结构节点声明本地电源状态 |
| _RDI | 声明影响系统级电源状态的电源资源依赖关系 |
| _STA | 确定处理器容器的状态。参见设备类特定对象。 |
_LPI 可以出现在处理器设备下,并在 _LPI(低功耗空闲状态) 中进行描述。RDI 只能出现在单个顶层处理器容器对象下,并在下文中描述。
ACPI 允许定义多个根级处理器容器。换言之,可以定义多个顶层容器。例如,在 NUMA 系统中,如果在系统级别没有需要封装的空闲状态或其他对象,则可以在层次结构的顶层定义多个 NUMA-node 级处理器容器。
处理器容器设备对象仅对符合 ACPI 6.0 或更高版本的实现有效。平台可以通过 _OSC 方法确定操作系统是否支持解析处理器容器对象(参见平台范围的 OSPM 能力)。