工具是什么
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 自身采样有一定开销,长时间高频采样会影响被观测负载的尾延迟。做性能对比时保持「前后两次测量使用同样的采样参数」,避免把观测开销算进结论。