【发布时间】:2019-01-30 10:30:43
【问题描述】:
我正在分析应用程序在运行 linux 的 x86-64 处理器上的执行时间。在开始对应用程序进行基准测试之前,我想确保禁用动态频率缩放和空闲状态。
检查频率缩放
$ cat /sys/devices/system/cpu/cpufreq/boost
0
这告诉我频率缩放(英特尔的 Turbo Boost 或 AMD 的 Turbo Core)已禁用。事实上,我们将其设置为恒定的 2GHz,这在下一个练习中很明显。
检查 CPU 空闲
$ cpupower --cpu 0-63 idle-info
CPUidle driver: none
CPUidle governor: menu
analyzing CPU 0:
CPU 0: No idle states
analyzing CPU 1:
CPU 1: No idle states
analyzing CPU 2:
CPU 2: No idle states
...
因此,空闲状态被禁用。 既然我确定这两个可以干预基准标记的“功能”都被禁用了,我继续使用 cpupower 监控应用程序。
但是,当我运行我的应用程序来监视 C 状态时,我发现超过 99% 的时间都花在了 C0 状态,这应该是这种情况。但是,我也看到了一种称为 Cx 状态的情况,其中核心花费了 0.01 - 0.02% 的时间。
$ cpupower monitor -c ./my_app
./my_app took 32.28017 seconds and exited with status 0
|Mperf
CPU | C0 | Cx | Freq
0| 99.98| 0.02| 1998
32| 99.98| 0.02| 1998
1|100.00| 0.00| 1998
33| 99.99| 0.01| 1998
2|100.00| 0.00| 1998
34| 99.99| 0.01| 1998
3|100.00| 0.00| 1998
35| 99.99| 0.01| 1998
...
所以,很高兴了解以下内容。
- 什么是 Cx 状态?看到这么低的数字,我是否应该不那么烦恼?
- 除了频率缩放和 CPU 空闲之外,是否还有其他我应该关心的功能(从基准测试的角度来看)?
奖金问题
-
CPUidle driver: none是什么意思?
编辑 1
对于关于基准测试期间其他问题的第二个问题,我最近发现 CPU 内核上用于调度目的的本地定时器中断可能会导致测量结果偏差,因此在 Linux 内核中启用了CONFIG_NO_HZ_FULL 以启用无滴答模式
【问题讨论】:
-
Unix & Linux Stack Exchange 可能更合适。要避免在 Linux 上对您的软件进行基准测试,请查看
governor.sh。它将 CPU 设置为最大频率以进行稳定的性能基准测试。 -
其他调优技巧说明here
标签: linux x86-64 benchmarking amd-processor