最准的实时频率观测方式是直接读取/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq,单位khz,无缓存、无解析延迟;多核需通配符遍历,注意核是否online及cpufreq子目录是否存在。

直接读 /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 是最准的实时波动观测方式
每个逻辑核心的当前运行频率就藏在这个路径下,单位是 kHz,比如 3200000 就是 3.2 GHz。它不经过内核缓存,也不依赖用户态工具解析,是 sysfs 暴露的原始值。
常见错误是只看一个核:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq。多核系统里各核频率可能完全不同——比如编译时只有 cpu4 在 4.5 GHz,其余都在 800 MHz。正确做法是用通配符一次读全:
-
watch -n 0.5 'cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 2>/dev/null | awk \'{print $1/1000000 " GHz"}\''—— 每半秒刷新,自动转成 GHz 单位 - 若某核输出为空或报
No such file or directory,先检查它是否 online:cat /sys/devices/system/cpu/online;再确认没被isolcpus隔离 - 部分嵌入式或虚拟机环境压根没有
cpufreq子目录,ls /sys/devices/system/cpu/cpu0/确认是否存在该路径
cpupower monitor 是唯一能持续记录每核频率序列的工具
当你要把频率变化导出做分析(比如对齐 perf record 或 thermal 日志),cpupower monitor 输出格式规整、字段对齐,比手动轮询更可靠。
它默认每秒一行,列明每个 cpuX 的当前频率(kHz),例如:
Time cpu0 cpu1 cpu2 cpu3 17:22:01 2400000 800000 3600000 800000
容易踩的坑:
- 必须 root 权限,且内核需启用
CONFIG_X86_ACPI_CPUFREQ或对应驱动(dmesg | grep -i cpufreq可验证) - 输出不含时间戳,如需精确对齐其他指标,得加
stdbuf -oL和date前缀,例如:stdbuf -oL cpupower monitor | while read line; do echo "$(date +'%H:%M:%S') $line"; done - 虚拟机中基本不可用——KVM/Xen 通常屏蔽底层频率寄存器,此时命令会卡住或报错
别拿 lscpu 或 /proc/cpuinfo 的 cpu MHz 当波动依据
lscpu | grep "CPU MHz" 显示的是内核估算的平均频率,不是任一核心的瞬时值;grep "cpu MHz" /proc/cpuinfo 虽然每核都有,但它由内核定时采样缓存提供,有滞后性——尤其在睿频快速切换时,可能还显示上一秒的值。
实操中真正要判断“此刻是不是刚升频”,这两个命令都慢半拍。典型误判场景:
- 刚跑完
stress-ng -c 1 --timeout 2s,/proc/cpuinfo仍显示cpu MHz : 800.000,但scaling_cur_freq已是4200000 -
lscpu的CPU max MHz是静态上限,而实际scaling_max_freq可能因温控或 RAPL 限制被动态压低,需对比两者才知是否被压制 - 多插槽系统中,不同物理 CPU 的
max MHz可能不同,lscpu只报告第一个 socket 的值
用 turbostat --interval 1 看清睿频是否真在跳变
如果你怀疑频率没升上去,或者想确认是不是热节流(thermal throttling)导致回落,turbostat 是唯一能同时看到「忙时频率」Bzy_MHz、「核心实际频率」Core MHz 和「Turbo 标志」的工具。
它直接读 MSR 寄存器,绕过所有中间层:
- 运行
sudo turbostat --interval 1,重点关注Bzy_MHz列——这是负载期间的真实平均频率,比scaling_cur_freq更反映实际吞吐 - 若
Core MHz明显高于Base_MHz(查lscpu得到),且Turbo列显示数字(如2.1),说明睿频倍频已激活 -
Pkg_W功耗突然下降 +GHz列同步回落,大概率是 thermal throttling 触发,不是 governor 没生效 - 注意:AMD 平台支持有限,虚拟机里基本不可用;首次运行前需
sudo modprobe msr,否则报No such file or directory
cpupower monitor 提供结构化日志,turbostat 揭示硬件层细节。三者互补,但不能互相替代——尤其别在调试热节流时只盯着 lscpu。











