Android进程调度与退出
Linux进程调度策略
- 实时
- SCHED_FIFO
- SCHED_RR
实时进程优先级最高,只有先完成实时进程调度才会进行非实时进程调度。
- 非实时(CFS)
- SCHE D_BATCH
- SCHED_NORMAL
左侧是实时进程,右侧是非实时进程。 进程优先级从-100 到 39,优先级数值越低,优先级越高。
- EAS(Energy Aware Scheduling)
- CFS
- Linux cpuidle
- Linux cpufreq
CGroup
- /dev/cpuctl (控制cpu调度时间)
- cpu.shares (非实时进程的权重)
- cpu.rt_period_us (实时进程单位调度周期,微秒)
-
cpu.rt_runtime_us (一个调度周期,实时进程最多可以占用多少微秒)
- bg_non_interactive
- /dev/cpuset (定义哪些进程可以在哪些cpu执行)
-
cpus
- top-app
- foreground
- system-background
- background
-
- /dev/stune
- schedtune.boost (对PELT:Per-Entity Load Tracking量化负载机制的改进)
-
schedtune.prefer_idle (0/1: 节能 / 性能:是否默认分配到空闲cpu。)
- top-app
- foreground
- background
## 进程退出机制 Android进程不会主动退出。
三种退出机制
- 命令强制结束
- AMS主动清理
- OOM清理
命令强制结束
清理手机内存通常是调用killBackgroundProcesses来实现。
AMS主动清理
OOM清理
sagit:/ # cd /sys/module/lowmemorykiller/parameters/
sagit:/sys/module/lowmemorykiller/parameters # ls
adj adj_max_shift cost debug_level enable_adaptive_lmk lmk_fast_run minfree vmpressure_file_min
sagit:/sys/module/lowmemorykiller/parameters # cat minfree
18432,23040,27648,32256,55296,80640
sagit:/sys/module/lowmemorykiller/parameters # cat adj
0,100,200,250,900,950