cpu 功耗控制
参考框架: cpufreq 框架。
cpufreq 框架提供 cpu 功耗管理接口,以及功耗管理方案。
用户可以通过功耗管理接口(以文件形式提供)来选择管理方案,并设置相关参数。
管理方案的实现则由具体的驱动来完成。(比如:通过时钟管理,电源管理等框架来实现)
cpu 功耗控制框架结构
cpu 功耗控制设计
参考系统:Linux
为驱动提供注册接口:
int cpufreq_register_driver(struct cpufre_driver *driver_data) {
// 检查是否开启 cpu 功耗控制,如果不开启则退出注册行为
// 检查是否已初始化 cpu 结构,即检查功耗控制对象是否存在
// 检查驱动结构的参数是否正确
// 检查驱动是否已注册,处理器功耗采用统一的驱动
// 检查驱动是否提供 setpolicy 接口
// 遍历 cpu 总线,为 cpu 结构获取 policy 结构
}
组织层和策略层将以驱动的形式注册,并提供用户接口文件。
为 governor 注册接口:
int cpufreq_register_governor(struct cpufreq_governor *) {
// 检查是否开启功耗控制
// 查询 governor 是否已注册,已注册则退出
}
Policy 结构:
policy 暂无注册接口,Linux 中在编译过程中会开辟空间存放已有的 policy,但是 policy 不一定会被使用,因此在驱动注册过程中会进行选择处理。
在驱动注册过程中,创建 policy 结构并与驱动关联。
调用 policy 初始接口,默认对应的 governor 以及频率等属性。
用户操作:
提供文件操作为 show 和 store,通过这两种接口访问 governor 和 policy,从而控制功耗。