打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[RK3288][Android6.0] CPU频率调度策略小结

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

CPU的频率调节模式:
1. Performance. 不考虑耗电,只用最高频率。
2. Interactive. 直接上最高频率,然后看CPU负荷慢慢降低。
3. Powersave. 通常以最低频率运行,流畅度会受影响,一般不会用这个吧!
4. Userspace. 可以在用户空间手动调节频率。
5. Ondemand. 定期检查负载,根据负载来调节频率。

查看目录:
位于 /sys/devices/system/cpu/cpuX, X表示cpu number.
root@rk3288:/sys/devices/system/cpu/cpu0/cpufreq # ls
affected_cpus
cpuinfo_cur_freq
cpuinfo_max_freq
cpuinfo_min_freq
cpuinfo_transition_latency
related_cpus
scaling_available_frequencies
scaling_available_governors
scaling_cur_freq
scaling_driver
scaling_governor
scaling_max_freq
scaling_min_freq
scaling_setspeed
stats

cpuinfo_cur_freq 读取的是 CPU 硬件寄存器中当前所处的运行频率。
scaling_cur_freq 读取的是缓存的 CPU 当前运行频率,而不会对 CPU 硬件寄存器进行检查。

查看当前支持策略:
root@rk3288:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_governors
conservative ondemand userspace powersave interactive performance

查看当前策略:
root@rk3288:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_governor
interactive

查看当前支持cpu频率:
root@rk3288:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_frequencies
126000 216000 312000 408000 600000 696000 816000 1008000 1200000 1416000 1512000 1608000

查看当前cpu频率:
root@rk3288:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_cur_freq
600000


cpufreq_interactive.c
cpufreq_performance.c
cpufreq_userspace.c
cpufreq_powersave.c
cpufreq_ondemand.c

平台可以支持多种策略,每个策略单独一个文件.
策略由struct cpufreq_governor表示, 通过cpufreq_register_governor()接口注册.
由于还有其他参数,比如当前cpu数量,当前策略最大最小支持频率等, cpufreq_governor被包在struct cpufreq_policy用于cpu core子系统中.

cpufreq_governor.c

策略中有些控制行为是相同的,也独立抽取出来.

rockchip-cpufreq.c:

系统中只存在一个cpu驱动, 而且驱动是平台相关的,由struct cpufreq_driver表示,通cpufreq_register_driver()注册到系统.
cpufreq_register_driver -> subsys_interface_register -> cpufreq_add_dev -> cpufreq_driver->init -> cpufreq_init*

cpufreq_init()主要用于设定相应策略的最大和最小工作频率

策略只是根据不同情况如负载来计算出当前要设置的频率,而最终对频率的设置由驱动完成, 通过cpufreq_driver中的target()函数指针实现.

cpufreq.c
freq_table.c

cpu策略核心模块.


默认使用策略可参考: 
[RK3288][Android6.0] 调试笔记 — CPU默认调度策略

策略初始化注册完之后,会开一个定时器,周期检测系统负载变化来动态调节频率,流程如下:

cpufreq_interactive_timer -> //timer会被定期执行计算当前系统负载
wake_up_process(speedchange_task) -> //唤醒负载计算线程
cpufreq_interactive_speedchange_task ->
__cpufreq_driver_target ->
cpufreq_driver->target ->
cpufreq_target -> rockchip-cpufreq.c
cpufreq_frequency_table_target //设置的target freq要在policy的运行范围内
dvfs_clk_set_rate ->
clk_dvfs_node->vd->vd_dvfs_target ->
dvfs_target ->
dvfs_get_limit_rate //这里会判断温度的litmit值(temp_limit_rate变量)
clk_set_rate


引述:


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
CPU 策略学习:interactive分析,结合代码
Linux 2.6 内核中的最新电源管理技术综述
Linux动态频率调节系统CPUFreq之三:governor【转】
减少 Linux 耗电,第 2 部分: 一般设置和与调控器相关的设置
迅为RK3568开发板Linux_NVR_SDK系统开发-查看NPU/GPU/CPU频率使用率
Cubieboard 超频实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服