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/
的路径。
可以看到,这里为rt
和 top-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,表示希望调度器尽可能减少改组中进程唤醒延迟(倾向于性能)
-
boost:
- 说明:控制任务的性能增强级别,通常是一个百分比值,用于增加任务的负载。该参数决定了调度器在选择 CPU 频率时应考虑的额外负载,从而影响任务的执行速度和响应时间。
- 范围:通常为
-100
到100
,其中0
表示没有提升,负值表示减少负载,正值表示增加负载。
-
prefer_idle:
- 说明:决定任务是否更倾向于在空闲 CPU 上执行。如果设置为
1
,则调度器将尝试将任务调度到空闲的 CPU 上,以减少任务在同一 CPU 上竞争资源的情况,从而降低延迟。 - 范围:
0
或1
。
- 说明:决定任务是否更倾向于在空闲 CPU 上执行。如果设置为
-
prefer_high_cap:
- 说明:用于指定调度器是否优先选择具有较高计算能力的 CPU。这对任务的执行效率有重要影响,尤其是对计算密集型任务来说。
- 范围:
0
或1
。
-
prefer_idle_hint:
- 说明:用于提示调度器任务可能在短时间内进入空闲状态。如果启用,调度器可能会为这些任务选择更合适的 CPU,以提高整体系统的能效。
- 范围:
0
或1
。
-
spreading:
- 说明:决定任务在多个 CPU 上的分布程度。如果启用,调度器将尝试将任务均匀分布在多个 CPU 上,以防止某些 CPU 过载。
- 范围:通常为
0
或1
。
-
sync_flag:
- 说明:用于调整同步任务的调度行为。同步任务往往要求快速响应,因此调度器会考虑给这些任务分配更多的 CPU 资源。
- 范围:
0
或1
。
-
margin:
- 说明:控制任务的边际性能需求。这个参数通常用于调整任务在满足最低性能要求时所需的额外 CPU 资源,以确保任务可以在合理的时间范围内完成。
- 范围:具体值依赖于系统配置。
-
group:
- 说明:将任务分组,以便应用相同的
schedtune
参数设置。这对于管理一组具有相似性能需求的任务非常有用。 - 范围:具体取值依赖于系统配置。
- 说明:将任务分组,以便应用相同的
-
idle_exit_boost:
- 说明:用于在 CPU 退出空闲状态时对调度器进行增强,以提高响应速度。
- 范围:通常为
0
或1
。
这些参数可以通过调节来优化系统的性能和功耗,尤其是在 Android 设备中,以提供更好的用户体验和电池寿命。
标签:stune,prefer,调度,CPU,idle,schedtune,Android,EAS From: https://www.cnblogs.com/linhaostudy/p/18364252