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. 关于netty 一些使用细节

    netty 的客户端通常是websoket   但是为了演示也可以用netty做客户端, Channel:可以被理解为数据传输的通道. Pipeline:可以被视为一个由多个工序组成的流水线,负责将数 ...

  2. 【VMware】 桥接网路发现无法Ping通原因

    解决方案参考: https://blog.csdn.net/weixin_33856370/article/details/92420910 设置好的同网段的三台虚拟机这次开机连不上网了 仔细发现VM ...

  3. URDF(Universal Robot Description Format)—— 通用机器人描述格式URDF文件简介与生成

    参考: https://zhuanlan.zhihu.com/p/477556743 详细介绍资料: https://wiki.ros.org/urdf/XML

  4. 2023年人工智能发展现状报告:State of AI Report 2023

    链接: https://www.stateof.ai/ ================================ Now in its sixth year, the State of AI ...

  5. 强化学习中子进程调用atari游戏是否受父进程中设置的随机种子影响

    相关: python中numpy.random.seed设置随机种子是否影响子进程 ============================================ 代码: from ale_ ...

  6. A3C与GA3C的收敛性分析

    G-A3C的代码: https://gitee.com/devilmaycry812839668/gpu_a3c 论文: <Reinforcement Learning thorugh Asyn ...

  7. 伪代码中ties broken arbitrarily是什么含义?

    最近在看一个物联网的论文,论文的伪代码中有这么一个地方标有:ties broken arbitrarily,对这个写法有些搞不清楚含义,于是网上找到了下面的资料: https://www.zhihu. ...

  8. 树莓派3b+ 安装windows10 arm版本的方法及使用体验

    首先,我再网上找到了一个很详细的为树莓派3b安装windows10 arm的教程,实际操作下来发现并不可行. 最后找到了可行的教程: 第3章 将Windows10镜像写入TF卡:https://zhu ...

  9. 陆吾AI智能机械狗的通讯控制

    陆吾AI智能机械狗现在是蛮有名的了,在YouTube上比较火的一个东西了,和波士顿机器狗不同,波士顿机器狗价格昂贵主要原因是其定位于工业领域的机械狗因此采用的是工业级的硬件,但是如果我们采用的家用环境 ...

  10. 这是DDD建模最难的部分(其实很简单)

      本文书接上回<为了落地DDD,我是这样"PUA"大家的> ,欢迎关注我的同名公众号. https://mp.weixin.qq.com/s/DjC0FSWY1bgJ ...