本章节分析governor之一的step_wise。
1、基本术语概念
在介绍之前,先介绍几个术语概念来帮助大家理解:
1.1 trip point
可以理解为一个阈值吧,每一个温度区间的阈值可以理解为一个trip point。
1.2 cooling state
可以认为是温控调节的下一目标的索引,以频率调整为例,state =1 对应100MHZ,state=2表示200MHZ,即通过该值可以找到目标频率,如果是其他方法类似。
1.3 zone device state
表示zone device 当前温度的状态,比如我们可以把state分为4种状态:cold、normal、hot、critical,分别对应温度区间为:
Cold: temperature <= 3°C,对应温控策略通常升压提频,以达到升温的目的。
Normal: temperature > 3°C && temperature <= 50°C,对应策略通常为持续监控,电压和频率暂不做调整
Hot: temperature > 50°C && temperature <= 80°C,对应策略为降压降频,同时监控周期缩短
Critical: temperature > 80°C,对应策略一般为重启系统
2、Governor实现介绍
step_wise 算法在计算 target cooling state 的过程中,除了需要知道是否 throttle,还添加了一个 trend 作为参考条。trend 表示温升趋势,Linux Thermal Framework 定义了五种 trend type,见 enum thermal_trend,即稳定(THERMAL_TREND_STABLE), 上升(THERMAL_TREND_RAISING), 下降(THERMAL_TREND_DROPPING), 最高温线(THERMAL_TREND_RAISE_FULL),最低温线(THERMAL_TREND_DROP_FULL)。
step_wise governor 对于 cooling_state 选择的策略:
1)当前温度大于当前trip point时
a. if the trend is THERMAL_TREND_RAISING, use higher cooling state for this trip point
b. if the trend is THERMAL_TREND_DROPPING, do nothing
c. if the trend is THERMAL_TREND_RAISE_FULL, use upper limit for this trip point
d. if the trend is THERMAL_TREND_DROP_FULL, use lower limit for this trip point
2)当前温度小于当前trip point时
a. if the trend is THERMAL_TREND_RAISING, do nothing
b. if the trend is THERMAL_TREND_DROPPING, use lower cooling state for this trip point, if the cooling state already equals lower limit, deactivate the thermal instance
c. if the trend is THERMAL_TREND_RAISE_FULL, do nothing
d. if the trend is THERMAL_TREND_DROP_FULL, use lower limit,if the cooling state already equals lower limit,deactivate the thermal instance
step_wise governor 是每个轮询周期逐级提高冷却状态,是一种相对温和的温控策略。