Linux:使用性能调控器时,为什么CPU频率会发生波动?

前端之家收集整理的这篇文章主要介绍了Linux:使用性能调控器时,为什么CPU频率会发生波动?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Debian 8 amd64机器进行基准测试.在实验过程中,我希望cpu以固定频率(最好是可能的最大频率)运行.这将排除cpu时钟速度作为结果变化的来源.

经过一些阅读后,似乎正确的做法是将cpu调控器更改为性能,如here in the Linux kernel documentation所述:

The cpufreq governor “performance” sets the cpu statically to the
highest frequency within the borders of scaling_min_freq and
scaling_max_freq.

遗憾的是,未提供有关scaling_min_freq和scaling_max_freq的更多详细信息.希望它无关紧要,因为使用的cpu频率是间隔的最大值.

所以我使用cpufreq-set启用了这个调控器:

$cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance

为了更好的衡量,我还在BIOS中禁用了turbo boost模式:

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

基于以上对性能调控器的描述,我预计cpu时钟速度不会有波动.然而,如果我反复运行cpufreq-info,我会看到时钟速度波动:

$cpufreq-info | grep 'current cpu fr'
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 3.99 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 4.00 GHz.
$cpufreq-info | grep 'current cpu fr'
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 3.96 GHz.
$cpufreq-info | grep 'current cpu fr'
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 3.94 GHz.
$cpufreq-info | grep 'current cpu fr'
  current cpu frequency is 4.01 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 4.00 GHz.
  current cpu frequency is 3.98 GHz.

这种波动是由于硬件,BIOS,内核还是其他因素造成的?有没有办法设置cpu频率,使其根本不会波动?

解决方法

@H_403_29@ 经过一些实验,我想我可以回答我自己的问题.

in this thread所述,在某些英特尔硬件上,有两种方法可以管理cpu频率:

>使用pstate.
>使用常规ACPI.

当使用pstate时,BIOS在时钟速度上有一些说法,似乎这是波动的来源.

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

执行此操作后,cpufreq-info的输出看起来大不相同,我还注意到一组不同的cpu管理器可用(例如,现在可以使用ondemand).

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

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

猜你在找的Linux相关文章