CPU 如何空闲到足以进入更深层次的 C 状态?

kas*_*apa 4 electrical-power cpu-usage

即使没有用户进程在运行,内核进程是否也不会使 CPU 保持足够活跃,以防止它进入更深的 C 状态,如 C1 或 C2 ?

Eva*_*son 8

操作系统内核可以将 CPU(或单个内核)置于“深度”C 状态。

您认为处理器在“检测到”不活动时“使自己进入睡眠状态”。这不是它的工作方式。操作系统调度程序根据在系统空闲循环中检测系统不活动所花费的时间量来确定系统空闲百分比。CPU 本身(至少在 x86 领域)不知道它正在执行的“什么”,也没有上下文来自行“检测”空闲周期。

系统固件包含定义硬件电源管理功能的 ACPI 表。操作系统在启动时读取这些表。操作系统内核处理器驱动程序(或任何与给定操作系统类似的驱动程序)负责监控 CPU 工作负载并指示硬件将 CPU 置于从固件 ACPI 表中选择的电源管理状态。

Microsoft 有一篇文章描述了 Windows 7 和 Server 2008 R2 中的电源管理。IBM 有一篇关于Linux 中CPUfreq 系统的文章(可能已经过时)。

编辑:

值得指出的是,许多服务器计算机都有一个基于硬件的板载机制来监视和管理 CPU 状态。这也不是“在 CPU 中”完成,而是取代操作系统电源和性能管理功能。根据我的经验,这通常会节省电量,但​​会牺牲系统性能。