https://www.cnblogs.com/sparkdev/p/8296063.html

What

cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源提供一个统一的框架。

Function

为不同的用户层面的资源管理提供一个统一化的接口。

  1. 资源限制
  2. 优先级分配
  3. 资源统计
  4. 任务控制

Task 任务

用 task 表示系统的一个进程或线程

Cgroup 控制器

cgroup 表示按某种资源控制标准划分而成的任务组,包含一个或多个子系统。一个任务可加入某一个 cgroup ,也可以从某个 cgroup 迁移到另一个 cgroup 。

Subsystem 子系统

cgroups 中的子系统就是一个资源调度控制器,又叫 controllers 。

  1. #cat /proc/cgroups
  2. #subsys_name hierarchy num_cgroups enabled
  3. cpuset 7 76 1 // 给 cgroup 中的任务分配独立的 CPU 和 内存点
  4. cpu 7 76 1 // 限制 CPU 时间片的分配,与 cpuacct 挂载在同一目录
  5. cpuacct 7 76 1 // 生成 cgroup 中的任务占用 CPU 资源的报告,与 cpu 挂载在同一目录
  6. blkio 4 72 1 // 对块设备的 IO 进行限制
  7. memory 5 129 1 // 对 cgroup 中的任务的可用内存进行限制,并自动生成资源占用报告
  8. devices 2 70 1 // 允许或紧张 cgroup 中的任务访问设备
  9. freezer 6 24 1 // 暂停/恢复 cgroup 中的任务
  10. net_cls 3 24 1 // 使用登记识别符
  11. perf_event 8 24 1
  12. net_prio 3 24 1
  13. hugetlb 10 24 1
  14. pids 11 70 1
  15. rdma 9 1 1

Hierarchy

层级有一系列 cgroup 以一个树状结构排列而成,每个层级通过绑定对应的子系统进行资源控制。

cgroups 的文件系统接口

image.png
tmpfs 说明 /sys/fs/cgroup 目录下的文件都是存在于内存中的临时文件;
/sys/fs/cgroup 目录都是由 systemd 在系统启动的过程中挂载,并且挂载为只读类型。

image.png

image.png

  1. cgroup 树 ID,和 /proc/cgroups 文件中的 ID 一一 对应;
  2. 和 cgroup 树绑定的所有 subsystem ,多个 subsystem 之间用逗号隔开。 name = systemd 表示没有和任何 subsystem 绑定,只是起了个名字叫 systemd
  3. 进程所属的 cgroup