CPU 与调度60 条

cpufreq 调频调速器

governor 决定 CPU 频率如何随负载变化:performance 恒高频、powersave 最低频、schedutil 由调度器驱动;低延迟场景常固定 performance。

调频调速器

cpufreq 的调速器(governor)决定 CPU 频率如何随负载变化。常见取值有 performance(恒定最高频)、powersave(尽量最低频)、ondemand(按负载快速升频)、conservative(渐进升降)与 schedutil(由调度器的利用率数据驱动,现代内核常用默认)。低延迟场景常固定 performance,避免频率爬升过程带来的响应抖动;省电与散热优先的场景则相反。设置方式是按 CPU 逐个写入 scaling_governor。

基本信息

查询cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
常见取值performance、powersave、ondemand、conservative、schedutil
设置方式逐个写入各 CPU 的 scaling_governor
工具cpupower frequency-info 与 frequency-set
影响因素驱动不同(intel_pstate、acpi-cpufreq)可选调速器也不同

典型使用场景

  • 低延迟服务固定频率,减少频率变化带来的抖动
  • 服务器在省电与性能之间做取舍
  • 虚拟机或云主机确认是否具备调频能力
  • 排查性能突然下滑是否由降频引起
  • 批量统一多台机器的频率策略

查看与固定

查看与固定
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
cpupower frequency-info --governors
cpupower frequency-info | head -20
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
cpupower frequency-set -g performance          # 用工具一次性设置,需要 root
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq   # 实测当前频率

调速器对照

取值行为适用场景
performance尽量固定在最高频延迟敏感、追求确定性
powersave尽量用最低频省电优先、性能其次
ondemand按负载快速升频通用服务器,响应较激进
conservative按负载渐进升降频对频率波动较敏感的业务
schedutil由调度器利用率驱动现代内核常见默认值
虚拟机通常不暴露宿主的调频能力,相关目录可能不存在,写入会报 No such file or directory,属于正常现象。
固件与 BIOS 的电源策略可能覆盖内核设置,改完要用 scaling_cur_freq 实测验证,而不是只看配置文件是否写入成功。

让设置持久化的方式

  • 使用 cpupower 服务在启动时统一设置频率策略
  • 在开机脚本中遍历各 CPU 写入 scaling_governor
  • 通过内核参数指定默认调速器,使设置在内核启动阶段即生效
同一台机器上混用不同策略会让核间频率不一致,性能表现难以复现;建议整机统一设置后再做基准测试。

易错点

  • 在虚拟机里找不到 cpufreq 目录:属正常现象,频率由宿主或云平台控制
  • 改完不做实测:固件策略可能覆盖内核设置,必须看实际频率
  • 只改 cpu0:多核机器要逐 CPU 遍历写入或使用工具一次性设置
  • 随意使用 powersave:可能长期跑在低频,吞吐明显下降
  • 忽略驱动差异:不同驱动提供的调速器列表不同,设置前先看 available 列表

数据来源与参考

  • Linux 内核 Documentation/admin-guide/pm/cpufreq.rst
  • cpupower 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌