Android 进程管理篇(四)-cpu限制

Android 进程管理篇(四)-cpu限制,第1张

梳理Process进程相关知识点,再继续补充点内容。

Linux系统中对进程的管理无非是从调度策略、优先级以及CPU限制三个角度进行配置与管理,那么Android中主要是通过AMS来管理应用程序进程的,是不是也是从这三个方面进行管理的呢?答案是肯定的,那么本篇文章先来看看cpuset负载均衡在AMS中是如何应用的。

cpuset是Linux cgroup子系统,它为cgroup任务分配单独的CPU和内存。单独分配CPU即表明进程可调度cpu范围。cpu按不同的芯片,大小核数目和频率都有差别,大核频率高处理速度相对比小核快,而Android系统实际上还是响应优先于吞吐的交互型系统,因此Android AMS对进程管理于不同优先级的进程在调度cpu限制上会做有一些策略,以保证更好的交互响应。

还是回到AMS中与adj相关的有三个方法,这三个方法值得看一万遍,每一遍都会有新收获:

聚焦到computeOomAdjLocked方法,该方法主要是根据进程的四大组件状态决定当前进程的adj优先级。

以TOP_APP为例,这里ProcessRecord 的curSchedGroup属性对应的是cup调度组,而在后续applyOomAdjLocked中会执行Process的setProcessGroup方法。

调用Process的setProcessGroup方法

setProcessGroup是个native方法,并且这里分了若干类型的group,这里看top app优先级是最高的。接着jni到native

这里直接调用sched_policycpp的set_cpuset_policy,并传入对应的pid和SchedPolicy

这里主要就是通过policy对应具体的fd句柄,然后通过add_tid_to_cgroup()写cpuset对应节点。这里要注意,如果cpusets_enabled为false的话,会走set_sched_policy,这部分下篇会讲到。
看看对应的fd是什么:

那我们来看看对应节点是什么内容:

然后看看对应的cpuset配置:

显然,top app 满核随便跑,foreground跑在除了3这个核以外的所有核上, 而background只能跑在小核上。

不同芯片平台配置会有差别。

以上就是关于Android 进程管理篇(四)-cpu限制全部的内容,包括:Android 进程管理篇(四)-cpu限制、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9434720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存