本文部分内容参考万字长文 | Thermal框架源码剖析,特此致谢!
Linux Thermal Framework是Linux系统下温度控制相关的一套架构,主要用来解决随着设备性能不断增强而引起的日益严重的发热问题,控制系统运行过程中各个器件所产生的热量,使设备温度维持在一个安全、舒适的范围,防止SoC 等硬件芯片也会因过热而造成系统不稳定甚至缩减芯片寿命。
一、框架结构
Thermal框架由core、governor、zone、cooling device以及sensor driver组成。
Thermal整体框架结构如下图所示:
基于系统层次的框架结构如下图所示:
- thermal core
thermal主要的程序,驱动初始化程序,维系thermal zone、governor、cooling device三者的关系,并通过 sysfs 和用户空间交互。
- thermal govnernor
温度控制算法(温控策略)。解决温控发生时(即throttle),cooling device如何选择cooling state的问题。
Linux内核中提供了多种温控策略,如下:
- step_wise
- power_allocator
- user_space
- fair_share
- bangbang
可见,Linux内核的温控策略是比较精细的。
- thermal cooling device
系统温控的执行者,实施冷却措施的驱动(cpufreq_cooling、cpuidle_cooling、 devfreq_cooling等)。通俗地讲,就是降温设备,如风扇。cooling device根据governor计算出来的state,实施冷却操作,一般情况下,state越高表示系统的冷却需求越高。cooling device需要与trip point进行绑定,当 trip point 触发后,由相应的cooling device 去实施冷却措施。
这里有一点需要特别说明:CPU和GPU(当然,也包括其它类似设备)不仅是发热设备(即需要实施温控策略的设备),也可以是降温设备,当我们降低CPU/GPU的运行频率的时候,它们就在充当降温设备。降低产热量即是在降温。
- thermal zone device
创建thermal zone结点和连接thermal sensor,在/sys/class/thermal/目录下的thermal_zone*,通过dtsi文件进行配置生成。thermal sensor是温度传感器(即热敏电阻NTC),主要是给thermal提供温度感知。
二、代码结构
Thermal框架整体代码结构如下图所示:
可以看到,还是挺复杂的。通过上图中复杂的层次就可以推断,代码量及其中包含的知识点是非常多的。不过没有关系,后续文章会将整体拆分为一个个子部分,分别对每个子部分进行讲解和分析。