契机
在对系统性能的进行测量的时候,可能需要锁定或探测频率。例如,测试指标是x/Cycles.
不可行的方案
rdtsc
通过定时器结合rdtsc
的方法,你会发现测出来的时钟频率基本上是不发生变化的。后者在统计上反映了一个处理器的平均频率。
for loop
很难精确控制每一条表达式执行的时间(有多个因素影响,例如指令集、时钟周期、中断等)。
可行的方案
探测频率看起来是行不通的,一种可行的路径是锁定处理器频率。
cpupower
cpupower
是一套用于查询和调节处理器功率相关的工具。其具体原理和使用方法参考CPU p-state 的Linux配置。
如果一切顺利,在安装完linux-tools-`uname -r`
之后,就可以使用cpupower了。基本的控制策略有两种:
- 使用userspace直接指定频率:
|
|
- 使用performance策略:
|
|
但是在一些情况下,cpupower可能不能使用,例如:
- 使用了定制化内核,没有对应的
linux-tools-`uname -r`
; - 即使设定了频率,频率还是有可能起飞;
- 无论怎么折腾,都找不到cpupower的backend。
对于这三种问题,请参考If cpupower fails
cpufrequtils
cpufrequtils
提供了一套更容易使用的API。其详细用法参考ThinkWiki.
参照链接,除了Wiki中列出的用法,还可以新建一个文件
/etc/default/cpufrequtils
,配置内容如下:
|
|
通过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。