Android进程绑核

一:概念

  进程绑核就是让进程只能在某一个或者某几个核上运行。在和用户交互中,对一些关键进程如inputdispatcher、surfaceflinger等关键进程进行绑定大核操作,可以提高流畅度。对一些后台进程,不需要和用户交互的,进行绑小核或者限定在特定核上运行,可以减少功耗,还可以避免后台进程抢占CPU资源造成前台进程卡顿。

二:绑核方式

2.1 在代码中绑核

可以在对应进程初始化的地方添加如下代码,主要是调用int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)这个系统接口。需要传三个参数,第一个参数pid为进程的pid,第二个参数cpusetsize是要绑定的核的长度,第三个参数mask是要绑定的核

#include <sched.h>

     cpu_set_t set;
     CPU_ZERO(&set);
     CPU_SET(0, &set);
     CPU_SET(1, &set);
     CPU_SET(2, &set);
     CPU_SET(3, &set);
     sched_setaffinity(gettid(), sizeof(cpu_set_t), &set);

2.2 cgroup进行绑核操作

  2.2.1 获取进程包名

  打开应用执行,adb shell dumpsys actitivity activities |grep "ResumedActivity"

$ adb shell dumpsys activity activities |grep "ResumedActivity"
  ResumedActivity: ActivityRecord{f8b9c7c u0 com.android.launcher3/.uioverrides.QuickstepLauncher} t7}
  2.2.2 获取进程pid

  adb shell ps -A |grep com.android.launcher3

$ adb shell ps -A |grep com.android.launcher3
u0_a176       2014   805 14872400 185740 do_epoll_wait      0 S com.android.launcher3
2.2.3 获取进程所属于的组

  adb shell进入手机,进入proc目录,所有进程都会在此目录下有对应的文件夹,进程对应的pid就是该进程在此目录下文件夹的名字,进入对应文件夹,查看cgroup节点,cpu:后面跟的就是进程所在的组

$ adb shell
XXXXX:/ # cd proc/2014
XXXXX:/proc/2014 # cat cgroup
4:memory:/
3:cpuset:/restricted
2:cpu:/foreground
1:blkio:/
0::/uid_10176/pid_2014
2.2.4 对组进行绑核

  注:此修改影响较大,调试可用,如果要在代码中直接修改cgroup不同组绑定不同的核,慎重!

XXXXX:/ # cd dev/cpuset/foreground/                                           
XXXXX:/dev/cpuset/foreground # cat cpus
0-7
XXXXX:/dev/cpuset/foreground # echo "4-7" >cpus                               
XXXXX:/dev/cpuset/foreground # cat cpus                                       
4-7

2.3 taskset命令进行进程绑核

  adb shell taskset -ap 80 2014

  可执行adb shell taskset --help 查看taskset支持的参数,80是16进制,转化成2进制是10000000,即对应的CPU7,2014是Launcher对应的pid,这个命令是让launcher及其子线程都跑在CPU7上。

三:小结

3.1 如何查看进程运行在哪个核上

adb shell ps -A -o pid,name,psr

pid是进程的pid,name是进程的名字,psr是进程运行的核

3.2 针对2.2所描述的cgroup绑核

需要对cgroup有细致全面的理解,再进行cgroup的修改,修改影响较大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值