在性能测试中用cpupower控制CPU频率

在性能测试的时候,锁定或检测实时频率

# 契机

在对系统性能的进行测量的时候,可能需要锁定或探测频率。例如,测试指标是x/Cycles.

# 不可行的方案

# rdtsc

通过定时器结合rdtsc的方法,你会发现测出来的时钟频率基本上是不发生变化的。后者在统计上反映了一个处理器的平均频率。

# for loop

参考StackOverflow

很难精确控制每一条表达式执行的时间(有多个因素影响,例如指令集、时钟周期、中断等)。

# 可行的方案

探测频率看起来是行不通的,一种可行的路径是锁定处理器频率。

# cpupower

cpupower是一套用于查询和调节处理器功率相关的工具。其具体原理和使用方法参考CPU p-state 的Linux配置

如果一切顺利,在安装完linux-tools-`uname -r`之后,就可以使用cpupower了。基本的控制策略有两种:

  1. 使用userspace直接指定频率:
1
sudo cpupower frequency-set -f 2.5GHz
  1. 使用performance策略:
1
sudo cpupower frequency-set -g performance -u 2.5GHz -d 2.5GHz

但是在一些情况下,cpupower可能不能使用,例如:

  1. 使用了定制化内核,没有对应的linux-tools-`uname -r`
  2. 即使设定了频率,频率还是有可能起飞;
  3. 无论怎么折腾,都找不到cpupower的backend。

对于这三种问题,请参考If cpupower fails

# cpufrequtils

cpufrequtils提供了一套更容易使用的API。其详细用法参考ThinkWiki.

参照链接,除了Wiki中列出的用法,还可以新建一个文件/etc/default/cpufrequtils,配置内容如下:

1
GOVERNOR="performance" MAX_SPEED=2.5GHz MIN_SPEED=2.5GHz

通过sudo systemctl restart cpufrequtils即可使配置文件生效。

# If cpupower fails

# Customized Kernel

如果安装内核的时候安装了头文件,则可以在/lib/modules/4.11.0-13-generic/build/tools编译并安装cpupower

如果仍然觉得麻烦,或者编译时出错,一个tricky是,安装一个版本接近的generic的linux-tools二进制包,然后将/usr/lib/linux-tools/`uname -r`链接到/usr/lib/linux-tools/your-installed-linux-tools。这样可以完成一个简单的替代。

# Frequency Out of Control

这可能和HWE和Turbo有关。参见链接。建议进入BIOS调节相关选项。

# No Backend

目前暂不清楚原因。理论上即使用不了intel_pstate也应该fallback到acpi_pstate。建议BIOS关闭Turbo。

Total Page View Loading
Total Visits: Loading  Site Total Visitors: Loading
Built with Hugo
Theme Stack designed by Jimmy