使用 CPUFreq Gnome 扩展的固定频率问题

使用 CPUFreq Gnome 扩展的固定频率问题

我在两台不同的 Ubuntu 18.04 电脑上安装了 CPUFreq Gnome 扩展。一台电脑是 Haswell CPU,另一台是 Skylake CPU。我将最小频率和最大频率设置为相等,并关闭 Frequency Boost。电脑散热良好,CPU 温度低于 40 摄氏度。Haswell 系统上的频率保持非常稳定,偶尔会下降不到 1%,但在 Skylake 系统上,频率会定期下降几个百分点,偶尔会下降高达 10%:

在此处输入图片描述

上面的终端显示了 的输出watch grep \"cpu MHz\" /proc/cpuinfo

我能做些什么让它更加稳定吗?

答案1

如果负载足够低,即使将最小值和最大值都设置为最高级别,处理器也会自行降低 CPU 频率。您不应该注意到性能方​​面的问题。但是,如果这真的很重要,我知道将 CPU 频率锁定在最大值的唯一方法是禁用每个深度大于 0 的空闲状态,但代价是巨大的功率。

因此,对于正常的默认设置:

doug@s18:~/c$ grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver:intel_pstate
/sys/devices/system/cpu/cpu1/cpufreq/scaling_driver:intel_pstate
/sys/devices/system/cpu/cpu2/cpufreq/scaling_driver:intel_pstate
/sys/devices/system/cpu/cpu3/cpufreq/scaling_driver:intel_pstate
/sys/devices/system/cpu/cpu4/cpufreq/scaling_driver:intel_pstate
/sys/devices/system/cpu/cpu5/cpufreq/scaling_driver:intel_pstate
doug@s18:~/c$ grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor:powersave
/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor:powersave
/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor:powersave
/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor:powersave
/sys/devices/system/cpu/cpu4/cpufreq/scaling_governor:powersave
/sys/devices/system/cpu/cpu5/cpufreq/scaling_governor:powersave

对于轻负载,你会得到类似这样的结果:

doug@s18:~/c$ grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq:800229
/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq:800287
/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq:800174
/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq:800286
/sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq:800049
/sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq:800188

现在,按照您所做的进行更改:

doug@s18:~/c$ echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
doug@s18:~/c$ grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor:performance
/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor:performance
/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor:performance
/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor:performance
/sys/devices/system/cpu/cpu4/cpufreq/scaling_governor:performance
/sys/devices/system/cpu/cpu5/cpufreq/scaling_governor:performance
doug@s18:~/c$ grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq:3987126
/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq:4600628
/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq:2559618
/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq:4600104
/sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq:4601383
/sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq:4600459
doug@s18:~/c$ echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
1
doug@s18:~/c$ grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq:3700405
/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq:3700291
/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq:3700381
/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq:3700612
/sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq:3701802
/sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq:3700702

事实上,令人惊讶地稳定。而且功率仍然很低:

doug@s18:~/c$ sudo ~/turbostat --Summary --quiet --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 6
Busy%   Bzy_MHz IRQ     PkgTmp  PkgWatt GFXWatt
0.01    3689    196     30      1.91    0.00
0.01    3700    90      30      1.90    0.00
0.01    3667    142     30      1.91    0.00
0.01    3701    93      30      1.91    0.00
0.01    3620    119     30      1.89    0.00
0.01    3648    118     30      1.88    0.00
0.01    3603    147     30      1.86    0.00
0.00    3701    85      30      1.77    0.00
0.01    3700    102     30      1.84    0.00

但是,如果您希望它在 3.7 GHz 时更加稳定,则请禁用深度空闲状态,这样处理器就不会进入空闲状态(空闲状态 0 或轮询实际上根本不是空闲):

doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state8/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state7/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state6/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state5/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state4/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state3/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state2/disable
1
doug@s18:~/idle/perf/results/a04$ echo 1 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state1/disable

现在 CPU 频率已锁定,功耗并不可怕,主要是因为 turbo 被禁用(turbostat,按照我使用的设置,不区分空闲状态 0 和真正忙碌):

doug@s18:~/c$ sudo ~/turbostat --Summary --quiet --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 6
Busy%   Bzy_MHz IRQ     PkgTmp  PkgWatt GFXWatt
100.26  3700    36069   36      21.66   0.00
100.26  3700    36072   36      21.70   0.00
100.26  3700    36065   36      21.66   0.00
100.26  3700    36079   36      21.89   0.00
100.26  3700    36070   36      21.65   0.00
100.26  3700    36101   36      21.80   0.00
100.26  3700    36072   37      21.74   0.00

附注:实际工作的功率会更高:

doug@s18:~/idle/perf/results/a04$ sudo ~/turbostat --Summary --quiet --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 6
Busy%   Bzy_MHz IRQ     PkgTmp  PkgWatt GFXWatt
100.26  3700    36169   55      72.08   0.00
100.26  3700    36260   55      71.96   0.00
100.26  3700    36074   55      71.97   0.00
100.26  3700    36082   55      71.99   0.00
100.26  3700    36080   56      72.03   0.00

本答案的示例是用 完成的Intel(R) Core(TM) i5-9600K CPU @ 3.70GHz。读者可能会有不同数量的空闲状态,具体取决于他们的处理器。

测试工作完成后,重新启用所有空闲状态:

doug@s18:~/idle/perf/results/a04$ echo 0 | sudo tee /sys/devices/system/cpu/cpu*/cpuidle/state*/disable

然后检查:

doug@s18:~/idle/perf/results/a04$ grep . /sys/devices/system/cpu/cpu*/cpuidle/state*/disable
/sys/devices/system/cpu/cpu0/cpuidle/state0/disable:0
/sys/devices/system/cpu/cpu0/cpuidle/state1/disable:0
/sys/devices/system/cpu/cpu0/cpuidle/state2/disable:0
...
/sys/devices/system/cpu/cpu5/cpuidle/state6/disable:0
/sys/devices/system/cpu/cpu5/cpuidle/state7/disable:0
/sys/devices/system/cpu/cpu5/cpuidle/state8/disable:0

相关内容