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上。
不同的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 |



