CPU dvfs framework(也常被称为cpufreq framework)和其他的linux framework类似,主要解决两个问题:什么时候调频调压,怎么调频调压。cpufreq driver提供调频调压的机制,cpufreq governor提供不同的策略,cpufreq core对通用的调频逻辑做抽象,为上层提供功能、接口封装,对下层调用抽象封装的硬件控制接口,此外,还借助频率电...
1.1 struct cpufreq_diver数据结构 struct cpufreq_driver { char name[CPUFREQ_NAME_LEN]; u16 flags; void *driver_data; int (*init)(struct cpufreq_policy *policy); int (*verify)(struct cpufreq_policy_data *policy); int (*setpolicy)(struct cpufreq_policy *policy); int (*target)(struct ...
首先介绍几个cpufreq的关键全局变量,能大概了解cpufreq的实现 static struct cpufreq_driver *cpufreq_driver; /* 调频驱动指针,驱动开发者根据具体hardware实现,主要包括:设置频率,获取频率等接口 */ static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); /* 区分大小核时,每个CPU可有不同的调...
cpu2 cpu5 cpufreq modalias possible probe 所有与CPUFreq相关的sysfs接口都位于:/sys/devices/system/cpu下面,我们可以看到,8个cpu分别建立了一个自己的目录,从cpu0到cpu7,我们再看看offline和online以及present的内容: droidphone@990:/sys/devices/system/cpu$cat online0-7droidphone@990:/sys/devices/system/c...
cpuinfo_min_freq scaling_driver cpuinfo_transition_latency scaling_governor droidphone@990:/sys/devices/system/cpu/cpu0/cpufreq$ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 在我的电脑上,部分的值如下: cpuinfo_cur_freq: 1600000
上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共逻辑向CPUFreq和其它内核模块提供了必要的API,像cpufreq_governor、cpufreq_driver等模块通过这些API来完成一个完整的CPUFreq体系。这一...
CPUFreq core: 对cpufreq governors和cpufreq driver进⾏了封装和抽象,并定义了清晰的接口。CPUFreq ...
scaling_cur_freq:被governor和cpufreq核决定的当前CPU工作频率。该频率是内核认为该CPU当前运行的主频率 scaling_driver:该文件显示该CPU正在使用何种cpufreq driver scaling_governor:通过echo命令,能够改变当前处理器的governor类型 scaling_max_freq:显示当前policy的上下限 (单位: 千赫兹)需要注意的是,当改变cpu poli...
dong@dong-990:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_governor ondemand OK,我的系统当前选择ondemand这种策略,这种策略的主要思想是:只要cpu的负载超过某一个阀值,cpu的频率会立刻提升至最高,然后再根据实际情况降到合适的水平。详细的情况我们留在后面的章节中讨论。scaling_driver则会输出当前使用...
图2 cpufreq_times更新示意图 cpufreq_times模块代码位于drivers/cpufreq/cpufreq_times.c。它的更新涉及到其他两个模块:cpufreq driver与cputime。 当cpufreq policy频率改变时,cpufreq driver通过cpufreq_notify_transition(普通调频模式)或者cpufreq_driver_fast_switch(快速调频模式)调用cpufreq_times_record_transit...