6.3.10.1. Cgroups¶
6.3.10.1.1. 四个组件¶
Cgroups包含Cgroup、Subsystem、hierarchy、task四个组件。
6.3.10.1.1.1. Cgroup¶
Cgroup是对进程分组管理的一种机制,一个Cgroup包含一组进程,并可以在上面添加添加Linux Subsystem的各种参数配置,将一组进程和一组Subsystem的系统参数关联起来。
6.3.10.1.1.2. Subsystem¶
Subsystem是一个资源调度控制器不同版本的Kernel所支持的有所偏差,可以通过 cat /proc/cgroups
查看
- blkio
对块设备(比如硬盘)的IO进行访问限制
- cpu
设置进程的CPU调度的策略,比如CPU时间片的分配
- cpuacct
统计/生成cgroup中的任务占用CPU资源报告
- cpuset
在多核机器上分配给任务(task)独立的CPU和内存节点(内存仅使用于NUMA架构)
- devices
控制cgroup中对设备的访问
- freezer
挂起(suspend) / 恢复 (resume) cgroup 中的进程
- memory
用于控制cgroup中进程的占用以及生成内存占用报告
- net_cls
使用等级识别符(classid)标记网络数据包,这让 Linux 流量控制器 tc (traffic controller) 可以识别来自特定 cgroup 的包并做限流或监控
- net_prio
设置cgroup中进程产生的网络流量的优先级
- hugetlb
限制使用的内存页数量
- pids
限制任务的数量
- net_cls
可以使不同cgroups下面的进程使用不同的namespace。
每个subsystem会关联到定义的cgroup上,并对这个cgoup中的进程做相应的限制和控制。
6.3.10.1.1.3. hierarchy¶
hierarchy树形结构的 CGroup 层级,每个子 CGroup 节点会继承父 CGroup 节点的子系统配置,每个 Hierarchy 在初始化时会有默认的 CGroup(Root CGroup)。
6.3.10.1.1.4. Task¶
Task (任务) 在cgroups中,任务就是系统的一个进程。
6.3.10.1.1.5. 四个组件的关系¶
系统在创建新的hierarchy之后,该系统的所有任务都会加入这个hierarchy的cgroup,称之为root cgroup,此cgroup在创建hierarchy自动创建,后面在该hierarchy中创建都是cgroup根节点的子节点
一个subsystem只能附加到一个hierarchy上面
一个hierarchy可以附加多个subsystem
一个task可以是多个cgroup的成员,但这些cgroup必须在不同的hierarchy
一个进程fork出子进程时,该子进程默认自动成为父进程所在的cgroup的成员,也可以根据情况将其移动到到不同的cgroup中