空闲(暂停)状态如何与处理器状态中的睡眠状态不同?

时间:2017-06-09 07:36:55

标签: linux-kernel kernel cpu power-saving

由于有4个处理器状态C0-C4。但我在空闲状态和睡眠状态之间没有区别?

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

我问的所有这些问题都与linux内核中的省电有关吗?

1 个答案:

答案 0 :(得分:0)

我对你的问题的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状态可以是 Active Sleeping 类型。
活动类型状态是CPU保持执行指令的状态,相反,休眠类型状态是指令未执行的状态

不要将 Sleeping 这个词与睡眠状态中的相同词混淆 - 第一个表示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

输入:睡觉
Presence :可选
软件可见效果:无 缓存要求:保留,连贯性 需要额外的CPU硬件支持:芯片组

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

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

C3

输入:睡觉
Presence :可选
软件可见效果:是
缓存要求:保留
需要额外的CPU硬件支持:芯片组

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

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

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

术语

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

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

停止时钟

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