即使没有用户进程在运行,内核进程难道不会保持 CPU 足够活跃,以防止它进入更深的 C 状态,如 C1 或 C2?
答案1
操作系统内核可以将 CPU(或单个核心)置于“深度”C 状态。
您认为处理器在“检测到”不活动时会“进入休眠状态”。但事实并非如此。操作系统调度程序根据系统空闲循环中检测系统不活动所花费的时间来确定系统空闲百分比。CPU 本身(至少在 x86 领域)不知道自己在执行“什么”,也没有上下文来自行“检测”空闲周期。
系统固件包含 ACPI 表,用于定义硬件的电源管理功能。操作系统在启动时会读取这些表。操作系统内核处理器驱动程序(或与给定操作系统的驱动程序类似的驱动程序)负责监控 CPU 工作负载并指示硬件将 CPU 置于从固件 ACPI 表中选择的电源管理状态。
微软有一篇文章描述Windows 7 和 Server 2008 R2 中的电源管理IBM 有一篇关于Linux 中的 CPUfreq 系统。
编辑:
值得指出的是,许多服务器计算机都具有基于硬件的板载机制来监控和管理 CPU 状态。这也不是“在 CPU 中”完成的,而是取代了操作系统电源和性能管理功能。根据我的经验,这通常会节省电量,但会以牺牲系统性能为代价。