Thermal engine调试

一、调试thermal-engine的温控策略

1.找到当前的thermal engine配置

adb shell cat /vendor/etc/thermal-engine  > thermal-engine.conf

2.修改该文件后推送到设备上

3.将”debug“放到thermal-engine.conf的首行,然后重新启动thermal-engine服务

adb root
adb stop thermal-engine //停止thermal-engine 服务
adb mount -o rw, remount /vendor       //解决文件系统只读问题
adb push thermal-engine.conf /vendor/etc/thermal-engine.conf  //将新修改的温控数据push到系统上
adb shell sync .    //同步
adb shell start thermal-engine --debug &   //启动thermal-engine服务

此时新的thermal-engine 温控策略就会生效

thermal-core的温控如果要修改温控数据,需要修改关于thermal的设备树文件。

4.logcat查看系统温度log

adb logcat –v time –s ThermalEngine

5、调试每个sendor的温度,看温控策略是否生效  

在内核中配置CONFIG_THERMAL_EMULATION这个宏,在thermal_zone目录下就会生成emul_temp节点,通过给这个节点写温度,去测试sensor的温控策略是否触发

 

6、温控策略讲解

 降频的范围是0~3,代表 频率的范围在 1305600khz~960000kHz.

按照图片上的数据,如果读到sensor的温度大于等于95度就会降频。具体是怎么降频的。是按照step_wise算法进行降的。

(1)step_wise算法

step_wise governor 对于 cooling_state 选择的策略:

a. 当 throttle 发生且温升趋势为上升,使用更高一级的 cooling state;
b. 当 throttle 发生且温升趋势为下降,不改变 cooling state;
c. 当 throttle 解除且温升趋势为下降,不改变 cooling state;
d. 当 throttle 解除且温升趋势为上升,使用更低一级的 cooling state;

step_wise governor 是每个轮询周期逐级提高冷却状态,是一种相对温和的温控策略。

根据上面的算法:

  • 如果此时我们cpu的频率为13056000khz(0级),此时如果我们将温度升到95度,95度触发就会降频到1248000kHZ(1级).
  • 在2级的基础上如果温度将温度升为96度,那么就会降频到2级,这就印证了上面算法的a点,温升趋势为上升。那么就会使用更高一级降频
  • 如果此时我们从96度降到95度,那么2级保持不变,就印证了上面算法的b点,在温控已经触发时且温升趋势为下降,则保持不变。
  • 如果我们从96降到94度,那么已经清除触发温度,频率就会从2级升到1级。
  • 如果再降到93度就会升到0级

因为上面的降频范围是0~3级,所以我们只能在0~3级之间进行频率的切换。如果想触发后直接降到3级,可以将upper_limit和lower_limit都设为3.

 

 

    (2)low_limit 

移动设备在温度比较低的情况下同样会存在诸如无法充电等问题,所以low_limitgovernor应运而生,这个特殊的温控算法用于低温环境下的设备加热。
它的温控策略基本上就是反向的step_wise,在这里就不进一步展开叙述了,感兴趣的同学可以自行查看kernel源码。

  (3) user_space 

user_spacegovernor是通过uevent将温区当前温度,温控触发点等信息上报到用户空间,由用户空间软件制定温控的策略。

 

7、thermal-engine和thermal-core控制时间线

 

 8、disable-thermal-zone属性说明

设备树中thermal中的  disable-thermal-zone;属性代表改sensor不会再进行温度的读取,但是通过emul_temp去写温度值还是能触发相应的动作。

 
posted @ 2022-08-10 09:39  轻轻的吻  阅读(26)  评论(0编辑  收藏  举报