一、应用场景

在实际生产环境中,因部分计算密集型的功能,造成 CPU 尖刺,影响系统稳定性。所以,某些场景下需要一些限制 CPU 的手段,如 nice、cpulimit、cgroups 等,本文主要介绍 cgroups 在 Android 平台上的简单应用。

二、cgroups 限制

(一) 基础介绍

1. 限制 CPU 关键节点文件

cpu.cfs_period_us:CPU 资源分配周期

cpu.cfs_quota_us:一次 CPU 分配周期内可以执行的时间

2. 限制值计算(多核)

设置两个值之后,多核 CPU 值理论上不超过:

1
cpu.cfs_quota_us / cpu.cfs_period_us

3.修改内核配置

一般来说,两个节点文件都是不直接开放的,需要修改以下两个内核配置才会出现:

1
2
CONFIG_CFS_BANDWIDTH=y
CONFIG_FAIR_GROUP_SCHED=y

4.设备默认分组路径

可以将具体的 PID/TID 分配到不同的分组里

默认分组:/dev/cpuctl

后台分组:/dev/cpuctl/bg_non_interactive

(二) 具体操作方法

1.新建分组

默认分组下新建分组,如cpu_test,对应文件路径即为/dev/cpuctl/cpu_test

2.修改限制值

cpu_test目录下修改cpu.cfs_period_uscpu.cfs_quota_us

3.限制进程/线程

将想要限制的 PID/TID 写入cpu_test组下的 tasks 文件

三、效果展示

正常运行

cgroup_0

限制 CPU 运行

cgroup_1