关于
本文主要涉及Linux CPUFreq子系统是什么,为什么需要,怎么用。
并解决在实际测试中遇到的三个问题:
scaling_governor
没有userspace
的问题。/proc/cpuinfo
与cpuinfo_cur_freq
显示频率不同。- 无法针对单个核心调频并使一个CPU下的不同的核心运行在不同的频率下。
参考资料
- Linux 2.6 内核中的最新电源管理技术综述_CPUFreq
- Linux动态频率调节系统CPUFreq
- Fedora社区对于问题一的讨论地址
- Archlinux论坛对于问题一的讨论地址
- StackExchange 问题:Why do cpuinfo_cur_freq and /proc/cpuinfo report different numbers?
- Stackoverflow 问题:Understanding cpu frequency, thread selection and more
- Intel 论坛问题:How can I scale only one core’s frequency in a multi-core processor?
初探变频技术:在Linux中查看CPU相关信息
再问为什么之前,可以先看看到底Linux
变频到底是什么,可以通过什么手段来看。
本部分使用的操作系统是Fedora27
,linux
内核版本是4.13
。本部分参考参考资料2的博客。
在Linux系统中查看与CPU相关的信息主要有两个方法:
- 通过查看
/proc/cpuinfo
,比如当前运行频率可以通过|grep MHz
查看。但是这个方法在413,414内核变动较大,不推荐通过此方法查看。具体的原因可以见后面的小节。 - 另外一个方法是通过
sysfs
查看与修改,目录是/sys/devices/system/cpu/cpu*
先主要通过第二个方法进行查看:
与CPU相关的sysfs
接口均在此目录下,可以通过查看这些文件内容查看CPU相关的信息,例如:
- online offline 文件中保存着当前在线以及下线的核心的数量。
- present 中记录着主板上安装的CPU的编号
进一步进入cpufreq
目录下,该目录下的文件记录与频率相关的内容。
对于fedora系统,无需安装其它工具。如果使用ubuntu系统时,该目录可能为空,需要手动安装cpufrequtils
。
在cpuN
(N为具体的第几个CPU)下有关于该CPU的具体参数文件。与频率有关的文件在该目录下的cpufreq
文件夹下。fedora系统该文件夹下有如下信息:
cpuinfo_xxx
开头文件代表着cpu硬件上支持的频率
cpuinfo_max_freq cpuinfo_min_freq
最大、最小频率cpuinfo_cur_freq
是当前运行的频率(可能也有问题,具体见后面的小节)
scaling_xxx
开头文件代表可以通过CPUFreq系统用软件进行调节时所支持的频率
scaling_available_governors
可供选择的频率调节策略scaling_governors
当前选择的策略scaling_max_freq scaling_min_freq
调节是最大、最小频率scaling_cur_freq
是软件当前指定的频率scaling_driver
调频驱动 (当前intel_pstate
)
特别注意:可能新版的处理器,新的Linux内核中只有部分接口,且调度也只有powersave和ondemand两种,这是由于使用了p-state driver
导致。如何修改见后面小节。
CPUFreq 子系统
根据以上观察,可以有如下总结:
- CPU的硬件特性决定了这个CPU的最高和最低工作频率,所有的频率调整数值都必须在这个范围内。
- 可以在这个范围内再次定义出一个软件的调节范围,它们用scaling_xxx_freq来表示
- CPUFreq系统把一些公共的逻辑和接口代码抽象出来,这些代码与平台无关,也与具体的调频策略无关
- 另外一部分,与实际的调频策略相关的部分被称作cpufreq_policy
- cpufreq_policy又是由频率信息和具体的governor组成,governor才是具体策略的实现者
- governor的实现最好能做到平台无关,与平台相关的代码用cpufreq_driver表述
关于CPUFreq的具体理论,主要参考参考文献1,该参考文献使用的linux内核位2.6版本,该部分以2.6版本为主。
为什么会出现变频技术
简要来说,变频技术的主要目的是节约功耗。变频技术作为电源管理技术以节能为目的加入linux内核。与之前看的大小核类似,变频技术都是为了 energy efficient computing
,为了提高performance per watt
。