3

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

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

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

4

1 回答 1

1

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

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

8.1.5 其他处理器
电源状态 ACPI 从 ACPI 2.0 开始引入了 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 是活动状态,在此状态下可以实现称为 P0 - Pm的m个性能状态。
这些是与 CPU 相关的状态 -空闲状态是指 CPU 状态。

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

停止时钟

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

于 2017-06-09T11:56:23.677 回答