我正在使用Debian 8 amd64机器进行基准testing。 在实验过程中,我希望CPU以固定的频率(最好是最大可能)运行。 这将排除CPU时钟速度作为结果变化的来源。
经过一番阅读,似乎正确的做法是将CPU调速器更改为performance ,这在Linux内核文档中进行了描述:
CPUfreq调节器“性能”将CPU静态设置为scaling_min_freq和scaling_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频率,使其不会波动?
经过一番实验,我想我可以回答我自己的问题。
正如本文所述,在某些英特尔硬件上,有两种方法可以pipe理CPU频率:
当使用pstate的时候,BIOS对时钟速度有一些说法,似乎这是波动的来源。
你可以通过将intel_pstate=disable添加到内核参数来强制closurespstate(编辑/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-cpufreq或intel_pstate 。
对于当代英特尔处理器,频率由处理器本身控制,暴露于软件的P状态与性能水平相关。 对于英特尔酷睿处理器 ,频率可以设置为单一 频率 的想法 是虚构的 。 即使缩放驱动程序select单个P状态,处理器将运行的实际频率也由处理器自己select。 [1]
[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
我读过这个主题,因为我太想find一个固定的频率到我的cpu,因为粉丝不再工作了(当然,那些事情发生在你在一个迷失的岛屿潜水休闲的国外!),所以我的观点是更多的设置最低频率(800Mhz)..我终于成功地改变了/ sys / devices / system / cpu / cpu * / cpufreq /中的scaling_max_freq,对于每个cpu的configuration,现在很好,频率应该从800Mhz到…… 800Mhz。 它的工作原理和解决了我有经验的过热问题..(频率现在799Mhz,不动,这使得CPU保持在50°C左右!)
PS:我也禁用涡轮增压模式(3,1Ghz)