本文第一章节主要内容转载自:linux cpu 运行模式
CPU动态节能技术用于降低服务器功耗,通过选择系统空闲状态不同的电源管理策略,可以实现不同程度降低服务器功耗,更低的功耗策略意味着CPU唤醒更慢对性能 影响更大。
对于对时延和性能要求高的应用,建议关闭CPU的动态调节功能,禁止 CPU休眠,并把CPU频率固定到最高。
类型
通常建议在服务器BIOS中修改电源管理为Performance,如果发现CPU模式为conservative或者powersave,可以使用cpupower设置CPU Performance模式,效果也是相当显著的。
几种模式如下:
performance: 顾名思义只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。userspace:最早的cpufreq子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置powersave: 将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种governors 都属于静态governor,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。ondemand: 按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,等执行完毕就立即回到最低频率;ondemand:userspace是内核态的检测,用户态调整,效率低。而ondemand正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的governor。 在 ondemand governor 监测到系统负载超过 up_threshold 所设定的百分比时,说明用户当前需要 CPU 提供更强大的处理能力,因此 ondemand governor 会将CPU设置在最高频率上运行。但是当 ondemand governor 监测到系统负载下降,可以降低 CPU 的运行频率时,到底应该降低到哪个频率呢? ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率,例如 CPU 支持三个可选频率,分别为 1.67GHz、1.33GHz 和 1GHz ,如果 CPU 运行在 1.67GHz 时 ondemand governor 发现可以降低运行频率,那么 1.33GHz 将被选作降频的目标频率。conservative: 与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整,和ondemand的区别在于它会按需分配频率,而不是一味追求最高频率;

图片
常用命令
查看当前的模式
查看所有逻辑CPU
查看所有逻辑CPU当前运行的频率
查看频率信息
调整频率
分析样例
上文给出的内容可能部分已经过时,下面给一个在我的 ArchLinux + Asus Zenbook UX3450x 上的实际运行结果,并附上 Claude 给出的分析报告:
输出
分析报告
概述
该报告基于 cpupower monitor 命令的输出,显示了系统 CPU 的电源管理和性能状态。数据显示一个拥有多核 CPU(22个核心,编号从0到21)的系统,监控了 C-states(CPU 电源状态)、性能指标、功耗数据和空闲统计信息。
主要发现
CPU 利用率
- 整体系统 CPU 大部分处于空闲状态,多数核心的 C0(活跃状态)时间比例较低
- 核心 3 和 13 的活跃度最高,分别为 32.88% 和 33.04% 的 C0 时间
- 核心 11 几乎完全空闲,C0 时间仅为 0.03%
C-states(CPU 电源状态)分布
- 多数核心大量时间处于深度睡眠状态(C6 或 C10)
- 核心 21 在 C6 状态的时间最高,达到 99.51%
- 许多核心在 C10(最深睡眠状态)的时间比例很高,如核心 11 的 C10 时间为 99.92%
CPU 频率
- 平均 CPU 频率在 956MHz 到 3675MHz 之间变化
- 核心 3 运行频率最高,达到 3675MHz
- 核心 20 和 21 频率最低,分别为 956MHz 和 589MHz
详细分析
性能活跃度(C0 状态)
CPU 活跃度(C0 状态)从高到低排序的前五名:
- 核心 13: 33.04%
- 核心 3: 32.88%
- 核心 1: 23.08%
- 核心 5: 20.27%
- 核心 10: 20.15%
电源状态分布
大多数核心在多种空闲状态之间分布:
- C1E 状态:轻度睡眠,节电较少但唤醒快
- C6 状态:深度睡眠,关闭核心电源,节电显著
- C10 状态:最深度睡眠,最大化省电
核心 21 处于 C6 状态的时间高达 99.51%,表明这个核心几乎完全处于深度睡眠状态。
功耗数据
RAPL(运行平均功率限制)数据显示:
- 处理器包(package)功耗:23628906 (单位可能是微瓦)
- 核心功耗:15290855
- 非核心功耗:1354305
核心频率分布
频率最高的核心:
- 核心 3: 3675MHz
- 核心 1: 3295MHz
- 核心 2: 3081MHz
频率最低的核心:
- 核心 21: 589MHz
- 核心 20: 956MHz
结论
这个系统显示典型的现代处理器电源管理行为,大部分核心大多数时间处于低功耗状态。系统工作负载主要集中在少数几个核心上(如核心 3、13),而其他核心则保持在各种节能状态。这种行为对于优化功耗和热量管理非常有利,特别是在轻负载情况下。
核心 21 的极低频率(589MHz)和极高的 C6 占用率(99.51%)可能表明该核心被操作系统识别为效率较低的核心,因此优先使用其他核心进行任务分配,或者系统正在积极管理功耗限制。
References
- linux cpu 运行模式
- https://huataihuang.gitbooks.io/cloud-atlas/os/linux/redhat/system_administration/systemd/cpupower.html
- https://zhuanlan.zhihu.com/p/33753019
- https://wiki.archlinux.org/index.php/CPU_frequency_scaling_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
- https://segmentfault.com/a/1190000017942936
- https://www.houzhibo.com/archives/864