总结下android性能提升方案

首先大致梳理下android 原生的方案

原生底层三个接口来调控,setthreadPriority,setThreadScheduler,setThreadGroupAndCpuset
上层就是通过影响adj值来调控

内存的话,也用到了adj,还用到了进程的内存占用大小
进程是否是root用户的进程,具体算法要看lmkl源码:
LowMemoryKiller在sysfs上暴露了两个文件来供系统调整参数,这两个文件的路径是:

/sys/module/lowmemorykiller/parameters/minfree
/sys/module/lowmemorykiller/parameters/adj
两个文件的值对应的关系:当系统内存低于*k时,将oom_score_adj值大于*的进程全部杀死;

详细的算法:路径是:kernel/drivers/staging/android/lowmemorykiller.c。

其次看下我们的自定义方案:

android 资源调度流程,大同小异,具体资源可以看 init.rc里面的配置文件

1 kenel层直接调度,直接对进程对应的名字进行比如cpu分配和设置进程优先级为fifo,cpuweight等,可以设置更多,更细致的参数
对应的驱动节点:proc/mysched/scene,proc/mysched/uid,proc/mysched/key_tasks
2 上层实现
     init.rc里面配置(cgroup.json 文件里配置的补充):这里主要配置cpuset ,stune,blkio,memory,在这里新增对应的子目录
   libprocessgroup/profiles/task_profiles.json :详细子系统参数的配置在这里
2.1 举例以上两个文件里创建自定义的目录并配置对应的参数比如:mycupset
2.2 通过jni提供给java层设置进去对应的app进程号
    android_util_process.cpp里面setthreadgroupandcupset 里面设进去对应的cupset(需要添加对应的索引等等)
    或者直接增加个接口写死cupset对应的目录值。    
2.3 framwork base server下面搞一个封装类,主要是对process.java里面对调度接口进一步的封装
    对setthreadscheduler 设置哪一类的优先级的封装,对cupset的设置的封装,以及配套的自定义cpuset对应的
    核也要写进去,高优先级 就写大核对应的cpu id,低优先级就写小核的。(最好设两个自定义cpuset,一个高,一个低,这样就不用动态调整核数了)

比如 往/dev/cpuset/myboost/cpus 写 1-3 意思就是cpu1,cpu2,cpu3
2.4 再增加一些流程逻辑,比如只增强20秒,20秒后再还原回去    
2.5 atms,oomadjuster 的调度行为需要屏蔽我们自定义的调用,最好 process里面对接口统一过滤,就是系统那一套如果遇到我们自定义的这一套,需要跳过

2.6 提供三方对应功能的接口,这个一般不会开放出此接口,暂不实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值