cpupower frequency-info --freq才是看「此刻」频率的正确命令,它直接读取内核sysfs接口的实时值,而lscpu显示的是标称频率估算值;需sudo权限,否则报错。

cpupower frequency-info --freq 才是看「此刻」频率的正确命令
用 lscpu 看到的 CPU MHz 是估算均值,不是实时值;它甚至可能在空载时还显示 2.4GHz,而实际已降频到 800MHz。真正反映「现在这毫秒」CPU在跑多快的,只有 cpupower frequency-info --freq ——它直接读 /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq,内核原生接口,无缓存、无延迟。
实操要点:
- 必须加
sudo,否则报Permission denied(权限不足) - 若提示
No such file or directory,说明当前没加载频率驱动,查dmesg | grep -i "cpu.*freq"确认是否加载了intel_cpufreq或acpi-cpufreq - 输出格式如
current frequency: 1.20 GHz (asserted by call to hardware),括号里带asserted表示硬件真实反馈,可信度最高
watch -n 1 'cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq' 最轻量的每核实时监控
不需要装任何包,不依赖用户态工具,直接走 sysfs。每个 scaling_cur_freq 文件单位是 kHz,比如 2400000 就是 2.4GHz,800000 就是 0.8GHz。适合快速验证睿频是否触发、某核是否被锁频、负载不均时各核频率差异。
注意点:
-
cpu*会匹配所有逻辑核(包括超线程),但某些嵌入式或虚拟机环境可能没有cpufreq子目录,先ls /sys/devices/system/cpu/cpu0/cpufreq/确认路径存在 - 如果某核输出为空或报错,常见原因是该核被
isolcpus隔离,或处于 offline 状态(查cat /sys/devices/system/cpu/online) - 别用
watch -n 1 'cpupower frequency-info'——它默认只刷 policy 概览,不显示当前频率,容易误判
cpufreq-info -f 和 cpufreq-info -p 区分不清,就掉坑里了
cpufreq-info -f 显示的是「当前策略下允许的频率范围」(min-max),不是当前运行频率;cpufreq-info -p 显示当前调频策略(governor),比如 ondemand 或 performance,但它不告诉你此刻策略有没有生效、有没有被其他机制覆盖(比如 intel_pstate 在某些内核版本下会绕过 cpufreq 接口)。
典型误用场景:
- 看到
cpufreq-info -f输出1.20 GHz - 4.00 GHz,就以为 CPU 正在 1.2GHz 运行 —— 错,这只是上下限 - 执行
cpufreq-set -g performance后立刻跑cpufreq-info -p确认成功,但忘了检查实际频率是否真升上去了(得配合cpupower或 sysfs 看) - 在启用了
intel_pstate=active的 Intel 平台(较新内核),cpufrequtils工具链可能完全失效,cpufreq-info报No or unknown cpufreq driver is active on this CPU
turbostat 是唯一能看清睿频倍频和功耗联动的工具
当你要确认 CPU 是否真的 Turbo Boost 到 4.7GHz,或者想排查为什么满载时频率卡在 3.2GHz 上不去,turbostat 是唯一能同时给出「当前倍频」「睿频状态」「Package C-state」「温度」和「IA_CORE/IA_PKG 功耗」的工具。它不依赖 governor 设置,直接读 MSR 寄存器。
关键提醒:
- 仅限 Intel 平台(AMD 用
rdmsr+ 手动解析,不推荐日常用) - 需 root 权限,且 BIOS 中必须开启 Turbo Boost 和 Performance Monitoring
- 默认输出字段太多,建议加过滤:
sudo turbostat --interval 1 --show PkgTmp,IRQ,CoreTmp,AVG_MHz,MAX_MHz,IRQ,IPC - 注意
AVG_MHz是过去一秒的平均值,不是瞬时值;要看单次采样波动,得结合watch -n 0.5 'cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq'
最常被忽略的一点:不同内核版本对 cpufreq 和 intel_pstate 的默认启用逻辑完全不同,同一条命令在 Ubuntu 22.04 和 RHEL 9 上行为可能相反。别死记命令,先查 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver 确认底层驱动是什么,再决定用哪套工具链。


















