1. Cpuset介绍:
cgroup的cpusets文档参见这里:ocumentation/cgroup-v1/cpusets.txt。
在多CPU或者多核CPU的情况下,cpusets限制了进程使用的CPU范围。如果你仔细看了前面 /init.rc
中的配置,你就会发现,那里对cpuset
做了一些具体的分组,包括:
foreground
background
top-app
system-background
restricted
很明显的,这里是在对进程的类型做分类。有了这个分类的基础框架,其他地方就可以将进程放入对应的分类组中,这样就达到的资源合理分配和限制的目的。而这也正是使用cgroup的原因。cpuset是Linux cgroup子系统,它为cgroup任务分配单独的Cpu和内存, 单独分配CPU即表明进程可调度CPU范围。cpu按不同的芯片,大小核数目和频率都有差别,大核频率处理速度相对比小核快,因此Android AMS对进程管理于不同优先级的进程在调度CPU限制上会做一些策略,以保证更好的交互响应。
2. cpuset用途:
cpuset用来将进程绑定到指定的CPU上,用于修改task的cpu核亲和度
- cpus对应内核亲和度,必须是连续的,比如0-3,2-6
- cpu_exclusive对应是否核独占,如果设置代表tasks将独占cpus对应的cpu核,一般都是关闭
不同的cgroup代表什么
cgroup | 含义 |
---|---|
top-app | 处于顶层的应用, 小窗应用等 |
system-background | 处于后台的系统进程 |
foreground | 可以被用户感知的非顶层应用, 如: 正在播放音乐的应用 |
restricted | foreground 的子进程 |
background | 处于后台的用户进程 |
audio-app | 处理音频流的系统服务 |
配置比对://Pixel 4 和 CAF 参数对比
cgroup | Pixel 4 | CAF |
---|---|---|
top-app | 0-7 | 0-7 |
system-background | 0-3 | 0-3 |
restricted | 0-3 | 0-3 |
foreground | 0-3,5-6 | 0-2,4-7 |
background | 0-1 | 0-2 |
audio-app | UNKNOWN | 1-2 |