cgroup(control group)将一组任务与一个或多个子系统的一组参数相关联
用来控制,限制单个进程或者进程组的资源(CPU,内存,IO等等)
docker就是用cgroup技术进行container的资源限制
cgroup的历史与演变
cgroup v1
资源控制
涉及的资源控制组有:
- CPU (
cpu
子系统):- CPU 访问和使用的限制和控制。
- 可以设置进程组的相对权重。
- CPU 帐户 (
cpuacct
子系统):- 报告进程组使用的总CPU时间。
- 内存 (
memory
子系统):- 限制进程组的内存使用。
- 报告内存使用统计信息。
- 可以设置硬限制和软限制。
- 块设备I/O (
blkio
子系统):- 控制和限制块设备的输入/输出。
- 可以设置读/写的I/O带宽限制或IOPS限制。
- 网络 (
net_cls
和net_prio
子系统):net_cls
:标记网络数据包,使其可以被流量控制工具(如 tc)处理。net_prio
:为每个网络接口设置优先级。
- 设备访问 (
devices
子系统):- 控制进程组对设备的访问。
- Freezer (
freezer
子系统):- 允许你暂停或恢复进程组的所有任务。
- 进程号 (
pid
子系统):- 限制进程组中的进程数量。
- cpuset (
cpuset
子系统):- 指定进程组可以使用的CPU和内存节点。
- perf_event (
perf_event
子系统):- 允许监控进程组的性能事件。
- cgroup 命名空间 (
ns
子系统):- 为进程组提供独立的cgroup命名空间视图。
- rdma (
rdma
子系统):- 管理和限制RDMA/InfiniBand资源。
Hierarchy 层次结构
层次结构是cgroup的组织方式,决定了对于进程如何进行分组和管理.