linux 调频节点,CPU动态调频(linux 3.14.0)一

最近做了一个关于CPU动态调频的project,边工作边学习,在此记录一下。

code版本:3.14.0(在linxu目录顶层Makefile中可看到版本号)

设备:基于安卓4.4原生系统的某厂商的手机(以下用XXX代表设备)

网上有不少关于动态调频的博文,都是先介绍整体框架,然后理解数据结构,最后分析关键代码,这是一种非常适合学习的循序渐进的过程。

而我在接触这个项目的时候,是先有需求后看代码,之前对动态调频一无所知,所以写笔记的话按照我自己的学习过程来会更自然一些。

即本文的思路是——遇到特定的问题,学习相关的代码,最后整体总结。

遇到的第一个问题是:用户如何直观的看到CPU的频率?

这个问题百度一下就知道了:通过sysfs文件系统,具体的目录是:

/sys/devices/system/cpu/cpu0/cpufreq/

该目录下有以下的属性文件(不同设备可能略有差别):

affected_cpus

cpuinfo_cur_freq

cpuinfo_max_freq

cpuinfo_min_freq

cpuinfo_transition_latency

interactive

related_cpus

scaling_available_frequencies

scaling_available_governors

scaling_cur_freq

scaling_driver

scaling_governor

scaling_max_freq

scaling_min_freq

scaling_setspeed

stats

我们只看自己比较关注和常用的一些,其中前缀是scaling的属性文件表示软件可调节的几种属性,前缀是cpuinfo的属性文件表示硬件支持的几种属性。

关于软件调节和硬件支持,应该是这样的一个关系:设备的最终工作频率是由软件调节后决定的,而软件调节的工作频率必须是硬件(即CPU)所支持的,进一步说,软件调节的范围必须是硬件支持的频率范围的一个子集。

假设:

cpuinfo_max_freq 的值为1901000,硬件支持的最大频率

cpuinfo_min_freq 的值为900000,硬件支持的最小频率

那么软件调节的范围只能是在900000~1901000之间,并且是其中的某几个值,用scaling_avaliable_frequencies可查看。

我们在sysfs下还看到诸如scaling_available_governors、scaling_driver等interface,在cpufreq子系统中(以下简称cpufreq), policy 、governor、driver是几个比较核心的概念。cpufreq的最终目的是动态调节频率,在前面提到,软件调节是有一定范围的,并且该范围(可以称为频率表)是硬件支持的一个子集,这个频率表的最大值和最小值是由policy决定的,当然不同的policy采用的频率表的范围不同。OK,现在我们用policy制定了频率表的范围,对应sysfs下的scaling_min_freq和scaling_max_freq,governor会从频率表中选择一个值最为CPU的最终工作频率。governor可以理解为“调节器“,查看scaling_available_governors可以知道设备支持哪些governor,比如我的设备支持ondemand userspace interactive performance等,每种governor有着不同的选频标准,比如ondemand会根据系统的workload来选频,如果当前workload超过某一阀值,则选择频率表中的最大频率,其他的几种governor后面有机会再介绍。假设某个governor根据一定的机制从频率表中选择了某个频率,接下来driver负责将governor选择的频率设置为CPU的工作频率。

policy、governor、driver是cpufreq中的核心模块,对应源码中的结构体cpufreq_policy、cpufreq_governor、cpufreq_driver,这里不打算对结构体的成员进行一一解释。

总结一下:

1、硬件有一个频率表,表示硬件支持的所有频率(与硬件平台相关);

我在对应的DTS文件中应该找到了 xxx,cpufreq-table = <111 222 333>; (xxx是厂商名,table中的数字无意义)

2、policy规定了软件调节的最大和最小频率,更新了1中的频率表(与硬件平台无关);

3、governor从cpufreq table中选择一个频率作为cpu将要工作的频率(与硬件平台无关);

4、把脏活累活交给driver,driver负责设置CPU的工作频率。(与硬件平台相关)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值