侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

Linux/PVE CPU 调频:intel_pstate、governor 与 cpupower

Linux/PVE 调频应先识别实际驱动,再设置策略。禁用 intel_pstate 是有条件的兼容性测试,不是所有 Intel CPU 的优化前提。

调低峰值频率不一定降低整机总能耗,运行时间、空闲状态、温度和功率限制同样重要。频率数值也不等于实际执行性能。对虚拟化主机,应先记录当前策略和关键业务耗时,再做单项对照。

一、识别驱动与可用接口

在宿主机查看,不能以 LXC 内看到的部分文件推断容器拥有独立的 CPU 调频控制权:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

系统没有这些文件时,先检查硬件、固件、虚拟化环境与驱动支持,不强行加载一个名称相似的模块。一个 policy 可能管理多个 CPU,最终应检查全部 /sys/devices/system/cpu/cpufreq/policy*,而不只检查 cpu0。

驱动/模式 常见策略含义
intel_pstate active powersave 与 performance 是驱动自己的算法;powersave 不等于固定最低频率,也不代表禁止睿频
intel_pstate passive,通常显示 intel_cpufreq 使用通用调频 governor,可用项依内核而变
acpi-cpufreq 可使用硬件与内核实际提供的通用 governor
amd-pstate 等其他驱动 以对应驱动文档为准,不能照抄 Intel 专属参数

通用 performance/powersave 通常分别请求策略允许的最高/最低性能状态,ondemand 按负载调整,schedutil 利用调度器信息;它们与 intel_pstate active 同名策略的语义并不相同。CPUFreq 文档、intel_pstate 文档

二、优先使用当前工具调整

较新的 Debian 可安装 linux-cpupower;Debian 13 Trixie 已不再提供旧 cpufrequtils 包,不能照抄旧安装命令。cpupower 是用户态工具,不意味着要把 PVE 内核替换成 Debian 内核。Debian 工具包说明

apt install linux-cpupower
cpupower frequency-info

仅当所有相关 policy 明确提供 ondemand 时,才测试:

cpupower -c all frequency-set -g ondemand

对支持的驱动可设置最小/最大请求值,下面是 800MHz 到 2GHz 的演示,不是通用数值:

cpupower -c all frequency-set -d 800MHz -u 2GHz

先从 frequency-info 和 cpuinfo_min_freq/cpuinfo_max_freq 获取有效范围。scaling_available_frequencies 在连续调频或 HWP 环境中可能不存在,不能据此判断 CPU 不支持调频;Turbo、温度和硬件功率限制也会影响观测结果。测试后按记录恢复原 governor 和范围。

三、旧 cpufrequtils 配置的维护

在仍提供 cpufrequtils 的旧 Debian 环境中,/etc/default/cpufrequtils 可以由其服务读取。启用字段应写作 ENABLE;频率单位和数值需结合工具说明与硬件范围核对:

ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED="2000000"
MIN_SPEED="800000"

不要同时启用多个调频服务或让桌面电源管理工具与自己写的 systemd unit 互相覆盖。检查现有服务和启动日志,验证所有 policy 在重启后是否维持所需设置。

若确需单一启动 unit,先确认 /usr/bin/cpupower 存在且命令已测试,再保存 /etc/systemd/system/cpupower-policy.service:

[Unit]
Description=Apply tested CPU frequency policy

[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower -c all frequency-set -g ondemand

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now cpupower-policy.service
systemctl status cpupower-policy.service

此 unit 只设置 governor,没有保存频率上限;需要持久化其他设置时逐项增加并验证。回退时禁用该 unit,再恢复原策略。

四、什么时候才考虑禁用 intel_pstate

只有确认当前驱动存在具体兼容问题,并有可用的替代驱动和控制台恢复路径时,才考虑测试 intel_pstate=disable。它可能改变硬件自主调频和节能能力,也可能使调频接口不可用,不能承诺获得更低功耗或更精确频率。

PVE 不一定使用 GRUB。先通过 proxmox-boot-tool status、安装方式与引导信息确认启动器;GRUB 在 /etc/default/grub 中保留原参数并追加,再执行 update-grub;systemd-boot 使用 /etc/kernel/cmdline 并执行 proxmox-boot-tool refresh。不要覆盖原有根分区、IOMMU 等必要参数。PVE 启动器文档

重启后核对 /proc/cmdline、实际驱动和全部 policy,出现回归时从控制台移除新增参数并恢复原设置。调频优化最终应以相同业务负载下的耗时、温度和整机功耗评估,不能只用 /proc/cpuinfo 的一个 MHz 数值下结论。

0

评论区