当我使用intel_pstate时,我发现我无法使用命令更改CPU频率:
sudo cpupower frequency-set -f SomeValue
我知道原因是 intel_pstate 的调节器(省电和性能)不支持手动更改频率。我还尝试将频率值直接写入文件/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq。但它说我正在更改只读文件。
那么使用intel_pstate驱动程序时有没有办法改变核心频率?
在其中一种活动模式下运行的
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
选项指定要更改其频率范围的特定核心或一组核心。
是的,有。在设置频率之前,首先将 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 在所有核心处于活动状态时可以执行的操作。
我通过以这种方式设置最大和最小频率百分比取得了成功:
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