Android进程调度cgroups的简单介绍

cgroups的定义

维基百科的解释为:cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制,控制与分离一个进程组群资源(如CPU、内存、磁盘输入输出等)。


Android中的cgroups

Android中的cgroups关于cpu的一般有两个,分别位于:

dev/cpuctl/                                  --位于前台的app

dev/cpuctl/bg_non_interactive     --进入后台的app

其内部的各个文件的作用介绍如下:

1. cpu.shares

cpu.shares文件中保存了整数值,用来设置cgroup分组任务获得CPU时间的相对值。举例来说,cgroup A和cgroup B的cpu.shares值都是1024,那么cgroup A 与cgroup B中的任务分配到的CPU时间相同,如果cgroup C的cpu.shares为512,那么cgroup C中的任务获得的CPU时间是A或B的一半。前台app的cpu.shares值如下:

root@XXXX:/dev/cpuctl # cat cpu.shares
cat cpu.shares
1024

而bg_non_interactive下的cpu.shares值为52

也就是说apps分组与bg_non_interactive分组cpu.share值相比接近于20:1。由于Android中只有这两个cgroup,也就是说apps分组中的应用可以利用95%的CPU,而处于bg_non_interactive分组中的应用则只能获得5%的CPU利用率。

2. cpu.rt_period_us与cpu.rt_runtime_us

cpu.rt_period_us用来设置cgroup获得CPU资源的周期,单位为微秒。 cpu.rt_runtime_us用来设置cgroup中的任务可以最长获得CPU资源的时间,单位为微秒。最长的获取CPU资源时间取决于逻辑CPU的数量。比如cpu.rt_runtime_us设置为200000(0.2秒),cpu.rt_period_us设置为1000000(1秒)。在单个逻辑CPU上的获得时间为每秒为0.2秒。 2个逻辑CPU,获得的时间则是0.4秒。


在Android中,一个应用(进程)既可以由前台进程切换到bg_non_interactive,也可以切换回来。

Activity:当一个Activity处于可见的状态下,那么这个应用进程就属于apps分组。

Service:当Service调用startForeground方法后,那么这个应用进程则是归类于前台进程。


如何确定进程所属的cgroups

步骤1: adb shell进入已经root的Android设备终端,获得进程的pid,如

root@XXXX:/proc/6566 # ps | grep -i "video"
u0_a70    6566  498   1514624 79340 SyS_epoll_ 7f9ea9cba4 S com.android.videoplayer

我们获得了一个视频播放器的进程pid为6566

步骤2: adb shell cat proc/6566/cgroup

结果若为:

cat cgroup
2:cpu:/bg_non_interactive(后台非交互进程)
1:cpuacct:/uid_10070/pid_6566

若结果为:

2:cpu:/(前台进程)
1:cpuacct:/uid_10070/pid_6566

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值