thermal作用
Linux Thermal 是 Linux 系統下溫度控制相關的模塊,主要用來控制系統運行過程中芯片產生的熱量,使芯片溫度和設備外殼溫度維持在一個安全、舒適的范圍。
那下面我們就來一起看看對於溫度控制這樣一個需求,Linux 內核是怎么實現的。
概念
-
thermal zone
溫度控制區域。 -
sensor
獲取溫度。 -
trip points
溫度跳變點,或者是溫度閾值。 -
cooling device
Thermal Cooling Device 是可以降溫設備的抽象,能降溫的設備比如風扇,這些好理解,但是像CPU、GPU 這些 Cooling devices 怎么理解呢?
其實降溫可以從兩方面來理解,一個是加快散熱,另外一個就是降低產熱量。風扇,散熱片這些是用來加快散熱,CPU、GPU 這些 Cooling devices 是通過降低產熱來降溫。 -
governor
溫度控制的策略。-
step wise
節流邏輯:使用趨勢來節流。*如果熱區域正在“升溫”,這將通過一個步驟來限制所有與該區域及其特定跳變點相關的冷卻設備。如果該區域正在“冷卻”,它會將設備的性能提高一步。 -
user space
給用戶側發送一個事件,由用戶側來處理 -
gov_bang_bang
控制風扇的一種簡單策略,當超過溫度T0時開啟風扇,當溫度低於T1時關閉風扇,T0 > T1。 -
power_allocator
使用PID控制算法來精細控制溫度變化。
-
framework
軟件分層
-
core層
governor、cooling device、thermal zone等的核心接口。 -
governor層
不同governor實現。 -
driver層
不同硬件平台的驅動實現。
thermal zone的注冊在thermal_init中完成,這要比thermal driver早完成。也正是因為此,才可以在thermal driver中將thermal sensor和thermal zone綁定。這樣每個thermal zone就有對應的thermal sensor操作函數,可以讀取溫度值。thermal_init是fs_initcall,而hisi_thermal_driver是module_init。
thermal驅動主要獲取內存映射、中斷資源、時鍾信息等,注冊中斷處理函數,並且添加thermal sensor到thermal zone。中斷處理線程函數會更新thermal的溫度,同時每個thermal zone都有work queue去輪詢讀取溫度。
主要結構體的關系
運行框圖
- 初始化
- 溫度監控流程圖
在platform的driver調用thermal_zone_device_register接口后會啟動一個work queue,定期的獲取溫度來查看是否異常,溫度分為critical和non-critical兩種情況,critical的時候會處理關機和降溫,non-critical會執行一些其他監控,最后會重新添加work再次監控。
文件節點
thermal_of_cooling_device_register
/sys/class/thermal/ folder as cooling_device[0-*]
thermal_zone_device_register
/sys/class/thermal folder as thermal_zone[0-*].
文件
文件名 | 作用 | |
---|---|---|
drivers/thermal/thermal_sysfs.c | 文件節點 | |
drivers/thermal/thermal_core.c | governor: 注冊、去注冊、綁定 zone:配置監測周期、各trips處理(critical、non-critical) power actor:功率系數,設置獲取cooling設備的最大/最小功率 device:cooling/zones device,注冊、去注冊、綁定、去綁定等api接口 |
|
include/linux/thermal.h | 對外接口頭文件 |