SchedTune

SchedTune是一项与CPU调频相关的性能提升技术,它实现为一个cgroup控制器。

这个控制器提供了一个名称为schedtune.boost的配置参数,运行时系统可以使用它来更改该组中的进程的调度方式。

每当调整这个参数的时候,它会使受影响的进程看起来比实际更重(或更轻)。如果一个组被提升了25%,那么调度程序将期望它使用的CPU时间比它实际上要多25%,并且CPU频率调控器将相应地对处理器提速。因此,以这种方式“提升”进程不会影响其调度优先级,但会影响其最终运行的CPU的速度。

SchedTune扩展仅适用于负载较轻的系统。当系统饱和时,SchedTune应当自动禁用。

Pixel XL上/vendor/etc/init/init.rc文件中的相关配置如下:

# set default schedTune value for foreground/top-app (only affects EAS)
write /dev/stune/foreground/schedtune.prefer_idle 1
write /dev/stune/top-app/schedtune.boost 10
write /dev/stune/top-app/schedtune.prefer_idle 1
write /dev/stune/rt/schedtune.boost 30
write /dev/stune/rt/schedtune.prefer_idle 1
  • /dev/stune/: 某些系统中用于替代 /sys/fs/cgroup/schedtune/ 的路径。

可以看到,这里为rttop-app两个进程组设置了处理器提速。

schedtune提供了一套用户接口的工具,用于功耗-性能调节。schedtune是cgroup的一个子系统。所以在cgroup的mount节点下,stune分别为每个group,都提供了2个调节开关:

  • schedtune.boost

boost的值用int型表示,范围为[0, 100]。

boost默认值为0,代表CFS调度器会工作在能耗最低的状态。这也意味着schedutil使task跑在最低的OPP。

boost值100,则表示调度器为工作在性能最高的状态,同时OPP也处在最大。

0-100的范围可以根据其他场景来进行适当调节。比如,优化交互的响应、电池电量变化等

  • schedtune.prefer_idle

这是一个控制调度器节省功耗优先,还是性能优先的flag。

默认值0,会让CFS调度器根据energy-aware wakeup策略来分配在group中的task。(功耗优先)

当值设为1,会让CFS调度器分配task时,有最小的wakeup延迟。(性能优先)

android平台下使用这个flag用来表示正在和用户交互的应用。

设为1的节点:

dev/stune/foreground/schedtune.prefer_idle

dev/stune/top-app/schedtune.prefer_idle

设为0节点:

dev/stune/background/schedtune.prefer_idle

dev/stune/rt/schedtune.prefer_idle

schedtune.prefer_idle是一个标志位,它向调度器指示用户空间希望调度器更关注功耗或者更关注性能。当这个值设为1,表示希望调度器尽可能减少改组中进程唤醒延迟(倾向于性能)

  1. boost

    • 说明:控制任务的性能增强级别,通常是一个百分比值,用于增加任务的负载。该参数决定了调度器在选择 CPU 频率时应考虑的额外负载,从而影响任务的执行速度和响应时间。
    • 范围:通常为 -100100,其中 0 表示没有提升,负值表示减少负载,正值表示增加负载。
  2. prefer_idle

    • 说明:决定任务是否更倾向于在空闲 CPU 上执行。如果设置为 1,则调度器将尝试将任务调度到空闲的 CPU 上,以减少任务在同一 CPU 上竞争资源的情况,从而降低延迟。
    • 范围01
  3. prefer_high_cap

    • 说明:用于指定调度器是否优先选择具有较高计算能力的 CPU。这对任务的执行效率有重要影响,尤其是对计算密集型任务来说。
    • 范围01
  4. prefer_idle_hint

    • 说明:用于提示调度器任务可能在短时间内进入空闲状态。如果启用,调度器可能会为这些任务选择更合适的 CPU,以提高整体系统的能效。
    • 范围01
  5. spreading

    • 说明:决定任务在多个 CPU 上的分布程度。如果启用,调度器将尝试将任务均匀分布在多个 CPU 上,以防止某些 CPU 过载。
    • 范围:通常为 01
  6. sync_flag

    • 说明:用于调整同步任务的调度行为。同步任务往往要求快速响应,因此调度器会考虑给这些任务分配更多的 CPU 资源。
    • 范围01
  7. margin

    • 说明:控制任务的边际性能需求。这个参数通常用于调整任务在满足最低性能要求时所需的额外 CPU 资源,以确保任务可以在合理的时间范围内完成。
    • 范围:具体值依赖于系统配置。
  8. group

    • 说明:将任务分组,以便应用相同的 schedtune 参数设置。这对于管理一组具有相似性能需求的任务非常有用。
    • 范围:具体取值依赖于系统配置。
  9. idle_exit_boost

    • 说明:用于在 CPU 退出空闲状态时对调度器进行增强,以提高响应速度。
    • 范围:通常为 01

这些参数可以通过调节来优化系统的性能和功耗,尤其是在 Android 设备中,以提供更好的用户体验和电池寿命。

Android Linux EAS优化-schedtune的更多相关文章

  1. Android/Linux boot time分析优化

    如果需要优化boot time,就需要一个量化的工具来分析每个阶段的时间消耗.这种类型的优化特别适合使用基于timeline的图表,有着明显的时间顺序.要求不但能给出整个流程消耗的时间,还要能对流程进 ...

  2. Android/Linux boot time优化

    基于analyze_boot.py分析Android/Linux的kernel boot时间 1.修改HiKey的BoardConfig.mk文件,使能initcall_debug,增加dmesg b ...

  3. Android应用性能优化(转)

    人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...

  4. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Androi ...

  5. android app性能优化大汇总(内存性能优化)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  6. 爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结

    本文由爱奇艺技术团队原创分享,原题<爱奇艺Android客户端启动优化与分析>. 1.引言 互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Andro ...

  7. Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

    图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降 ...

  8. fir.im Weekly - 如何进行 Android App 性能优化

    关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...

  9. Android(Linux)实时监控串口数据

    之前在做WinCE车载方案时,曾做过一个小工具TraceMonitor,用于显示WinCE系统上应用程序的调试信息,特别是在实车调试时,用于监控和显示CAN盒与主机之间的串口数据.因为需要抢占市场先机 ...

  10. Android(Linux)控制GPIO方法二

    前文<Android(Linux)控制GPIO的方法及实时性分析>主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPIO是否受 ...

随机推荐

  1. 简单写写IO流里的一些高级流

    缓冲流Buffered:缓冲流是一种高级的流,他可以对file类的流进行包装,内部含有一种缓冲池,可以在一定程度上提高IO的读写效率 不过,按实验来看,只要给低级流和缓冲流相似的byte读写,其实两者 ...

  2. AI机器人——人形机器人、双足机器人、四足机器人 —— 组成构建有哪些?

    参考: https://www.youtube.com/watch?v=dLELvoFt_iA

  3. github的域名解析IP的文件——最直观的效果是GitHub图片可以正常加载,网页也稳定了——github图片不显示问题

    该codebase提供了hosts文件: https://github.com/ineo6/hosts 主站: https://github.com/ineo6/hosts 镜像: https://g ...

  4. 学历史有什么用——视频分享:學歷史的大用:呂世浩(Shih-Hao Lu) at TEDxTaipei 2014

    网上看到的不错的视频: https://www.youtube.com/watch?v=Ap0w3PgSK7g ============================================ ...

  5. ubuntu22.04 终端显示数字剑雨

    数字剑雨是读大学时候常用的屏保,这些年基本也再没有用过,不经意间想到了这个曾经的屏保,发现Ubuntu原版的桌面系统是没有屏保的,又不想换桌面系统,想想还是单独安装一下这个数字剑雨吧. 在Ubuntu ...

  6. [工具分享]ClipX超级粘贴板,超级好用

    1.背景 话说粘贴.复制是码农们的必备核心技能, 普通码农们当然已经熟练的掌握了普通的粘贴复制.... 但是,你不知道的是,牛逼的架构师已经会使用超级粘贴板了,功能非常强大 ............. ...

  7. 深入学习JVM-JVM 安全点和安全区域

    什么是安全点? 在 JVM 中如何判断对象可以被回收 一文中,我们知道 HotSpot 虚拟机采取的是可达性分析算法.即通过 GC Roots 枚举判定待回收的对象. 那么,首先要找到哪些是 GC R ...

  8. 升级JDK时涉及的工作任务

    JDK版本升级,通常引入新的语言特性.新的API,废弃一些API,从而导致一些不兼容的现象. 因此在升级产品使用的JDK版本时,通常有如下考虑: 新产品包括新建设的项目以及刚启动不久的项目,使用高版本 ...

  9. 循环Map的几种方法

    package cn.jdbc.test;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import ...

  10. Linux input 子系统详解

    1. 模块概述 1.1.相关资料和代码研究 drivers/input/ include/uapi/linux/input-event-codes.h 2. 模块功能 linux核心的输入框架 3. ...