Edd*_*ett 8 linux performance central-processing-unit linux-kernel benchmark
我正在使用 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/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 频率,使其根本不会波动?
经过一些实验,我想我可以回答我自己的问题。
正如该线程中所述,在某些 Intel 硬件上,有两种方法可以管理 CPU 频率:
使用pstate时,BIOS对时钟速度有一定的发言权,似乎这就是波动的来源。
您可以通过附加intel_pstate=disable
到内核参数来强制关闭 pstate (编辑/etc/default/grub
并将 arg 添加到GRUB_CMDLINE_LINUX_DEFAULT
. finally run 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 状态与性能水平相关。 对于英特尔酷睿处理器来说,频率可以设置为单一频率的想法 是虚构的。即使缩放驱动程序选择单个 P 状态,处理器运行的实际频率也是由处理器本身选择的。[1]
[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
归档时间: |
|
查看次数: |
7005 次 |
最近记录: |