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. lombok到底都用来做什么

    前言:我使用lombok一般都是用在实体类的外面写个@data省得写getsettostring方法,今天详细了解一下关于lombok的有一些实用技巧 @Cleanup //用于IO流的关闭,给局部变 ...

  2. python实例化对象过程

    python实例化对象过程 Python中存在着一种静态的__new__()方法,通常在定义类时不会重写__new__()方法,于是Python在调用类时会自动寻找该类的继承对象(本例中为Object ...

  3. PyCharm设置背景主题

    PyCharm修改主题的路径: File->Settings->Appearance &Behavior->Appearance 1.  Intellij:白色 2. Dar ...

  4. 【Java】讲讲StreamAPI

    预设场景: 从Mybatis调用Mapper得到的用户集合 List<UserDTO> userList = new ArrayList<>(); 常用的几种API用法示例: ...

  5. 【SpringMVC】05 RestFul风格

    什么是RestFul风格? 一个资源定位和资源操作的风格,不是标准,也不是协议, 基于此风格的路径访问可以隐藏真实的参数传递,以提高网站的安全访问 以往的请求参数: jdbc:mysql://loca ...

  6. vue导入项目缺少依赖‘node_modules’

    从git下载好的项目,导入vue时提示'node_modules'依赖 则需要在你的项目包下面找是否有package-lock.json文件,如: 如果有,但是依旧报错,直接删除package-loc ...

  7. 关于spinninup的学习笔记

    作为reinforcement learning的一个入门学习的项目,spinningup的地址: (英文原版:) https://spinningup.openai.com/en/latest/in ...

  8. [CEOI 2013] 千岛之国 / Adritic 题解

    前言 题目链接:洛谷. 题意简述 你被困在一个被划分为 \(2500 \times 2500\) 的二维平面内!平面上有 \(n\)(\(n \leq 250000\))个岛屿你可以停留,你可以在这些 ...

  9. 【入门教程】5分钟教你快速学会集成Java springboot ~

    介绍 Apache DolphinScheduler是一个分布式易扩展的开源分布式调度系统,支持海量数据处理,具有任务流程调度.任务流程编排.任务监控告警.工作流引擎等功能. 本文将介绍如何将Apac ...

  10. WhaleScheduler为银行业全信创环境打造统一调度管理平台解决方案

    项目背景 数字金融是数字经济的重要支撑和驱动力.近年来,我国针对数字金融的发展政策频频出台,<金融科技发展规划 (2022-2025年)>.<"十四五"数字经济发 ...