IPA(Intelligent PowerAllocation)是由ARM开发的符合linux内核thermalframework的governor,代码中的名字为power_allocator,旨在满足温控效果的条件下最大化性能。

一、背景

熟悉ARM终端芯片系统的开发人员,应该对EAS(Energy Aware Scheduler)、Energy/Power Model不陌生,IPA正是这种能效思想在温控领域的体现。基于如下理论:

  • SoC的温度与功耗成正相关,功耗越高则温度越高

  • Soc的功耗主要由其上的IP Core(CPU、GPU等)消耗

因此,可以通过控制功耗达到控制温度的目的,通过在各个IP Core间合理分配功耗可以最大化温控下的性能表现。基于上述理论,IPA实现包含了两大核心功能:基于PID的温度闭环控制器、Power Allocator(PA)。


二、为什么需要IPA governor

为了更好的说明IPA的开发目的,这里以CPU上常使用的step-wise governor作对比,看看传统governor的优点及不足。


1. Step-wise governor

作为CPU温控常用的governor,step-wise在温控管理上有着良好的表现。Step-wise将温度趋势分为三种:上升、下降、稳定,根据配置的温度触发点(TripPoint)及温度趋势以步进的方式调节CPU的状态,具体来讲就是调节频率。比如温度已经超过触发点同时温度处于上升状态,则step-wise就会将CPU的coolingstate上调一级(对应操作是频率降低),然后继续轮询CPU的温度,通过判断温度趋势再执行相应动作。

上述过程至少存在两个缺点:

1)该控制属于开环控制,step-wise只是根据配置及温度趋势机械地进行步进调节,它并不关心此次的调节动作是否能够达到温控的目的。

2)Step-wise直接控制CPU的频率,在温度及其趋势确定的情况下,则相应的CPU频率也就确定,这对于性能会产生不利影响,特别是移动终端系统上极短时间的性能提升对温升影响较小,但能更好的改善性能体验。

2. IPA的优点

IPA实现了闭环控制,通过闭环调节使得升温时温度可以稳定在目标温度处,提高控制精度。

IPA实现了多个IP core之间Power的动态分配,实现资源的优化配置。以小核、大核、GPU为控制对象来讲,即使温度已经达到目标温度,但是根据各个小核、大核、GPU的负载情况,最需要性能的处理器仍然有可能跑到最高频率,这种基于负载的power动态分配策略对性能比较友好。


3. IPA温控效果模拟

当温度超过Tswitch_on时,IPA governor开始工作,通过PID controller闭环控制,使温度能够稳定在Ttarget,并尽可能减少波动,实现预期的温度控制目标。当整体温度下降到Tswitch_on时,IPA governor停止工作。

图一


三、简化框架

对于IPA来讲,主要的输入为温度和各个Core的性能需求。温度可以来自SOC,也可以来自板温,IPA把采集温度与目标控制温度的温差作为控制输入。各个IP Core的性能需求是通过当前的负载来计算的,然后利用OPP(Operating Performance Point)及EM(Energy Model)转换为Power Request作为IPA的输入。而IPA的输出是PowerGranted,然后再通过OPP及EM转换为性能指标(比如最大运行频率)。如此的循环往复最终实现对硬件的温度控制。

图二

四、IPA功能

IPA governor包含两个核心功能PID温度控制器和PA(Power Allocator)。PIDController实现PID闭环控制,用于温度的跟踪控制。PowerAllocator实现基于核心负载的Power Budget分配。

图三

1. PID温度控制器

PID( Proportional Integral Derivative)控制即比例积分微分控制,是最早发展起来的控制策略之一,由于其算法简单、鲁棒性好和可靠性高,被广泛应用于工业过程控制,尤其适用于可建立精确数学模型的确定性控制系统。PID控制属于闭环控制。IPA的PID Controller其控制输入为目标温度与当前温度的差值e,通过比例、积分、微分计算累加求和后再与sustainable_power相加即为当前温度下允许的最大功耗值。Sustainable_power是指在保证满足目标温度target_temerature的条件下所允许的最大功耗值。PIDcontroller的控制函数可以表示为如下公式:

其中,

  • ????=target????????????????????????????????????????????−????????????????????????????????????????????????????????????????????????

  • ???????????????????????????????????????????? is the sum of previous errors

  • ????????????????????????????=????−????????????????????????????????????????????????????

2. 比例控制项

比例项能够提高系统的响应速度和稳态精度,但是过大的比例控制容易导致系统超调和振荡,且单纯的比例控制无法消除系统的稳态误差。kp对控制偏差e起到线性缩放的作用。

IPA关于比例项系数给出两个值kpukpokpu当Tcurr低于 Ttarget该参数进行计算,反之使用kpo进行计算,默认计算公式如:

kpu = (2 * sustainable_power) / (Ttarget  - Tswitch_on)

kpo = (sustainable_power) / (Ttarget  - Tswitch_on)

单独考虑比例项,或略积分、微分项对power的控制效果如图:

图四


3. 积分控制项

积分项是对温差e累计,积分控制项能够启动消除稳态误差的作用,但也可能带来如积分饱和等现象。

IPA关于积分项系数ki默认计算公式如:

Ki = int_to_frac(10) / 1000


4. 微分控制项

积分项是温差e的变化趋势,具一定预测效果,可以减少超调量,提高温控稳定性。

IPA关于微分项系数kd默认值为0,即默认不考虑微分项。


五、Power Allocator

Power Allocator负责将PID Controller计算出的Power在各个Cooling device进行分配。分配基于Cooling device需求的功耗Prequest_i、cooling device的权重Wi进行。

首先,计算所以cooling device需求功耗的加权和:

然后,计算各个cooling device按权重应该分得的power:

但是如果某个cooling device获取的Pgranted_i 大于该cooling device实际支持的最大功耗Pmax_i,则其最多只能获取Pmax_i,这样就多分配了Pextra_i = Pgranted_i — Pmax_i,累计所有多分配的power:

最后再将Pextra进行再分配,分配的权重为Wextra_i =

那么再分配得到的功耗Pextra_granted_i= Wextra_i * Pextra

最终每个cooling device所得到的Power为Pgranted_i + Pextra_granted_i

图五

1. 关于Prequest_i

对于每个IP core其功耗可以分为静态功耗、动态功耗。以CPU来讲,静态功耗由工艺制程、面积、电压、温度、静态管类型等等因素决定,在较新的内核(cpucooling device)已经不再将静态功耗计入Prequest_i。那么Prequest_i则主要由动态功耗及CPU的负载决定:

Prequest_i = Pdynamic_i* Load / 100


六、如何使用IPA

由于Linux Kernel4.2之后的版本已经开始支持IPA了,这样就省去了从ARM移植IPA代码的工作量。现在只需要用户自己实现thermal sensor的驱动以提供温度和在dts中配置thermal zone这两项工作。

1. 代码路径

IPA gover代码路径:/drivers/thermal/power_allocator.c

2. 关于DTS配置

与其他thermal governor的对dts的配置要求不同,IPA governor新增了sustainable-power属性;需要提供两个类型为passive的trip point分别作为IPA的起控温度Tswitch_on和目标温度Ttarget;需要为每个cooling device指定权重w即dts里contribution属性;当然thermal zone的governor需要配置为power_allocator。

图六


七、总结

本文主要分析了IPA的两个核心功能及dts配置,虽然目前使用IPA相对简单,但是在实际运用上会有不少的问题,PID参数的调节、是否能够实现真正的闭环、power如何分配等等,这些都需要大量的实验来调节验证温控效果。

参考资料:
  • https://developer.arm.com/tools-and-software/open-source-software/linux-kernel/intelligent-power-allocation

  • Linuxkernel-5.4 source code

长按关注

内核工匠微信

Linux 内核黑科技 | 技术文章 | 精选教程

Linux thermal governor之IPA分析相关推荐

  1. Linux Thermal机制源码分析之Governor

    一.thermal_init() 在开始源码分析之前,需要先说明一下.Linux 内核代码庞大而复杂,如何 reading the Fxxking source code 相信是很多从事 Linux ...

  2. Android/Linux Thermal框架分析及其Governor对比

    https://www.cnblogs.com/arnoldlu/p/6388151.html 图表 1 Thermal框架 随着SoC性能的快速提升,功耗也极大提高,带来的负面影响是SoC的温度提高 ...

  3. Linux内核Thermal框架详解十四、Thermal Governor(4)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, "热散由心静,凉生为室空" ...

  4. Linux内核Thermal框架详解十一、Thermal Governor(1)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, 特此致谢! 一.概述 Thermal Gove ...

  5. Linux内核Thermal框架详解十二、Thermal Governor(2)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, "热散由心静,凉生为室空" ...

  6. Linux内核Thermal框架详解十三、Thermal Governor(3)

    接前一篇文章Linux内核Thermal框架详解十二.Thermal Governor(2) 二.具体温控策略 上一篇文章介绍并详细分析了bang_bang governor的源码.本文介绍第2种温控 ...

  7. linux病毒木马分析,Linux平台“盖茨木马”分析

    最近对Linux.BackDoor.Gates.6的一个病毒样本进行了分析,通过调查发现Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马.这篇文章主要介绍了Linux ...

  8. Linux内核--网络栈实现分析(二)--数据包的传递过程--转

    转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的&qu ...

  9. Linux内核抢占实现机制分析【转】

    Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...

  10. linux内核自解压,Linux的初始内核自解压分析

    Linux的初始内核自解压分析 (2009-03-27 19:46:46) 标签: it Linux的初始内核解压 2007-09-19 15:02 来源:论坛整理 作者:lucian_yao [网友 ...

最新文章

  1. Shell脚本十三问
  2. 分享十款免费数据恢复软件
  3. (二十一)unity4.6学习Ugui中文文档-------交互-Supported Events amp; Raycasters
  4. Android --- 199 198开头手机号正则表达式无效
  5. JavaWeb 入门篇(2)Hello Servlet!!!
  6. JSON学习笔记(三)- 数组
  7. linux cron读哪个文件,linux-管理cron作业创建的日志文件
  8. thymeleaf如何迭代遍历,如何判断
  9. shell除去重复的行——uniq命令
  10. oracle的sql语句,where后面的部分,执行顺序是从左往右,还是从右往左?
  11. 奖金67万!2020 中国计算机学会大数据与计算智能大赛启动!
  12. 【kafka】已解决 kafka No current assignment for partition
  13. Atcoder Yahoo Programming Contest 2019 简要题解
  14. tidyr | 变量取值组合、缺失值处理、变量分列与合并
  15. JAVA爬虫--编写第一个网络爬虫程序
  16. 每人都会遇到的三件事: 1.楼上传来弹珠的声,2.曾经的梦里出现过,3.马上就要睡着却突然感觉下坠...
  17. Android 11 system_server 读写 SDCARD
  18. 召回和粗排负样本构造问题
  19. navicat 表合并查询_navicat怎么合并表格
  20. 20145325张梓靖 《网络对抗技术》 Web安全基础实践

热门文章

  1. 爬虫抓取暗黑3国服天梯榜数据及分析
  2. 码怪之程序员的日常语录
  3. Little Gyro and Sets(第二届中国计量大学ACM程序设计竞赛个人赛)
  4. Mac苹果电脑开启任何来源选项详细教程
  5. 百度脑图制作的简单的个人介绍
  6. 今年还能回家过年吗?查询下各地出行隔离政策
  7. cba比赛比分预测_2019-20赛季CBA第5轮比赛预测!
  8. access查找出生日期年份_Access时间日期比较查询的方法总结
  9. im2col的原理和实现
  10. 关于计算机的英语作文初中,computer初中英语作文范文