CPU 与调度60 条

intel_pstate 驱动与 EPP

Intel 平台默认使用 intel_pstate(active 模式),governor 退化为 performance/powersave 两档,功耗与延迟平衡由 EPP 偏好控制。

驱动是什么

intel_pstate 是 Intel 平台上的 CPU 调频驱动,取代通用层的 acpi-cpufreq。在支持 HWP(Hardware P-state)的处理器上它默认以 active 模式工作:内核只向处理器传递性能偏好,实际频点由硬件自主决定,因此 governor 被简化为 performance 与 powersave 两档,更细的功耗/延迟权衡交给 EPP(energy_performance_preference)档位。被动模式下才回退到 ondemand、conservative 这类传统策略。

基本信息

适用平台Intel x86_64 服务器/桌面,内核自带驱动
确认驱动cpupower frequency-info 的 driver 行
模式文件/sys/devices/system/cpu/intel_pstate/status(active / passive)
active 下 governor仅有 performance 与 powersave 两档
EPP 档位performance、balance_performance、default、balance_power、power
EPP 设置位置/sys/devices/system/cpu/cpu<N>/cpufreq/energy_performance_preference(逐核)

典型使用场景

  • 延迟敏感服务:把 EPP 调向 performance,降低频率爬升延迟带来的尾延迟波动
  • 功耗或温度受限的机房/边缘设备:调向 balance_power/power,控制封装功耗与风扇转速
  • 验证是否达到标称频率:与 turbostat 配合看实测 Bzy_MHz 与标称 TSC_MHz 的差距
  • 排查老教程失效:active 模式下找不到 ondemand governor,需要改用 EPP 口径调优
  • 虚机环境确认:guest 通常没有 HWP,调频接口行为与裸机不同

查看与调整

查看与调整
cpupower frequency-info  # 看 driver、governor 与可用频率范围
cat /sys/devices/system/cpu/intel_pstate/status  # active 表示 HWP 接管
cat /sys/devices/system/cpu/intel_pstate/no_turbo  # 1 表示已禁用睿频
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor  # active 下通常只有 performance/powersave
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference  # 全核设性能偏好
cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference  # 复核写入结果
sudo turbostat --interval 2 --show CPU,Busy%,Bzy_MHz,PkgWatt  # 用实测频率验证是否生效

EPP 档位对照

档位倾向适用场景
performance尽可能拉高频率延迟敏感,接受更高功耗与温度
balance_performance偏性能多数在线业务默认选择
default由固件/平台决定不确定时的稳妥起点
balance_power偏省电负载不重、关注能耗
power最低功耗优先功耗受限,可接受更长响应时间
active 模式下不存在 ondemand 与 conservative,照搬旧的 governor 教程会「找不到文件」。要调优先确认 status 文件内容,再选对应接口:active 用 EPP,passive 才用传统 governor。
EPP 与 governor 的 sysfs 写入通常是运行期生效,重启或固件更新后可能恢复默认,需要固化时用 systemd 服务、tmpfiles 规则或 cpupower 的配置机制统一设置。

易错点

  • 把 EPP 一律设成 performance:功耗与温度上升,风冷受限或虚拟化平台上可能触发降频,实测性能反而下降
  • 在虚拟机里照抄裸机的调频操作:guest 往往没有 HWP,文件不存在或读到的是透传值,调整不产生实际效果
  • 顺手把 no_turbo 设为 1 后忘记改回:睿频被禁用,压测结果被误读为性能退化,排查方向会跑偏到内核或应用
  • 用 shell 通配符批量写 sysfs 时未确认权限与展开结果:需要 root(sudo tee),且某些平台只支持部分核可写
  • 只改 governor 不看 EPP:active 模式下两档 governor 对实际频率影响有限,真正的差异来自 EPP 档位

数据来源与参考

  • Linux 内核 Documentation/admin-guide/pm/intel_pstate.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌