首先大致梳理下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,在这里新增对应的子目录