一文介绍Linux EAS
能量感知调度(Energy Aware Scheduling,简称EAS)是目前Android手机中Linux线程调度器的基础功能,它使调度器能预测其决策对CPU能耗的影响。依靠CPU的能量模型(Energy Model,简称EM),EAS能为每个线程选择一个最能节约能量的CPU,并把对系统性能的影响降到最低。
EAS仅在异构CPU拓扑(如Arm big.LITTLE)上运行,因为这是EAS节约能量潜力最大的CPU拓扑结构。
注:本文分析整理基于OPPO Reno9 Pro+的开源代码https://github.com/oppo-source/android_kernel_oppo_sm8475
一、关键概念
1.1capacity
算力(capacity)是CPU调度中的一个基础概念,它反映的是一个CPU的计算能力,是个规格化的值,可以通过读取Android手机的文件节点
/sys/devices/system/cpu/cpu*/cpu_capacity获得每个CPU的最大算力。
CPU的最大计算能力= capacity-dmips-mhz * cpuinfo_max_freq / 1000。
其中”capacity-dmips-mhz”表示该cpu在1mHz频率下运行时可以执行多少个dmips,可以从处理器的device tree文件中获取到;
”cpuinfo_max_freq”表示该CPU支持的最大频率,单位kHz,所以上面的公式才除以1000,把计算单位kHz转为mHz。
为了便于算力的比较与计算,把处理器中计算能力最强的CPU的最大算力规格化为了1024。
在CPU算力与频率呈线性关系的处理器中:CPU某一频率点的算力 =
(该CPU某一频点频率 / 该CPU最大频率)* 该CPU的最大算力。
1.2 opp
Operating Performance Point (OPP),表示每个CPU支持的电压频率对(voltage/frequency tuple)。CPU的每个运行频率点,都有一个对应的电压。频率与电压正相关,频率越高,需要的电压越大。
1.3 power
在弄清了CPU某一频率点的算力后,再来看看CPU某一频率点的功率。CPU的Energy Model模块提供了相关文件节点,可以用来读取到CPU某一频率点的功率。
读取文件节点/sys/kernel/debug/energy_model/pd0/*/power,可以获取小核簇CPU各个频率点的功率(mW)
Energy Model代码中通过如下公式来计算CPU每个频率点的功率:
P = C * V^2 * f,其中C是CPU的电容(可以从处理器的device tree文件中读取“dynamic-power-coefficient”获取到),V和f是一个OPP的电压和频率。
1.4 能效比
CPU每个频率点对应的power/capacity值越低,其能效比越好,同一CPU,低频率比高频率的能效比好。整体上来说,小核簇CPU的能效比优于大核簇CPU的能效比,大核簇CPU的能效比优于超大核簇CPU的能效比;但是小核簇CPU高频段能效比差于大核簇CPU低频段的能效比,大核簇CPU高频段的能效比差于超大核簇CPU低频段的能效比。
从上图的能效比曲线上,可以清楚地看出如下特点:
- 在同为200 util算力时,小核簇CPU比大核簇CPU更耗电,因此在系统负载不重时,可以让线程倾向性的运行在大核CPU的低频段,从而不让小核CPU的频率运行在高频率段,来到达到省电而不影响系统性能的目的。
- 超大核簇CPU比大核簇CPU的能效比差很多,超大核CPU能不用需尽量不要用。
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈
二、能量可感知的线程选核
EAS代替CFS的线程唤醒负载均衡代码(task wake-up balancing code
),利用CPU的Energy Model和PELT/WALT统计到的CPU、线程负载信息为唤醒线程选择一个最能省电的CPU来运行。
EAS为线程选运行CPU的代码流程如下:
2.1find_energy_efficient_cpu
find_energy_efficient_cpu()为唤醒任务找到最节能的目标CPU。在每个性能域中查找空闲算力最大的CPU,并将其作为线程运行的潜在候选CPU。然后,使用Energy Model来确定哪个CPU候选是最节能的。
一个性能域一般对应一个CPU簇,如果线程调度到性能域空闲算力最大的那个CPU上运行,能保证该簇的CPU能运行在需求的最低频率。
因为线程迁移的性能代价比较大(比如cache失效),只有选出的最节能CPU比线程当前运行的CPU节约能量大于6%时,线程才会迁移到该CPU运行。
下图列出了find_energy_efficient_cpu()中最核心的代码,并对代码进行了详细的注释。
2.2compute_energy
compute_energy()预估线程p迁移到dst_cpu运行时,性能域pd的能量消耗。compute_energy()预估线程p迁移后,pd里util最大的cpu的max
_util及所有cpu的util之和sum_util,并调用Energy Model提供的API em_cpu_energy()计算线程迁移到性能域pd时的能量消耗。
下图列出了compute_energy ()的代码,并对代码进行了详细的注释。
2.3em_cpu_energy
em_cpu_energy() 是Energy Model提供的估算性能域所有cpu的能量消耗之和的api。它有4个参数,@pd需要估算能量消耗的性能域;@max_util性能域中利用率最高的CPU的利用率,它决定了整个性能域CPU的运行频率;@sum_util性能域中所有CPU的利用率之和,用于估算整个性能域的能量消耗;@allowed_cpu_cap 性能域允许的CPU的最大算力(可能由于thermal的限制,比原始值小)。
em_cpu_energy()运行流程如下:
- 根据性能域中利用率最高的CPU的利用率max_util估算性能域CPU需要的最低运行频率,这里有两点需要注意,估算频率用的利用率是1.25倍max_util,同时预期的CPU调频Governor是Schedutil或者与其类似的CPU的频率遵循它的利用率的Governor。
- 在CPU能量模型中找到满足frequency需求的最低性能状态ps。
- 根据性能域中所有CPU的利用率之和sum_util,cpu的算力,性能状态ps中的cost变量,估算整个性能域的能量消耗。计算公式:
ps->cost * sum_util / cpu的算力,其中ps->cost = ps->power * cpu最大频率 / ps->frequency,其值在能量模型初始化CPU各个性能状态时已计算好。
下图列出了em_cpu_energy ()的代码,并对代码进行了详细的注释。
三、EAS与负载均衡
从一般的角度来看,EAS最能提供帮助的是那些轻中等CPU利用率的场景。当重载CPU-bound任务在运行时,它们需要尽可能多的CPU算力,EAS很难做到在不严重损害性能的情况下节约能量。为了避免EAS影响性能,一旦某个CPU的利用率超过其算力的80%,整个根域标记为‘overutilized’,EAS被禁用。当根域里所有CPU的利用率小于其算力的80%,负载均衡被禁用,EAS覆盖了唤醒负载均衡代码。在不影响系统性能时,EAS会选择最省电的CPU来运行。因此,负载均衡被禁用来阻止其对EAS选核规则的破坏。当系统没有overutilized时,这样做是安全的。因为低于80%临界点意味着:
- 所有cpu都有空闲时间,因此EAS使用的utilization信号可以准确地代表系统中各种任务的“大小”;
- 所有任务都被提供了足够的CPU算力,不管它们的nice值是多少;
- 因为有空闲CPU算力,所有任务能满足规律的blocking/sleeping,在唤醒时,做了足够的负载均衡。
一旦某个cpu的算力超过80%这个临界点,上面三个假设至少有一个是不正确的。在这种情况下,整个根域的overutilized标志被置为true,EAS被禁用,负载均衡被重新使能。
由于overutilization的概念很大程度上依赖于检测系统中是否有空闲时间,因此必须考虑由更高(比CFS)调度类(以及IRQ)“窃取”的CPU算力。因此,overutilization的检测不仅包括CFS任务使用的CPU算力,还包括其他调度类和IRQ使用的CPU算力。
四、小结
EAS只在系统负载不重时,即系统中每个CPU的利用率都低于其算力的80%时才被启用,而且选出的最节能CPU只有比线程当前运行的CPU节约能量大于6%时,线程才会迁移到该CPU运行。因此EAS为线程选择最节约能量的CPU来运行的前提条件是很苛刻的,针对重载场景(比如游戏),EAS的功能应该很少被使用起来,针对重载场景的功耗优化,这里可能是一个值得尝试的点。
相关文章:

一文介绍Linux EAS
能量感知调度(Energy Aware Scheduling,简称EAS)是目前Android手机中Linux线程调度器的基础功能,它使调度器能预测其决策对CPU能耗的影响。依靠CPU的能量模型(Energy Model,简称EM),…...

【五一创作】【Midjourney】Midjourney 连续性人物创作 ① ( 通过垫图方式生成类似图像 )
文章目录 一、Midjourney 生成图像二、通过垫图方式生成类似图像 一、Midjourney 生成图像 Midjourney 可以生成高质量的图像 , 但是 生成过程有很大的随机性 , 输入同样的提示词指令 , 其输出结果也存在很大的不同 ; 如果要 生成稳定的人物角色 , 场景 , 描述连贯的内容 , 这…...
牛客刷题错题记录【03】
链接:https://www.nowcoder.com/questionTerminal/8242fbf4b3a241219989b3e1d0ee82db 来源:牛客网 下列关于Vue和React的描述错误的是( Vue进行数据拦截/代理,对数据更敏感,数据驱动视图自更新,而React需…...

maven-gpg-plugin gpg禁用交互式输入密码 免密码输入 设置默认密码 关闭pinentry-qt输入 passphrase
一、问题描述 在使用maven-gpg-plugin打包jar时,默认情况下,每次都会弹出对话框要你输入密码: 这就有点烦,有啥办法可以设置默认方法没?网上找了一圈,通过搜索关键词“passphrase”,找到了一些教程&#x…...
急需国产化替代的重要的工程软件有哪些?
急需国产化替代的重要的工程软件有哪些? 软件一:AutoCAD等领域常用设计软件 AutoCAD由Autodesk公司开发的工程辅助设计软件,目前是设计领域 最重要的工程软件。在高端3D的CAD领域,国产软件几乎全军覆没,在中 低端还有…...

计算机组成原理 4.2.1存储芯片连接
连接原理 主存储器 通过数据总线、地址总线和控制总线和CPU相连数据总线的位数正比于数据传输率地址总线的位数决定可寻址的最大地址空间控制总线(读/写)指出总线周期的类型和本次输入/输出完成的时刻 但是实际中存储芯片往往很小难以满足地址和数据的位数需求,此…...
这份【互联网项目全流程表】,实在是泰裤辣!!!
互联网行业是一个快速变化的行业,作为半个互联网人。太明白用户和环境每天都在不停地变化是什么感受了。 从项目开始到项目结束,要经历立项、计划、执行、结项,项目一周一个,一周一个。(**的)为了省时间…...

JAVA医院管理云HIS统计报表子系统、系统管理字系统功能实现
一、统计报表子系统 统计报表子系统功能模块:包括门诊收入汇总、住院收入汇总、收费统计报表、收费明细报表、 缴款日报、门诊收费汇总、住院科室日志、住院结算汇总、医疗项目统计、检查项目统计、 检验项目统计、月末收支汇总、药品进销存统计。 (1…...
5.Java中抽象类和接口
抽象类与接口 相同不同先从抽象类说起再从接口说起 相同 1.两者都不能实例化,因为他们都不全。(例如可以实例化一个苹果,但是不能实例化水果) 2.一个类可以实现多个接口,但是只能继承一个抽象类 3.如果这个类实现了接…...

中国平安将在2023年出现转机,复苏才刚刚开始
来源:猛兽财经 作者:猛兽财经 在解封后股价出现短暂反弹之后,由于市场担忧中国平安(02318)人寿保险部门新业务NBV(用于衡量寿险公司新业务价值的一个重要指标,当一家保险公司的NBV指标越高,那么说明每新增…...
CUDA编程(六):代码分析与调试
CUDA编程(六):代码分析与调试 代码分析与调试方法使用printf打印变量信息使用CUDA的错误检查功能使用CUDA-GDB进行调试使用Nsight进行调试使用nvprof / nvvp工具 参考文献 代码分析与调试方法 CUDA代码的运行时可能会遇到内存溢出、内存非法…...

身份鉴别解读与技术实现分析(1)
6.1.4.1 身份鉴别 本项要求包括: a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施 在等级保护体系中,级别越高…...
为什么说7.38万的比亚迪海鸥比仰望更重要
出品 | 何玺 排版 | 叶媛 售价7.38万元起步、速度却能上130迈。注意看,这就是A0级轿车中的“新皇”—比亚迪海鸥。 出乎车圈事前的意料,海鸥这款A0级车型,在上海车展里获得的人气和追捧并不逊色于百万豪车仰望。 01 比亚迪海鸥࿰…...

【LLM】低成本部署大语言模型, 并且还能达到部署在GPU上差不多的效果
目录 前言 部署 效果 问题1:人类为什么需要睡觉? 问题2:世界上最高的山峰是什么? 前言 点进来看本文的应该都知道模型对硬件的要求很高, 那我也不废话了, 直接安排最近发现的一个开源项目, 它可以帮助我们降低部署模型的成…...

Doris(25):Doris的函数—Bitmap函数
1 BITMAP_AND(BITMAP lhs, BITMAP rhs) 计算两个输入bitmap的交集,返回新的bitmap. select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(2))) cnt; select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(1))) cnt; 2 BITMAP_CONTAINS(BITMAP bitmap, BIGINT input…...

简单分享微信小程序上的招聘链接怎么做
招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…...

【英语】大学英语CET考试,翻译部分(修饰后置,定语从句,插入语,多动句,无主句)
文章目录 3大知识点与出题形式1、修饰后置(使用介词)2、修饰后置(定语从句(被逼无奈)/which(非限制性,加高级))3、修饰后置(插入语或同位语(只有1…...

设计模式——代理模式
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 1、代理模式的基本介绍 2、静态代理 3、JDK动态代理 4、Cglib 代理 5、代理模式 的变体(应用场景) 1、…...

Shiro-721---漏洞复现
漏洞原理 Shiro rememberMe 反序列化远程代码执行漏洞 由于 Apache Shiro cookie 中通过 AES-128-CBC 模式加密的 rememberMe 字段存 在问题,用户可通过 Padding Oracle 加密生成的攻击代码来构造恶意的 rememberMe 字段,并重新请求网站,进…...

Linux【模拟实现C语言文件流】
✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、FILE 结构设计2、函数使用及分析3、文件打开 fopen4、文件关闭 fclose5、缓…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...