ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 8 章

    • 总览
    • 8.1. 处理器电源状态
    • 8.2. 刷新缓存
    • 8.3. 电源、性能和节流状态依赖关系
    • 8.4. 声明处理器
      • 8.4.1. _PDC(处理器驱动程序能力)
      • 8.4.2. 处理器电源状态控制
      • 8.4.3. 处理器层次结构
      • 8.4.4. 更低功耗空闲状态
        • 8.4.4.1. 分层空闲状态
        • 8.4.4.2. 空闲状态协调
        • 8.4.4.3. _LPI(低功耗空闲状态)
        • 8.4.4.4. _RDI(空闲的资源依赖)
        • 8.4.4.5. 兼容性
      • 8.4.5. 处理器节流控制
      • 8.4.6. 处理器性能控制
      • 8.4.7. 协作式处理器性能控制
        • 8.4.7.1. _CPC(连续性能控制)
          • 8.4.7.1.1. 性能能力/阈值
          • 8.4.7.1.2. 性能控制
          • 8.4.7.1.3. 性能反馈
          • 8.4.7.1.4. CPPC 启用寄存器
          • 8.4.7.1.5. 自主选择启用寄存器
          • 8.4.7.1.6. 自主活动窗口寄存器
          • 8.4.7.1.7. 能量性能偏好寄存器
          • 8.4.7.1.8. OSPM 控制策略
          • 8.4.7.1.9. 使用 PCC 寄存器
          • 8.4.7.1.10. 与其他由 ACPI 定义的对象和通知的关系
          • 8.4.7.1.11. _CPC 实现示例
      • 8.4.8. _PPE(平台错误轮询)
    • 8.5. 处理器聚合器设备

8.1. 处理器电源状态

ACPI 将处于 G0 工作状态的系统处理器电源状态定义为以下两者之一:活动执行或睡眠(不执行)- 见下方注释。处理器电源状态包括,并被指定为 C0、C1、C2、C3、…Cn。C0 电源状态是活动电源状态,在该状态下 CPU 执行指令。C1 到 Cn 电源状态是处理器睡眠状态,在这些状态下,处理器消耗的功率和散发的热量都低于将处理器保持在 C0 状态时的水平。当处于睡眠状态时,处理器不执行任何指令。每个处理器睡眠状态都具有与进入和退出相关联的延迟,该延迟与节能效果相对应。通常,进入/退出延迟越长,处于该状态时的节能效果越大。为了节省电力,OSPM 会在处理器空闲时将其置于其所支持的某个睡眠状态。当处于 C0 状态时,ACPI 允许通过定义的“节流”过程以及转换到多个性能状态(性能状态)来改变处理器的性能。下面给出了处理器电源状态图。

注

这些 CPU 状态映射到 G0 工作状态中,并且 Cx 状态仅适用于 G0 状态。在 G3 睡眠状态中,CPU 的状态未定义。

../_images/Processor_Configuration_and_Control-2.png

图 8.1 处理器电源状态

ACPI 按每个 CPU 定义了逻辑,OSPM 使用该逻辑在不同的处理器电源状态之间转换。该逻辑是可选的,并通过 FADT 表和处理器对象(包含在层次命名空间中)进行描述。FADT 表中的字段和标志描述了硬件的对称特性,而处理器对象包含特定 CPU 的时钟逻辑位置(由 P_BLK 寄存器块和 _CST 对象描述)。

P_LVL2 和 P_LVL3 寄存器为将系统处理器置于 C2 或 C3 状态提供可选支持。P_LVL2 寄存器用于将选定处理器按顺序置于 C2 状态,而 P_LVL3 寄存器用于将选定处理器按顺序置于 C3 状态。通过总线主控状态位和仲裁器禁用位(PM1_STS 寄存器中的 BM_STS 和 PM2_CNT 寄存器中的 ARB_DIS)还为 C3 状态提供了附加支持。系统软件读取 P_LVL2 或 P_LVL3 寄存器以进入 C2 或 C3 电源状态。硬件必须在对适当的 P_LVLx 寄存器执行读取操作时,精确地将处理器置于正确的时钟状态。平台也可以另外定义接口,允许 OSPM 使用 _CST 对象进入 C 状态,相关定义见 _CST(C 状态)。

通过 FADT 和 P_BLK 接口呈现时,处理器电源状态支持是对称的;OSPM 假定系统中的所有处理器都支持相同的电源状态。如果处理器的电源状态支持不对称,则平台运行时固件将通过 FADT 表选择并使用系统中所有处理器都支持的最低公共电源状态。例如,如果 CPU0 处理器支持直到并包括 C3 状态在内的所有电源状态,而 CPU1 处理器仅支持 C1 电源状态,则 OSPM 只会将空闲处理器置于 C1 电源状态(CPU0 将永远不会被置于 C2 或 C3 电源状态)。请注意,必须支持 C1 电源状态。C2 和 C3 电源状态是可选的(参见 系统描述表头 中 FADT 表描述里的 PROC_C1 标志)。

以下各节将详细描述处理器电源状态。

8.1.1. 处理器电源状态 C0

当处理器处于 C0 电源状态时,它执行指令。当处于 C0 电源状态时,OSPM 可以生成策略,使处理器以低于最大性能的水平运行。时钟节流机制除了热控制之外,还为 OSPM 提供执行该任务的功能。该机制允许 OSPM 将一个值编程到寄存器中,从而将处理器性能降低到最大性能的某个百分比。

../_images/Processor_Configuration_and_Control-3.png

图 8.2 节流示例

FADT 包含占空比偏移和值宽度值。占空比偏移值决定了 P_CNT 寄存器中占空比值的偏移位置。占空比宽度值决定了占空比值所使用的位数(这决定了节流逻辑的粒度)。通过时钟逻辑得到的处理器性能可以用下列方程表示:

../_images/Processor_Configuration_and_Control-4.png

图 8.3 方程 1 占空比方程

标称性能定义为“尽可能接近,但不低于所指示的性能级别”。OSPM 将使用占空比偏移和占空比宽度来确定如何访问占空比设置字段。然后 OSPM 将根据处理器对象的热条件和期望功率对占空比设置进行编程。OSPM 使用方程 1 中给出的方程计算处理器的标称性能。请注意,占空比设置为零是保留值。例如,时钟逻辑可以使用停止授权周期在 IA 处理器上模拟分频后的处理器时钟频率(通过使用 STPCLK# 信号)。当 LOW 置位时,该信号会在内部停止处理器时钟。为了实现提供八级时钟控制的逻辑,STPCLK# 引脚可以按如下方式置位(以模拟不同的频率设置):

../_images/Processor_Configuration_and_Control-5.png

图 8.4 STPCLK 的示例控制

为了启动节流逻辑,OSPM 设置所需的占空比设置,然后设置 THT_EN 位 HIGH。为了更改占空比设置,OSPM 将首先复位 THT_EN 位 LOW,然后在保持该寄存器其他未使用字段不变的情况下向占空比设置字段写入另一个值,接着再次设置 THT_EN 位 HIGH。

示例逻辑模型如下所示:

../_images/Processor_Configuration_and_Control-6.png

图 8.5 ACPI 时钟逻辑(每个处理器一个)

实现 ACPI 处理器电源状态控制至少要求支持单个 CPU 睡眠状态(C1)。所有 CPU 电源状态都发生在 G0/S0 系统状态中;当系统转换到睡眠状态(S1-S4)时,它们没有意义。ACPI 定义了不同 CPU 状态的属性(语义)(定义了其中四种)。由平台实现来将适当的低功耗 CPU 状态映射到已定义的 ACPI CPU 状态。

ACPI 时钟控制通过可选的处理器寄存器块(P_BLK)提供支持。ACPI 要求系统中的每个 CPU 都有一个唯一的处理器寄存器块。此外,ACPI 要求在使用 P_BLK 和 FADT 接口时,多处理器系统的时钟逻辑是对称的;如果 P0 处理器支持 C1、C2 和 C3 状态,而 P1 只支持 C1 状态,则 OSPM 将限制所有处理器在空闲时进入 C1 状态。

以下各节定义了不同的 ACPI CPU 睡眠状态。

8.1.2. 处理器电源状态 C1

所有处理器都必须支持此电源状态。该状态通过处理器的一条原生指令支持(对于 IA 32 位处理器为 HLT),并假定不需要芯片组提供硬件支持。该状态的硬件延迟必须足够低,以至于 OSPM 在决定是否使用它时不考虑该状态的延迟因素。除了将处理器置于某个电源状态之外,该状态没有其他软件可见的影响。在 C1 电源状态下,处理器能够保持系统缓存的上下文。

硬件可以因任何原因退出该状态,但当中断要呈现给处理器时,必须始终退出该状态。

8.1.3. 处理器电源状态 C2

系统可选择支持此处理器电源状态。如果存在,该状态相比 C1 状态可提供更好的节能效果,并通过对本地处理器使用 P_LVL2 命令寄存器或通过 _CST 对象指示的替代机制进入。该状态的最坏情况硬件延迟在 FADT 中声明,而 OSPM 可以使用此信息来确定何时应使用 C1 状态而不是 C2 状态。除了将处理器置于某个电源状态之外,该状态没有其他软件可见的影响。OSPM 假定 C2 电源状态比 C1 电源状态具有更低的功耗和更高的退出延迟。

C2 电源状态是一个可选的 ACPI 时钟状态,它需要芯片组硬件支持。该时钟逻辑由一个可操纵的接口组成,该接口可使处理器复合体精确地转换到 C2 电源状态。在 C2 电源状态下,假定处理器能够保持其缓存一致性;例如,总线主控和多处理器活动可以进行,而不会破坏缓存上下文。

C2 状态使处理器进入一种围绕多处理器和总线主控系统进行优化的低功耗状态。如果存在总线主控或多处理器活动,OSPM 将使空闲的处理器复合体进入 C2 状态(这将阻止 OSPM 将处理器复合体置于 C3 状态)。处理器复合体在 C2 状态下能够侦听总线主控或多处理器 CPU 对内存的访问。

硬件可以因任何原因退出该状态,但每当中断要呈现给处理器时,必须始终退出该状态。

8.1.4. 处理器电源状态 C3

该处理器电源状态由系统可选支持。如果存在,该状态相比 C1 和 C2 状态可提供更好的节能效果,并且通过对本地处理器使用 P_LVL3 命令寄存器或通过 _CST 对象指示的替代机制进入。该状态的最坏情况硬件延迟在 FADT 中声明,OSPM 可利用该信息来确定何时应使用 C1 或 C2 状态而不是 C3 状态。处于 C3 状态时,处理器的缓存保持其状态,但不要求处理器监听总线主控或多处理器 CPU 对内存的访问。

硬件可以因任何原因退出该状态,但当中断即将提交给处理器时,或者当设置了 BM_RLD 且某个总线主控正在尝试获得对内存的访问时,必须始终退出该状态。

OSPM 负责确保缓存保持一致性。在单处理器环境中,这可以通过使用 PM2_CNT.ARB_DIS 总线主控仲裁禁用寄存器来实现,以确保在 C3 状态期间不会发生总线主控周期。在多处理器环境中,可以在进入 C3 状态之前刷新并使处理器缓存失效,从而使缓存中不再保留任何动态信息。

支持 C3 电源状态有两种机制:

  • 由 OSPM 在进入 C3 状态之前刷新并使缓存失效。

  • 提供硬件机制以阻止主控向内存写入(仅支持单处理器)。

在第一种情况下,OSPM 将在进入 C3 状态之前刷新系统缓存。由于刷新处理器缓存通常具有较大的延迟,OSPM 很可能仅在多处理器平台上为处于空闲状态的处理器支持此功能。缓存刷新通过已定义的 ACPI 机制之一完成(如下文 刷新缓存 所述)。

在仅单处理器的平台上,如果提供了所需的硬件功能(在本节中定义),OSPM 将尝试使平台进入一种模式,以防止在处理器处于 C3 状态时系统总线主控向内存写入。这是通过在进入 C3 电源状态之前禁用总线主控来实现的。当某个总线主控请求访问时,CPU 将从 C3 状态唤醒并重新启用总线主控访问。

OSPM 使用 BM_STS 位来确定在考虑迁移到或从 C2/C3 电源状态迁移时要进入的电源状态。BM_STS 是一个可选位,用于指示总线主控何时处于活动状态。OSPM 使用该位来确定 C2 与 C3 电源状态之间的策略:大量总线主控活动会将 CPU 电源状态降级为 C2(如果不支持 C2,则为 C1);没有总线主控活动则会将 CPU 电源状态提升为 C3 电源状态。OSPM 持续记录 BM_STS 位的历史,以确定 CPU 电源状态策略。

在 C3 电源状态中使用的最后一个硬件特性是 BM_RLD 位。该位决定 Cx 电源状态是否因总线主控请求而退出。如果置位,则在收到总线主控请求时退出 Cx 电源状态。如果复位,则在收到总线主控请求时不会退出该电源状态。在 C3 状态下,总线主控请求需要使 CPU 转换回 C0 状态(因为系统能够维持缓存一致性),但对于 C2 状态则不需要这种转换。OSPM 在使用 C3 电源状态时可以选择设置该位,而在使用 C1 或 C2 电源状态时清除该位。

8.1.5. 附加处理器电源状态

ACPI 从 ACPI 2.0 开始引入了超出 C3 的可选处理器电源状态。这些电源状态,C4… Cn,通过在 _CST(C 状态) 中定义的 _CST 对象传递给 OSPM。这些附加电源状态的操作语义与前几节中定义的 C1 到 C3 电源状态等效,但具有不同的进入/退出延迟和节能效果。更多信息请参见 _CST(C 状态)。

Prev
总览
Next
8.2. 刷新缓存