奇怪的 cpufreq 缩放问题:无论调节器如何,最大 cpufreq 在唤醒时都会逐渐下降

奇怪的 cpufreq 缩放问题:无论调节器如何,最大 cpufreq 在唤醒时都会逐渐下降

我在联想 y5070 上运行 Ubuntu Mate 15.10 64 位(内核 4.2.0),该电脑配备 i7-4710HQ CPU。我最近注意到(可能是在最近的 dist-upgrade 之后)某些程序运行速度非常慢。经过一番调查,我发现 intel_pstate 默认切换到“powersave”调节器,当我没有执行任何密集操作时,它会正确地将我的 cpufreq 降低到大约 600 MHz。但是,当我执行密集操作时,它不再增加 cpufreq。

为了解决这个问题,我在以下位置设置了 GOVERNOR="performance":

/etc/init.d/cpufrequtils. 

启动后,cpufreq 正确保持在 2.5 GHz 左右,并且调节器正确设置为“性能”。但是,一分钟后,调节器会自动更改回“省电”,cpufreq 再次下降。如果我使用 cpufreq-set 手动设置调节器,它会返回到 2.5 GHz。

我注意到的第二个问题是,每次我挂起并唤醒笔记本电脑时,最大 cpufreq 都会下降一个增量(每次的增量都是相同的):

暂停之前:

current policy: frequency should be within 800 MHz and 3.50 GHz.
              The governor "performance" may decide which speed to use
              within this range.
current CPU frequency is 2.20 GHz.

第一次唤醒后:

current policy: frequency should be within 800 MHz and 2.10 GHz.
              The governor "performance" may decide which speed to use
              within this range.
current CPU frequency is 1.12 GHz.

第二次醒来后:

current policy: frequency should be within 800 MHz and 1.40 GHz.
              The governor "performance" may decide which speed to use
              within this range.
current CPU frequency is 1.30 GHz.

ETC。

注意:调速器仍然设置为“性能”。

尝试使用 cpufreq-set 设置 cpufreq 最大值:

for ((i=0;i<$(nproc);i++)); do sudo cpufreq-set -c $i -u 3.50GHz; done

没有效果。

最后,我还尝试在 grub 中禁用 intel_pstate,并将 acpi 配置设置为“性能”;这存在同样的挂起/唤醒问题。

任何见解都将不胜感激!

编辑 1:我试过了这表明问题可能是时钟调制在唤醒时自动启用,这与 intel_pstate 冲突。实际上,时钟调制似乎已启用,但使用以下命令禁用它:

sudo wrmsr -a 0x19a 0x0

没有明显改变频率,而且我仍然无法改变最大 cpufreq 值。

编辑 2:@DougSmythies 在我的电脑上,这些文件在其他地方,这些是相应的打印输出(我排除了其他 7 个核心的频率,它们是相同的)。另请注意,我目前正在使用 acpi 驱动程序:

cat /sys/devices/system/cpu/cpu*/cpufreq/cpu_min_freq
800000 

cat /sys/devices/system/cpu/cpu*/cpufreq/cpu_max_freq
2501000

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq                                                 
2501000 

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq                                                 
800000

我在 /sys/devices 中的任何地方都找不到 intel_pstate 文件。

编辑 3:@DougSmythies 我已经使用 intel_pstate 驱动程序重新启动,并暂停和唤醒了机器。现在核心在性能模式下以大约 2000 的速度运行。根据 cpufreq-info,最大频率为 2.1 GHz;暂停前为 3.5 GHz。以下是您请求的文件的输出(仅适用于 cpu0,它们都相同):

$cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 
3500000
$cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq                                                 
800000
$cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 
2100000
$cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 
800000

$grep . /sys/devices/system/cpu/intel_pstate/*                                                                                                                                                                                                      
/sys/devices/system/cpu/intel_pstate/max_perf_pct:60
/sys/devices/system/cpu/intel_pstate/min_perf_pct:22
/sys/devices/system/cpu/intel_pstate/no_turbo:0
/sys/devices/system/cpu/intel_pstate/num_pstates:28
/sys/devices/system/cpu/intel_pstate/turbo_pct:36

答案1

您可能受到此错误的影响:

https://bugzilla.kernel.org/show_bug.cgi?id=114551

该补丁仅适用于主线内核 v 4.6。在适当的时候,也许它会被移植到 16.04LTS,或者在 2017 年 2 月,它应该会出现在下一个 LTS Enablement Stack 中:

https://wiki.ubuntu.com/Kernel/LTSEnablementStack#Kernel.2FSupport.A16.04.x_Ubuntu_Kernel_Support

相关内容