首页/系统/Linux 内核与性能调优速查/turbostat 频率与 C-state 观测
CPU 与调度60 条

turbostat 频率与 C-state 观测

turbostat 直接读取 MSR 输出每核实际频率、C-state 驻留与功耗估算,是验证调频/降频是否生效的量化工具。

工具是什么

turbostat 是内核 tools/power 下随发行版打包的 x86 观测工具,直接读取处理器的 MSR 寄存器,输出每核的实测平均频率(Bzy_MHz)、忙碌比例、C-state 驻留占比与封装功耗估算。相比 top 的百分比,它能回答「频率到底跑到多少」「是否真的进了深睡」「功耗墙是否限制了睿频」这类调频相关问题,需要在裸机或 MSR 可读的环境里以 root 运行。

基本信息

安装包Ubuntu/Debian:linux-tools-$(uname -r);RHEL/CentOS:kernel-tools
权限要求root(需访问 MSR 设备)
基本用法turbostat --interval <秒>,可持续输出
常用选项--show/-s 选列、--cpu 选处理器、--quiet 精简表头
可测对象可接在「-- 命令」后边跑负载边采样
不可用场景多数虚拟机读不到 MSR,直接报错或无有效数据

典型使用场景

  • 验证调频策略:改了 EPP 或 governor 后确认实测频率确实变化
  • 判断是否被功耗/温度墙限制:Bzy_MHz 长期明显低于标称 TSC_MHz
  • 评估省电效果:观察空闲时是否真的进入较深的 C-state
  • 定位「一跑就热」:结合 PkgWatt 看功耗与负载是否匹配
  • 容量核算:获得不同负载下的真实运行频率,用于估算单核性能
  • 做基准测试时同步采样,避免只看应用侧自报的吞吐数字

采样示例

采样示例
sudo turbostat --interval 5  # 每 5 秒输出一次全机状态,Ctrl-C 结束
sudo turbostat --quiet --interval 2 --cpu 0-3  # 只看 CPU0-3,减少输出量
sudo turbostat --show CPU,Busy%,Bzy_MHz,TSC_MHz,PkgWatt --interval 1  # 只保留关心的列
sudo turbostat --interval 5 -- ./bench.sh  # 边跑基准边采样,退出后给出汇总
cat /sys/devices/system/cpu/intel_pstate/no_turbo  # 对照确认睿频是否被关掉
lscpu | grep -E 'Model name|MHz'  # 拿标称频率做参照

输出逐列读法

列含义判读要点
CPU逻辑处理器编号结合 --cpu 收窄范围便于阅读
Busy%该 CPU 非空闲时间占比可用来确认负载是否压在预期的核上
Bzy_MHz采样窗口内的实际平均频率显著低于 TSC_MHz 说明未跑满或受限
TSC_MHz标称基准频率作为归一化参照,不要与实测频率混用
PkgWatt封装功耗估算与负载同步变化才符合预期
C1/C3/C6%各级空闲状态驻留比例需用 --show 指定,深睡占比低说明唤醒频繁
读数高度依赖采样窗口:窗口太短会被瞬时波动主导,建议在稳定负载下至少采样数秒到数十秒;同时报告的列会随平台不同而增减,脚本按固定列序解析很容易失效。
turbostat 自身采样有一定开销,长时间高频采样会影响被观测负载的尾延迟。做性能对比时保持「前后两次测量使用同样的采样参数」,避免把观测开销算进结论。

易错点

  • 在虚拟机里直接使用:MSR 通常不可读,命令报错或给出无意义数值,应在宿主机测量或确认平台是否支持 MSR 透传
  • 非 root 运行:无法打开 MSR,报权限错误,看起来像工具不可用
  • 采样窗口过短就下结论:频率与忙碌度是窗口均值,1 秒级窗口在抖动负载下几乎不可解释
  • 把 Bzy_MHz 与 TSC_MHz 混为一谈:前者是实测性能频率,后者是标称基准,用它做性能换算会得出错误结论
  • 忽略 no_turbo 状态就分析频率:睿频被禁用时频率上不去,问题在配置而不是硬件或负载

数据来源与参考

  • Linux 内核 tools/power/x86/turbostat 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌