“热散由心静,凉生为室空” - linux温控的那些事儿
一、背景
在科技发展日新月异的如今,随着设备性能越来越强劲,设备中各个器件工作时产生的热量也越来越高。而移动设备发热是影响用户体验的重要因素,SoC 等硬件芯片也会因过热而造成系统不稳定,甚至缩减芯片寿命,“如何给设备降温“成为了当下一个重要的课题。
移动终端结构紧凑,内部空间可说是寸土寸金,这就使得台式机上风冷、水冷等常规硬件散热手段在手机上没有用武之地,软件温控成了控制设备发热的关键武器。毕竟无法“小扇引微凉,悠悠夏日长”,那就得操作系统发挥主观能动性,“热散由心静,凉生为室空”,减少不必要的活动,控制自身的发热量。接下来我们一起去看一看Linux为了降温都做了哪些事。
二、Linux温控框架
图1 LinuxThermal Framework架构
LinuxThermal Framework是Linux系统下温度控制相关的一套架构,主要用来控制系统运行过程中各个器件所产生的热量,使设备温度维持在一个安全、舒适的范围。
从系统不同层级的角度可以划分为以下三个部分:
Userspace(用户空间):表现形式为sysfs文件节点。路径为sys/class/thermal/,thermal_zone设备为thermal_zone[n]文件目录, cooling_device设备为cooling_device[n]文件目录。用户空间的软件可以通过访问thermal class的文件来获取到各个温区当前的温度以及温控触发点等信息,如果具有某些权限,甚至可以通过设置冷却设备下的状态值来更改温控的策略。目录下的各个文件的作用与意义下一节再详述。
Kernelspace(内核空间):核心为thermal_core。获取温度的设备抽象为thermal_zone_device, 控制温度的设备抽象为thermal_cooling_device,温控策略抽象为thermal_governor。
Hardware(硬件层):thermal_zone -> tsens0, tsens1, …,硬件上的温控传感器及热敏电阻等被软件抽象为温区; cooling_device -> cpu, gpu, battery, …,可以通过调整自身状态来达到温度控制的IP被软件抽象为冷却设备。
三、Thermal Zone(温区)与Cooling Device(冷却设备)
图2 tsensor布局
图2为某款移动终端SOC的温度传感器布局图,片上有28颗传感器,分别监控各个子系统的当前温度。同样在PCB上还包含有多个热敏电阻(NTC), 这些NTC通过算法的计算后可以获得手机主板上各个区域的温度。
软件上将这些tsensor及ntc等可以获取温度的设备描述为thermal zone, 在代码中以dts的形式来描述。
示例代码:
polling-delay-passive:温控发生时的轮询周期。
上文配置为0,代表不使用轮询方式,通过tsensor中断触发温控。
polling-delay:温控未发生时轮询周期。
thermal-governor:该温区发生温控时所使用的算法。
上文选择为”user_space”算法,下一节将详述该算法。
thermal-sensors:对应的tsensor。
上文配置为”tsens0 1”代表使用tsens0这个温度传感器的通道1。
trips:温控触发点。
其中”active-config0”为该温区的温控触发点。
temperture为触发温度,上文中的配置为(125000) / 1000 = 125度发生温控;
hysteresis为滞后温度,上文配置为”1000”, 表示当该温区温度下降到(125 – 1000/1000) = 124度时解除温控。
type配置为”passive”,即当温控发生后,轮询周期改为使用polling-delay-passive。
上述为thermal_zone在编码阶段的描述形式。当操作系统运行后,thermal_zone在用户空间以sysfs文件形式呈现。
available_policies:可选择的温控算法。
type:该温区的名称。
如上文中的“aoss-0-usr”,”cpu-0-0-usr”等dts node名称。
temp:该温区的当前温度。
trip_point_0_type/trip_point_0_temp/trip_point_0_hyst:触发点0的名称/触发温度/滞后温度。
如上文中的”active-config0”, “temperature”,“hysteresis”。
现在我们已经将tsensor跟NTC以thermal_zone的形式注册到系统中,可以实时的监控设备各个子系统的发热状况。当温度超过所设阈值时,将会上报中断,接下来就是冷却设备的表演时刻了。这些可以通过控制自己的状态达到降温效果的设备,操作系统将其抽象为cooling_device(冷却设备)。像cpufreq, devfreq等driver在初始化的时候会调用of_thermal.c提供的接口在thermal_core中注册cooling device。
实例代码:
cooling-maps:
该温区对应到的冷却设备列表。
cpu00_cdev:
冷却设备的名称。
trip:该冷却设备对应的温区温控触发点。
上文中,“cpu00_cdev“对应的触发点为”cpu00_config”,即当”cpu-0-0-step”这个温区达到110度时,触发冷却操作。
cooling-device:对应的真正执行冷却操作的设备及最大/最小状态,格式为< phandle of device, min_state,max_state>。
上文中配置为”cpu0_isolate 11“,即达到该触发点时,对CPU0进行isolate。
当操作系统运行后,cooling_device同样以sysfs文件形式在用户空间呈现
cur_state:该cooling_device的当前cooling state。
max_state:该cooling_device的最大cooling state。
type:该cooling device的名称。
四、Thermal Governor(温控算法)
Thermal Governor即温控算法,解决温控发生时,如何选择cooling state的问题。
当前可用的governor包括:
bang_bang
step_wise
low_limits
user_space
power_allocator
bang_bang governor:
由于bang_bang governor是用在使用风扇散热的设备中的算法。
首先我们需要确定throttle即温控是否触发。这包括了两种情况,第一种为当前温度大于温控阈值,第二种为当前温度小于温控阈值但是大于滞后温度(温控解除温度),并且是处于降温的过程中。
图3 bang_bang governor 降温流程
bang_banggovernor的降温策略跟它的名字一样简单,可以用一句话来概括:
当throttle发生,打开风扇;当throttle解除,关闭风扇。
step_wise governor:
step_wise算法在计算target cooling state的过程中,除了需要知道是否throttle,还添加了一个参考条: trend。trend顾名思义即温升趋势,Linux Thermal Framework定义了三种trend type,即上升(RAISING),下降(DROPPING)与稳定(STABLE)。
图4 step_wise governor 降温流程
step_wise governor对于cooling_state选择的策略:
当throttle发生且温升趋势为上升,使用更高一级的cooling state;
当throttle发生且温升趋势为下降,不改变cooling state;
当throttle解除且温升趋势为上升,不改变cooling state;
当throttle解除且温升趋势为下降,使用更低一级的cooling state;
step_wise governor是每个轮询周期逐级提高冷却状态,是一种相对温和的温控策略。
low_limit governor:
移动设备在温度比较低的情况下同样会存在诸如无法充电等问题,所以low_limitgovernor应运而生,这个特殊的温控算法用于低温环境下的设备加热。
它的温控策略基本上就是反向的step_wise,在这里就不进一步展开叙述了,感兴趣的同学可以自行查看kernel源码。
user_space governor:
user_spacegovernor是通过uevent将温区当前温度,温控触发点等信息上报到用户空间,由用户空间软件制定温控的策略。
power_allocator governor:
power_allocatorgovernor即IPA算法,是由ARM 在2015年提交及纳入Linuxkernel mainline。
IPA(Intelligent PowerAllocator)模型的核心是利用PID控制器,ThermalZone的温度作为输入,可分配功耗值作为输出,调节Allocator的频率和电压值。由于篇幅所限,具体的温控策略不再详述。
五、后续Linux thermal发展方向
如何控制移动终端发热,在性能与功耗之间取得绝佳的平衡,一直以来都是各大移动芯片与终端厂商持续努力的方向;而在开源社区,像IPA等温控算法也一直在不断演进;相信未来的移动终端产品在发热方面会有越来越好的表现。
参考:
https://lwn.net/Kernel/
长按关注
内核工匠微信
Linux 内核黑科技 | 技术文章 | 精选教程
“热散由心静,凉生为室空” - linux温控的那些事儿相关推荐
- 小说 · 凉生,我们可不可以不忧伤
一.凉生,我们可不可以不忧伤 · 人物关系 二.电视剧相关歌曲 不忧伤的爱[钟汉良] 近在远方[马右上] 生生不息[马天宇] 最美的相遇[徐佳莹] 光源[张磊] 转载于:https://www.cnb ...
- 2019linux考试题库,生信人的linux考试 2019-05-03
生信人的linux考试(20题) 1.在任意文件夹下面创建形如 1/2/3/4/5/6/7/8/9 格式的文件夹系列 mkdir 生信人的linux考试 ls cd 生信人的linux考试/ mkdi ...
- 生信人的linux考试 题解
原帖:生信人的linux考试 | 生信菜鸟团 (bio-info-trainee.com) 一.在任意文件夹下面创建形如 1/2/3/4/5/6/7/8/9 格式的文件夹系列. mkdir -p /1 ...
- 华为暂缓校招,解散校招群,冲上热搜,引发应届生强烈不满!
来自:非著名程序员 最近,华为冲上了微博热搜榜,原因就是华为疑似暂缓 2023 届校招. 据传 11 月 16 日下午开始,在脉脉.微博.小红书等社交平台上,不少用户爆料华为暂缓 2023 届校园招聘 ...
- 华为暂缓校招,冲上热搜,引应届生不满
大家好,我是校长. 昨天傍晚,华为冲上了微博热搜榜,原因就是华为疑似暂缓 2023 届校招. 据传 11 月 16 日下午开始,在脉脉.微博.小红书等社交平台上,不少用户爆料华为暂缓 2023 届校园 ...
- linux大作业聊天室报告,Linux聊天室系统期末大作业.docx
NANCHANG UNIVERSITY <Linux 系统编程>课程设计 题目:Linux 聊天室报告 学院:软件学院 专业:计算机软件 班级:计软 121 班 姓名:李俊楠 起讫日期: ...
- 生信Linux书籍,生信人的Linux考试
(试题是生信菜鸟团论坛上爬过来的,使用的服务器是转发生信技能树推文在朋友圈集3个赞换的,学习的教程是生信技能树放在B站上的. 神呀,保佑Jimmy大神吧,愿他老人家福寿.安康~~~) 重点: (去可视 ...
- 生信人的linux考试
一.在任意文件夹下面创建形如 1/2/3/4/5/6/7/8/9 格式的文件夹系列. mkdir test cd test mkdir -p 1/2/3/4/5/6/7/8/9 二.在创建好的文件夹下 ...
- 生信基础巩固Linux篇
基础篇 Linux优势 系统更加稳定,处理数据更方便 大多数服务器以Linux为内核 常用路径命令 pwd 查找当前路径 ls 查找当前路径下的文件 ls dirname 查看某指定文件夹下的文件 l ...
- 【2016阿里安全峰会】风声与暗算,无中又生有:威胁情报应用的那些事儿【附PDF下载】...
一年一度的阿里安全峰会创立于 2014 年,每年在7月举办,今年已是第三届,今年于7月13-14日在北京国家会议中心举办.阿里安全峰会旨在促进亚太区信息安全行业发展,为本地区信息安全组织.信息安全专业 ...
最新文章
- 深度学习中的优化算法串讲
- linux修改mysql默认大小写配置,linux下设置mysql不区分大小写
- 密码学专题 OpenSSL专题
- 【Pytorch神经网络理论篇】 14 过拟合问题的优化技巧(一):基本概念+正则化+数据增大
- 领域应用 | 中医临床术语系统
- ❤JavaScript系列6部曲:语法篇(万字长文)❤
- Redis学习笔记——SpringDataRedis的使用
- matlab分支定界法linprog_序列比对(二十二)——中间字符串分支定界方法中更紧的界...
- zabbix常见配置集合
- Three.js学习07
- Typora_Markdown_图片标题(题注)
- CMD命令创建文件夹快捷方式
- Android移动应用开发学习——实现简单新闻APP
- linux中彻底分析#!bin/sh是什么意思
- 喉炎在临床上的症状表现
- NodeBB论坛搭建
- linux ipcs 命令详解
- Non-static method ‘selectUser(com.lsc.bean.admin)‘ cannot be referenced from a static context
- 关于java读写文件
- 灵魂拷问:学Python搞一个云服务器到底能干嘛?