本文作为cgroup内核代码的开篇文档,只介绍cgroup的设计理念,不介绍具体代码。理解了本文即理解了cgroup的核心思想,可以更容易地理解其它cgroup的源码分析文章。文中出现的内核源码来源于4.14.4版本。
一、资源的树型管理
CGROUP是拥有共同资源属性的任务的集合,用来控制一组任务拥有多少资源可用。内核中有多种资源(称为子系统,参考struct cgroup_subsys和 参考struct cgroup_subsys_state),这些资源绝大多数是可数、可分配的,因此CGROUP V1版本中是以层次树(也叫 hierarchy)的方式来进行管理。因为树的子树或子节点 (参考struct cgroup )属性可以体现资源的包含或子集关系。比如根节点拥有全部的资源上限(如内存2G),子节点拥有部分的资源上限(如内存1G)。任务挂到哪个节点上,就有相应的资源控制属性。
为了简化或者减少数据结构,可以把多个资源放到一颗树上进行管理,因此cgroup这个对象可以同时管理多个资源(subsys),可以看到它有一个 cgroup_subsys_state数组成员用来保存这个节点中的多种资源当时的状态。
二、统
一、资源的树型管理
CGROUP是拥有共同资源属性的任务的集合,用来控制一组任务拥有多少资源可用。内核中有多种资源(称为子系统,参考struct cgroup_subsys和 参考struct cgroup_subsys_state),这些资源绝大多数是可数、可分配的,因此CGROUP V1版本中是以层次树(也叫 hierarchy)的方式来进行管理。因为树的子树或子节点 (参考struct cgroup )属性可以体现资源的包含或子集关系。比如根节点拥有全部的资源上限(如内存2G),子节点拥有部分的资源上限(如内存1G)。任务挂到哪个节点上,就有相应的资源控制属性。
为了简化或者减少数据结构,可以把多个资源放到一颗树上进行管理,因此cgroup这个对象可以同时管理多个资源(subsys),可以看到它有一个 cgroup_subsys_state数组成员用来保存这个节点中的多种资源当时的状态。
二、统