Linux:为什么使用性能调节器时CPU频率会波动?


8

我正在使用Debian 8 amd64机器进行基准测试。在实验期间,我希望CPU以固定频率(最好是最大频率)运行。这将排除CPU时钟速度成为结果变化的来源。

经过一番阅读之后,似乎正确的做法是将CPU调节器更改为performance,这在Linux内核文档中进行了介绍

CPUfreq调节器“性能”将CPU静态设置为scale_min_freq和scale_max_freq边界内的最高频率。

遗憾的是,有关进一步的细节scaling_min_freq,并scaling_max_freq没有提供。希望不要紧,因为使用的CPU频率是间隔的最大值。

因此,我已使用cpufreq-set启用了此调控器:

$ cat / sys / devices / system / cpu / cpu * / cpufreq / scaling_governor
性能
性能
性能
性能

而且,出于良好的考虑,我还在BIOS中禁用了涡轮增压模式:

$ cat / sys / devices / system / cpu / intel_pstate / no_turbo
1个

根据性能调节器的上述说明,我希望CPU时钟速度不会波动。但是,如果我反复跑步cpufreq-info,我会看到时钟速度在波动:

$ cpufreq-info | grep'当前CPU fr'
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为3.99 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为4.00 GHz。
$ cpufreq-info | grep'当前CPU fr'
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为3.96 GHz。
$ cpufreq-info | grep'当前CPU fr'
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为3.94 GHz。
$ cpufreq-info | grep'当前CPU fr'
  当前的CPU频率为4.01 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为4.00 GHz。
  当前的CPU频率为3.98 GHz。

这种波动是由于硬件,BIOS,内核或其他因素引起的吗?有没有办法设置CPU频率,使其完全不波动?


您正在使用哪种类型的服务器硬件?该硬件的BIOS功能和CPU性能设置是什么?
ewwhite

它实际上是具有i7 CPU的台式机。我在此处上传了dmesg和cpuinfo:gist.github.com/vext01/73eea539eb041acf784b。回复:BIOS设置,我需要去机器看看。您有什么特定的设置吗?
Edd Barrett

与正常的pstate变化相比,这并不是“很大”的波动... :)
rogerdpack

Answers:


9

经过一些试验,我想我可以回答我自己的问题。

该线程中所述,在某些Intel硬件上,有两种方法来管理CPU频率:

  • 使用pstate。
  • 使用常规ACPI。

使用pstate时,BIOS在时钟速度上有发言权,这似乎是波动的根源。

您可以通过附加intel_pstate=disable到内核​​参数来强制关闭pstate (编辑/etc/default/grub并将arg添加到GRUB_CMDLINE_LINUX_DEFAULT。最后运行sudo update-grub)。

完成此操作后,的输出cpufreq-info看起来就大不相同了,我还注意到有一组不同的CPU调节器可用(例如ondemand现在可用)。

最重要的是,在将调节器设置为之后performance,时钟速度现在已固定(在我的情况下为4.00GHz)。

您可以查看/sys/devices/system/cpu/cpu*/cpufreq/scaling_driver以确定是否使用pstate或ACPI来扩展CPU。这些文件可以采用值acpi-cpufreqintel_pstate


另一个技巧:使用“ lsmod”列出内核加载的模块,将与CPU速度调整/ p状态/ c状态/任何相关的每个模块列入黑名单,然后重新启动计算机。搜索“黑名单内核模块”。
Rufo El Magufo 2015年


4

对于当代的英特尔处理器,频率由处理器本身控制,并且软件所暴露的P状态与性能水平有关。 对于Intel Core处理器,可以将频率设置为单个 频率的想法是虚构的。即使缩放驱动器选择单个P状态,处理器本身也会选择处理器将运行的实际频率。[1]

[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt


有趣。那么,当我传递intel_pstate=disable给内核时,这仍然适用吗?我这样做时是否在调用“旧版模式”?
Edd Barrett

1)不确定。需要咨询Intel Architectures Software Developer's Manual.2)是。PS。您可能还想玩x86_energy_perf_policy
SaveTheRbtz

感谢您的意见。由于我仍然不确定,因此我暂时不提这个问题。也许以后会有人了解情况。
Edd Barrett

-1

我读此主题的原因是,我一直在为CPU设置固定频率,因为风扇不再工作了(当然,当您在一个迷失的岛屿上潜水休闲时,这些事情就会发生!)最低频率(800Mhz)..i最终成功更改了/ sys / devices / system / cpu / cpu * / cpufreq /中配置的每个cpu的scaling_max_freq,现在可以认为频率应该从800Mhz起至.... 800Mhz。它可以正常工作并解决了我所遇到的过热问题。(频率现在为799Mhz,并且不移动,这使CPU保持在50°C左右!)

PS:我也禁用了涡轮增压模式(3,1Ghz)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.