【问题标题】:How does idle(halt) state different then sleep state in Processor states?处理器状态中的空闲(暂停)状态与睡眠状态有何不同?
【发布时间】:2017-11-11 03:05:21
【问题描述】:

因为有 4 个处理器状态 C0-C4。但我没有得到空闲状态和睡眠状态之间的区别?

  • 空闲状态会保持缓存一致吗?
  • 睡眠状态会保持缓存一致吗?
  • 什么是停止时钟?

我在问所有这些与 linux 内核中的节能相关的问题?

【问题讨论】:

    标签: linux-kernel kernel cpu power-saving


    【解决方案1】:

    我对您问题的 Linux 方面一无所知,我可以添加的唯一有价值的信息直接来自 ACPI 5.0 specification

    ACPI 定义了 n 个可能的处理器电源管理状态:C0、C1、C2、C3、... Cn。
    它们不限于四个状态,但前四个 (C0 - C3) 定义了所有可能的语义(进入给定 Cx 状态意味着什么) - 扩展状态 (C4 - Cn) 可以具有不同的进入/退出延迟和节能,但它们必须重用 C0 - C3 语义之一。

    8.1.5 其他处理器电源状态
    从 ACPI 2.0 开始,ACPI 引入了 C3 之外的可选处理器电源状态。
    [...]
    这些额外的电源状态的特点是等效的操作语义 C1 到 C3 电源状态,如前几节中所定义,但具有不同的进入/退出延迟和节能。

    睡眠与活动

    每个 C0 - C3 状态都可以是 ActiveSleeping 类型。
    活动类型状态是 CPU 保持执行指令的状态,相反,睡眠类型状态是不执行指令的状态。

    不要把这里的Sleeping这个词和Sleeping state中的同一个词搞混了——前者表示一个CPU状态的类型,后者表示一个Sx状态(影响整个系统的状态)。

    全局和系统状态

    CPU C0 - C3 状态仅在 G0/S0 状态下定义。
    这意味着整个系统必须通电并处于活动状态。
    查看 ACPI 规范以获取这些状态的完整描述。

    Sx 状态称为睡眠状态

    C0

    类型:活动
    存在:强制
    软件可见效果:无
    缓存要求:保留、一致性
    需要额外的 CPU 硬件支持:否

    当处于这种状态时,CPU 执行指令。
    OSPM(OS 电源管理器)可以通过占空比循环其时钟来限制 CPU。
    IA(英特尔架构,x86 和 x86-64)有许多节流机制,包括一个名为 STPCLK# 的引脚,用于调节运行频率并进入 Px 状态(性能状态)。

    C1

    类型:睡眠
    存在:强制
    软件可见效果:无
    缓存要求:保留、一致性
    需要额外的 CPU 硬件支持:否

    规范要求指令必须可用于进入此状态(例如,hlt 用于 IA)并且延迟必须可以忽略不计。

    CPU 可以出于任何原因退出此状态,但它必须始终在中断时退出此状态。

    C2

    类型:睡眠
    存在:可选
    软件可见效果:无
    缓存要求:保留、一致性
    需要额外的 CPU 硬件支持:芯片组

    此状态比 C1 具有更高的延迟和省电。

    CPU 可以出于任何原因退出此状态,但它必须始终在中断时退出此状态。

    C3

    类型:睡眠
    存在:可选
    软件可见效果:是
    缓存要求:保留
    需要额外的 CPU 硬件支持:芯片组

    此状态比 C2 具有更高的延迟和省电。

    CPU 可以出于任何原因退出此状态,但它必须始终在中断或另一个代理尝试驱动总线写入内存时退出此状态(后者仅在 OSPM 启用时)。

    退出的特殊原因是由于没有保留缓存一致性,操作系统可以通过使所有缓存无效或在总线主机即将访问内存时唤醒 CPU 来解决这个问题(从而重新为休眠的处理器启用缓存一致性)。


    术语

    C1 - Cn 状态被称为空闲状态,因为它们在操作系统空闲时使用。
    C0 是活动状态,在此状态下可以实现 m 性能状态,称为 P0 - Pm。
    这些是与 CPU 相关的状态 - 空闲状态指的是 CPU 状态。

    整个系统可以处于睡眠状态 S0 - S5 之一。
    这些状态被分组为更接近用户体验的 Gx 全局状态
    这些是系统状态 - 睡眠状态指的是整个系统。

    停止时钟

    在阅读“停止时钟”作品时,我唯一能想到的就是STPCLK# 引脚,它是随 486DX 引入的,用于进入 C2 状态或调制 C0 状态。
    断言后,在芯片组的帮助下,CPU 将停止其大部分内部单元 - 不是全部,而是不止一次使用 hlt(进入 C1 状态)。

    【讨论】:

      猜你喜欢
      • 2014-06-30
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      相关资源
      最近更新 更多