发布于2026-08-22 阅读(0)
扫一扫,手机访问
想要获取各逻辑核心的实时主频(kHz),直接读取 /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 是唯一靠谱的办法。为啥呢?因为 /proc/cpuinfo 里的 cpu MHz 数据是来自内核缓存的,它有滞后性,而且只显示第一个核心的信息,根本没法体现多核异步调频的实际情况。

直接读 /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 是唯一能拿到每个逻辑核心当前真实主频(单位 kHz)的方法,不需要额外工具,也不依赖缓存。
/proc/cpuinfo 的 cpu MHz它确实会显示每个核心的频率,但这些值是从内核缓存中获取的,可能会有几十到几百毫秒的滞后。在高负载突变或快速降频的情况下(例如容器调度瞬间),cpu MHz 可能会停留在旧值上。更糟糕的是,grep "cpu MHz" /proc/cpuinfo | head -n 1 只会获取第一个核心的信息,这完全掩盖了多核异步调频的事实——在大小核架构下,cpu0 和 cpu8 的频率相差一倍是很常见的。
/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 怎么用这个路径是内核 cpufreq 子系统暴露的实时接口,只要驱动加载成功(acpi-cpufreq、intel_cpufreq 或 amd-pstate),文件就可读,无需 root 权限:
ls /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq,若报 No such file or directory,说明该 CPU 未启用变频(常见于虚拟机、某些 ARM 板,或内核禁用了 CONFIG_CPU_FREQ)cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq,输出是一串数字(单位 kHz),比如 2400000 即 2.4 GHzwatch -n 1 'cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 2>/dev/null | awk '{printf "%.2f GHz", $1/1000000} END{print ""}'',加 2>/dev/null 是为了过滤 offline 核心的报错不是所有环境都能读到这个文件,得先确认底层能力是否就绪:
cat /sys/devices/system/cpu/online,若显示 0-3,6-7,那 cpu4 和 cpu5 就不可用cpufreq 目录不存在?运行 dmesg | grep -i "cpu.*freq",看内核是否加载了频率驱动;没输出通常意味着 BIOS 关闭了 SpeedStep/Turbo 或内核参数加了 intel_idle.max_cstate=1 等抑制项cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor,若为 performance 且 scaling_max_freq 等于 cpuinfo_max_freq,那它就真锁死了真正难搞的不是读数,而是判断「这个数到底信不信」——比如在 Intel 大小核混合架构上,cpu0(P-core)和 cpu16(E-core)的 scaling_cur_freq 单位相同,但功耗墙和温度阈值完全不同,必须分开看,不能取平均。
下一篇:银河麒麟怎么格式化U盘
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9