我正在分析一个应用程序在运行 linux 的 x86-64 处理器上的执行时间。在开始对应用程序进行基准测试之前,我想确保禁用动态频率缩放和空闲状态。
$ cat /sys/devices/system/cpu/cpufreq/boost
0
Run Code Online (Sandbox Code Playgroud)
这告诉我频率缩放(Intel 的 Turbo Boost 或 AMD 的 Turbo Core)被禁用。事实上,我们将其设置为恒定的 2GHz,这在下一个练习中很明显。
$ 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
...
Run Code Online (Sandbox Code Playgroud)
因此,空闲状态被禁用。现在我确定可以干扰基准测试的两个“功能”都被禁用,我继续使用 cpupower 监视应用程序。
但是,当我运行我的应用程序来监控 C 状态时,我发现超过 99% 的时间都花在了 C0 状态,这应该是这种情况。但是,我也看到了一种称为 Cx 状态的东西,其中内核花费了 0.01 - 0.02% 的时间。
$ cpupower monitor -c ./my_app …Run Code Online (Sandbox Code Playgroud)