完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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
平台可以支持多种策略,每个策略单独一个文件. 策略由struct cpufreq_governor表示, 通过cpufreq_register_governor()接口注册. 由于还有其他参数,比如当前cpu数量,当前策略最大最小支持频率等, cpufreq_governor被包在struct cpufreq_policy用于cpu core子系统中.
策略中有些控制行为是相同的,也独立抽取出来.
系统中只存在一个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()函数指针实现.
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 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
606 浏览 0 评论
870 浏览 1 评论
768 浏览 1 评论
1984 浏览 1 评论
3230 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:00 , Processed in 0.429920 second(s), Total 42, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号