CPU之所以会降频,是governor策略与硬件节能策略共同作用的结果。若想解决,得同步调整cpupower、x86_energy_perf_policy和tuned服务。此外,还得排查温控、供电以及BIOS功耗限制等底层因素才行。

CPU 降频不是“预警”问题,而是 governor 策略 + 硬件节能策略共同作用的结果。CentOS 7 没有“预警降频参数”这个配置项,你真正要调的是 governor 行为和底层能效策略。
为什么 cpupower frequency-set -g performance 有时不生效
执行后仍出现频率跳变或卡在低频,常见原因有:
cpupower只控制内核的scaling_governor,但 Intel CPU 还受x86_energy_perf_policy硬件级策略压制(尤其在 BIOS 启用 “Energy Efficient Turbo” 或 “Intel SpeedStep” 时)- 系统启用了
tuned服务,它会覆盖cpupower设置(例如balanced或powersaveprofile) /etc/sysconfig/cpupower中的CPUPOWER_START_OPTS未启用,或cpupower.service未开机自启- 某些云主机(如阿里云、腾讯云)虚拟化层会屏蔽
msr寄存器访问,导致x86_energy_perf_policy命令报错或无效
怎么确认当前真实 governor 和硬件策略
别只看一个命令结果,要交叉验证:
- 查当前 governor:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor(所有 CPU 核应一致) - 查实际运行频率:
watch -n 1 'cat /proc/cpuinfo | grep -E "processor|MHz"'(注意MHz是瞬时值,非标称主频) - 查硬件能效策略:
x86_energy_perf_policy(若提示 command not found,先yum install kernel-tools) - 查 tuned 当前 profile:
tuned-adm active,若显示balanced或powersave,cpupower设置会被覆盖
彻底禁用降频的组合操作
单改 governor 不够,必须同步处理三层控制:
- 停用
tuned(最常被忽略):systemctl stop tuned && systemctl disable tuned - 设 governor 为
performance:cpupower frequency-set -g performance - 设硬件能效策略为
performance:x86_energy_perf_policy performance(需 root,部分云环境不可用) - 持久化:写入
/etc/sysconfig/cpupower,确保CPUPOWER_START_OPTS="frequency-set -g performance",并启用服务:systemctl enable cpupower
做完后重启 cpupower 服务:systemctl restart cpupower,再验证 scaling_governor 和 cpu MHz 是否稳定在高频段。
哪些场景下 performance 模式依然会降频
即使上述全开,以下情况仍可能触发降频,这不是 bug,是硬件强制保护:
- CPU 温度超过 Tjmax(通常 95–105°C),触发 thermal throttling,
cpupower完全无效 - 电源供电不足(如双路服务器单路断电、笔记本电池模式),硬件直接限制频率
- BIOS 中启用了 “Long Duration Power Limit” 或 “PL1/PL2” 限制,且系统功耗超限
- 容器或 KVM 虚拟机中,宿主机设置了 cgroup v1 的
cpu.rt_runtime_us或 v2 的cpu.max,会截断可用时间片
这种降频不会修改scaling_governor,但/proc/cpuinfo显示的MHz会下降,此时需要查看dmesg | grep -i "thermal|throttling"或turbostat的输出。