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. python中基于tcp协议与udp的通信

    python中基于tcp协议与udp的通信(数据传输)   一.TCP协议介绍 流式协议(以数据流的形式通信传输) 安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在 ...

  2. Python编写html文件

    背景:部门需要发送周报.月报,每次都需要去数据库导出数据整理统计发送给领导,人工操作显得繁琐且费时间. 1.可以定时用python将数据库查询数据结果写成html文件,达到浏览器访问的效果,定时发送给 ...

  3. 【Windows】搭建FTP服务器

    1.开启FTP服务和IIS服务 2.设置IIS服务 添加FTP站点[右键] 设置站点名称和物理路径 绑定IP地址和FTP端口号 可以自定义虚拟主机名称 下面勾选[无SSL]即可 身份验证和授权设置 在 ...

  4. 【JS】03 BOM 浏览器对象模型

    BOM :Broswer Object Model 浏览器对象模型 核心对象是window对象,window对象又可以操作以下的常见对象: - frames[] 窗口对象数组? 浏览器可以打开多个窗口 ...

  5. 【Hibernate】Re02 官网介绍

    介绍: 创始人:Gavin King.EJB3.0专家,JBoss核心成员之一,<Hibernate In Action>作者 Hibernate是ORM的解决方案. 优点: 1.功能强大 ...

  6. Springboot实现HTML表单from简单的接收信息

    HTML< from >元素 from可向Web服务器提交请求 普遍格式: <from action="服务器地址" method="请求方式" ...

  7. Electronics投稿指南

    原地址: https://m.peipusci.com/news/10593.html Electronics的自引率先增后减,2023年度为10.3%.

  8. tmux开启鼠标模式

    在tmux的配置文件中进行配置: vim ~/.tmux.conf set -g mouse on

  9. obs 直播软件 虚拟摄像头插件 —— obs-virtualcam

    如题: 外网下载地址: https://github.com/Fenrirthviti/obs-virtual-cam/releases 这个东西是做啥用的这里就不讲了,这个东西的资源不好找,找了好半 ...

  10. 构建无服务器数仓(二)Apache DolphinScheduler 集成以及 LOB 粒度资源消费分析

    引言 在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求.本系列博客从一个重视数据安全和合规性的 B2C 金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云 ...