cpufreq framework
所有与CPUFreq相关的sysfs接口都位于:/sys/devices/system/cpu下面,各个字段的含义如下:
cpufreq framework的功能也被称作动态电压/频率调整(Dynamic Voltage/Frequency Scaling):通过调整CPU core的电压和频率,兼顾系统的性能和功耗,在不需要高性能时,降低电压和频率,以降低功耗;在需要高性能时,提高电压和频率,以提高性能。
这部分内容主要包括:cpufreq_policy、cpufreq_governor、cpufreq_driver以及cpufreq notifiers
cpufreq policy负责设定cpu调频的一个大致范围,cpu具体运行频率,需要相应的cpufreq governor决定,最终由cpufreq driver将governor给出的频率设定到硬件上去。
CPUFreq的通知系统使用了内核的标准通知接口。它对外提供了两个通知事件:policy通知和transition通知。
policy通知用于通知其它模块cpu的policy需要改变,每次policy改变时,该通知链上的回调将会用不同的事件参数被调用3次,分别是:
- CPUFREQ_ADJUST 只要有需要,所有的被通知者可以在此时修改policy的限制信息,比如温控系统可能会修改在大允许运行的频率。
- CPUFREQ_INCOMPATIBLE 只是为了避免硬件错误的情况下,可以在该通知中修改policy的限制信息。
- CPUFREQ_NOTIFY 真正切换policy前,该通知会发往所有的被通知者。
- CPUFREQ_PRECHANGE 调整前的通知。
- CPUFREQ_POSTCHANGE 完成调整后的通知。
cpu开始变频的时候调用
cpufreq_notify_post_transition
cpufreq_notify_transition
__cpufreq_notify_transition
变频失败的时候调用:
cpufreq_notify_post_transitioncpufreq_notify_transition
__cpufreq_notify_transition
参考网站:
https://www.ibm.com/developerworks/cn/linux/l-cpufreq-1/index.html
cpufreq governor的调频思路:
1)有两种类型的cpu:一种只需要给定频率范围,cpu会在该范围内自行确定运行频率;另一种需要软件指定具体的运行频率。
2)对于第一种cpu,cpufreq policy中会指定频率范围policy->{min,max},之后通过setpolicy接口,使其生效即可。
3)对于第二种cpu,cpufreq policy在指定频率范围的同时,会指明使用的governor。governor在启动后,会动态的活着静态的,设定cpu运行频率。