cgroup 全称是 control group,是 linux 下的一个内核模块,用来控制进程的系统资源使用。例如可以限制进程 cpu 使用量、内存使用量等。比如知名开源软件 docker 就是基于 cgroup 来限制容器资源使用,使用 namespace 隔离进程空间。

cgroup 分为 v1 和 v2 两个版本。常用的子系统有:

  • cpu/cpuset/cpuacct:限制和统计 cpu 的用量
  • memory:限制内存的用量
  • blkio:限制块设备的用量,但是只能限制 direct io

使用方式

cgroup 基于 linux vfs 技术,将 cgroup 映射到一个目录。系统管理员通过在目录下创建文件的方式来使用 cgroup。默认情况下,cgroup 映射的目录为 /sys/fs/cgroup ,该目录下每个目录对应一个子系统。系统管理员可以在子系统目录中新建树状目录来设置 cgroup 限制,例如 /sys/fs/cgroup/cpu/g1 代表一类进程限制。

➜  ~ ls /sys/fs/cgroup  
blkio  cpu  cpuacct  cpu,cpuacct  cpuset  devices  freezer  hugetlb  memory  net_cls  oom  perf_event  pids  systemd

除了使用 /sys/fs/cgroup ,还可以通过 cgcreatecgexec 等命令来使用 cgroup。例如

# 使用 /sys/fs/cgroup/cpu/test_cpu 来限制 ./test 进程运行
cgexec -g cpu:test_cpu ./test