我使用 Debian 8 amd64 机器进行基准测试。在实验期间,我希望 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/设备/系统/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 频率,使其完全不波动?
答案1
经过一些实验,我想我可以回答我自己的问题。
如上所述在此主题中在某些 Intel 硬件上,有两种方法可以管理 CPU 频率:
- 使用 pstate。
- 使用常规 ACPI。
当使用 pstate 时,BIOS 对时钟速度有一定的影响,这似乎是波动的根源。
intel_pstate=disable
您可以通过附加内核参数来强制关闭 pstate (编辑/etc/default/grub
并将参数添加到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
。
答案2
对于当代的英特尔处理器,频率由处理器本身控制,并且暴露给软件的 P 状态与性能水平相关。 频率可以设置为单一 英特尔酷睿处理器的频率是虚构的即使缩放驱动程序选择单个 P 状态,处理器运行的实际频率也由处理器本身选择。[1]
[1]https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
答案3
我读这个帖子是因为我太想为我的 CPU 设置一个固定频率了,因为风扇不再工作了(当然,当你在国外一个失落的岛屿潜水休闲时,这些事情就会发生!)所以我的观点是设置最低频率(800Mhz)..我终于成功地改变了 /sys/devices/system/cpu/cpu*/cpufreq/ 中每个 CPU 的 scaling_max_freq,现在频率应该从 800Mhz 移动到....800Mhz 了。它起作用了,解决了我遇到的过热问题..(频率现在是 799Mhz,没有移动,这使得 CPU 保持在 50°C 左右!)
PS:我还禁用了 turbo 模式 (3,1Ghz)