使用intel_pstate时如何设置特定的CPU频率

问题描述 投票:0回答:3

当我使用intel_pstate时,我发现我无法使用命令更改CPU频率:

sudo cpupower frequency-set -f SomeValue

我知道原因是 intel_pstate 的调节器(省电和性能)不支持手动更改频率。我还尝试将频率值直接写入文件/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq。但它说我正在更改只读文件。

那么使用intel_pstate驱动程序时有没有办法改变核心频率?

linux x86 cpu intel
3个回答
9
投票

在其中一种活动模式下运行的

intel_pstate
驱动程序不允许您直接设置特定频率 (
cpupower frequency-set -f
),但您可以更改允许驱动程序设置的最大和最小频率,如下所示:

有了cpupower,你可以使用:

cpupower frequency-set -u 3000mhz

...设置所有核心的最大频率。要设置您可以使用的最小频率

cpupower frequency-set -d 3000mhz

这些命令需要 root 权限(使用

sudo
执行)。

在此示例中,所需频率 3000 MHz 应用于所有内核。实际频率将是最接近的支持频率,该频率大于(如果可能)所需频率。实际有效频率范围和当前核心频率可以从

cpupower frequency-info
确定。

某些处理器支持每核心频域。您可以使用

-c
选项指定要更改其频率范围的特定核心或一组核心。


1
投票

是的,有。在设置频率之前,首先将 intel_pstate 设置为passive。这使得可以将调控器设置为userspace。然后将调控器设置为userspace。我用于此目的的脚本:

    #!/bin/bash  
    # Rig4TopSpeed.sh
    UPPER=4200MHz
    LOWER=4200MHz
    echo passive | sudo tee /sys/devices/system/cpu/intel_pstate/status
    sudo cpupower idle-set -E
    sudo cpupower frequency-set -g userspace
    sudo cpupower frequency-set -u $UPPER
    sudo cpupower frequency-set -d $UPPER
    sudo cpupower frequency-set -f $UPPER
    sudo cpupower frequency-info
    echo
    sudo turbostat --num_iterations 1  --interval 2  2>/dev/shm/turbostat.stderr 
    echo 
    grep  -i "cpufreq" /dev/shm/turbostat.stderr
    echo 
    grep -i "frequency" /dev/shm/turbostat.stderr
    echo
    grep -i "max turbo" /dev/shm/turbostat.stderr
    echo
    inxi -C|cat
    echo
    grep "cpu MHz" /proc/cpuinfo 
    sleep 3

底部的睡眠让我有时间在从 GUI 菜单运行时控制台窗口自动关闭之前查看结果。

请注意,如果您的 CPU 有 HWP 并且处于活动状态,则 CPU 会将您的设置作为建议。空闲和热 CPU 将具有其他时钟速率。

建议:永远不要将固定值设置为高于 Turbostat 报告 CPU 在所有核心处于活动状态时可以执行的操作。


0
投票

我通过以这种方式设置最大和最小频率百分比取得了成功:

echo "50" | sudo tee /sys/devices/system/cpu/intel_pstate/min_perf_pct
echo "50" | sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct
© www.soinside.com 2019 - 2024. All rights reserved.