You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

现代PSTATE驱动下能否设置恒定最低CPU频率?

在现代Intel P-State驱动下设置恒定最低CPU频率的方法

我完全懂你的 frustration——新版Intel pstate的powersave governor确实把很多老用户习惯的控制逻辑给改没了,尤其是需要长时间低噪运行数值模拟的场景,风扇突然飙升的噪音真的很闹心。好消息是,你还是能实现恒定最低CPU频率的,下面给你几种靠谱的方案:

1. 回退到传统ACPI CPUFreq驱动(找回旧版powersave governor)

这是最直接的方案,能让你完全回到熟悉的旧版控制逻辑:

  • 编辑GRUB启动配置文件:sudo nano /etc/default/grub
  • GRUB_CMDLINE_LINUX行末尾添加intel_pstate=disable,比如:
    GRUB_CMDLINE_LINUX="quiet splash intel_pstate=disable"
    
  • 更新GRUB配置:
    • Debian/Ubuntu系:sudo update-grub
    • RHEL/CentOS系:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  • 重启系统后,你就能找回旧版的powersave governor,然后用以下命令锁定最低频率:
    # 先查看可用的最低频率
    cpupower frequency-info --freq
    # 设置powersave governor并锁定最低频
    sudo cpupower frequency-set --governor powersave --min <你的最低频率值>
    

2. 在现代P-State驱动下直接固定频率

如果不想放弃P-State的现代优化,可以直接通过sysfs手动强制固定频率:

  • 首先查看CPU支持的所有可用频率:
    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    
  • 然后将所有核心的最小和最大频率设置为同一个值(即你想要的最低频):
    # 替换<MIN_FREQ>为你查到的最低频率数值
    echo <MIN_FREQ> | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq
    echo <MIN_FREQ> | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
    
  • 注意:如果你的系统中没有scaling_min_freq文件,需要先在GRUB中添加intel_pstate=passive参数(步骤同方案1),重启后P-State会允许更多手动控制权限。

3. 调整EPP参数(折中低噪方案)

如果不想完全锁死频率,只想让CPU尽可能停在低频(仅极端负载时升频),可以调整Energy Performance Preference(EPP)参数:

  • 查看当前EPP配置:
    cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference
    
  • 将所有核心的EPP设置为最节能的power模式:
    echo power | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference
    

这个方案不会完全限制频率,但会让CPU优先选择最低功耗的运行状态,比默认的powersave模式安静很多。

持久化设置

以上所有命令都是临时生效的,重启后会恢复默认。要持久化配置:

  • 可以将命令添加到/etc/rc.local(确保文件有执行权限);
  • 或者创建一个systemd服务,开机自动执行设置命令;
  • 对于sysfs配置,也可以在/etc/sysfs.d/目录下创建自定义配置文件,比如99-cpu-freq.conf,内容示例:
    devices/system/cpu/cpu*/cpufreq/scaling_min_freq = <MIN_FREQ>
    devices/system/cpu/cpu*/cpufreq/scaling_max_freq = <MIN_FREQ>
    

内容的提问来源于stack exchange,提问作者Mephisto

火山引擎 最新活动