直接读/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq是最轻量、每核独立、单位明确(kHz)、毫秒级响应的实时频率监控方式,绕过缓存直读硬件,输出如2400000即2.4GHz;需sudo权限,路径缺失则说明cpufreq驱动未加载或核心offline。
这是唯一不依赖额外工具、每核独立、单位明确(kHz)、毫秒级响应的方式。路径里的 cpu* 会匹配所有逻辑核心,比如 cpu0 到 cpu15,每个文件内容就是该核当前真实频率值。
常见错误是只看 cpu0:单条命令 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 容易误判多核负载不均场景;正确做法是批量读取:cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq,或加 watch -n 0.5 实时刷屏观察波动。
2400000 表示 2.4 GHz,800000 表示 0.8 GHzNo such file or directory,先检查该核是否 offline:cat /sys/devices/system/cpu/online;或被 isolcpus 隔离/sys/devices/system/cpu/cpu0/cpufreq/)说明没加载 cpufreq 驱动,查 dmesg | grep -i "cpu.*freq" 确认 intel_cpufreq 或 acpi-cpufreq 是否已启用它绕过内核缓存,直接从 sysfs 接口读取硬件寄存器反馈,比 /proc/cpuinfo 的 cpu MHz 字段更及时——尤其在频率快速切换(如短突发负载后降频)时,后者可能滞后几百毫秒。
但注意:它只返回一个数值,不代表全部核心;默认是“调度主核”或采样核的频率,不是最大/最小值。
sudo,否则报 Permission denied
current frequency: 3.60 GHz (asserted by call to hardware),括号里带 asserted 才算真正硬件反馈No such file or directory,不是命令错,而是底层驱动未就绪,和上面 sysfs 路径缺失是同一原因只有 turbostat 能告诉你某个核心当前频率是否真的超过了 CPU 规格里的基础频率(base frequency),也就是常说的“睿频生效”。它显示的是原始 GHz 值 + Turbo 标志列,不是估算值。
例如:CPU 基频 2.8 GHz,cpuinfo_max_freq 是 4700000(4.7 GHz),但 turbostat 中某核显示 Core MHz 为 4900 且 Turbo 列为 ✓,才说明实际触发了超频。
sudo 运行,否则 MSR 寄存器读取失败,关键字段为空--interval 1 控制刷新,并用 stdbuf -oL 避免管道缓冲延迟lscpu | grep "CPU MHz" 显示的是内核估算的平均频率,不是任一核心的瞬时值。空载时它可能还停在 2.4 GHz,而实际所有核都已降到 800 MHz —— 这个字段只适合做 baseline 参考,比如对比 performance 和 powersave 模式下的整体趋势。
真正有用的静态边界值是:CPU max MHz(硬件支持的最高睿频上限)和 CPU min MHz(节能下可压到的最低值)。但要注意:多插槽系统中,不同物理 CPU 的 max MHz 可能不同,而 lscpu 只报告第一个 socket 的值。
CPU max MHz 显示 unknown,说明内核版本太旧或驱动未加载,此时得靠 cpupower frequency-info 查 hardware limits 段model name 里的频率(如 @ 3.70GHz)是标称基础频率,不含睿频,不能和 scaling_cur_freq 直接比较来判断是否睿频scaling_cur_freq 文件路径是否可用、turbostat 能否读 MSR、甚至 BIOS 是否开了 Turbo Boost,三者缺一都会让“查看动态主频”这件事失效——不是命令输错了,而是底层链路断了。