linux的cgroups模型之说人话

368 阅读2分钟

cgroups什么时候产生的,干什么用的

自行百度

cgroups中的模型及其概念

  1. Tasks : 在Cgroups中,task就是系统的一个进程, 然后再tasks文件夹中
  2. Cgroup : Cgroups中的资源控制都以cgroup为单位实现的。cgroup表示按照某种资源控制标准划分而成的任务组,包含一个或多个
  3. Subsystem : Cgroups中的subsystem就是一个资源调度控制器(Resource Controller)。比如CPU子系统可以控制CPU时间分配,内存子系统可以限制cgroup内存使用量。
  4. Hierarchy : hierarchy由一系列cgroup以一个树状结构排列而成,每个hierarchy通过绑定对应的subsystem进行资源调度。hierarchy中的

当你看了上面的解释后肯定一头雾水,这他妈在讲什么,下面我用说人话来解释

Hierarchy

Hierarchy在linux中最多有12个(因为subsystem只有12个),每个可以看成是一颗树,一颗由cgroup节点组成的树,其linux展示的模型是一棵文件树,这个文件树只是为了更好理解,然后这些Hierarchy组成了一整个cgroups

Cgroup

cgroup存在于hierarchy中,你可以看成cgroup就是Hierarchy文件夹,整体的Hierarchy树就是又cgroup文件夹组成,然后cgroup里面包含task文件夹,然后可以进行资源限制的配置,还有挂载subsystem

Tasks

tasks文件夹就是存储进程的id,用来表明这些id是一个组,然后这组的限制由包含他们的cgroup决定

subsystem

subsystem是一个外部的东西,用subsystem挂载到某个Hierarchy上,然后对Hierarchy中的某个cgroup设置对应的限制,然后cgroup下的task就对应设置的限制

整体的模型

  1. 多个Hierarchy组成cgroups
  2. 一个Hierarchy可以看成是多个cgroup组成的
  3. 每个tasks都在cgroup中,然后可以存储多个进程id
  4. subsystem是以挂载的形式挂到某个Hierarchy中,然后单个或多个Hierarchy最多只能挂载多个类型,每个类型单个到各个Hierarchy(假如有12个不同类型的subsystem,也就只能挂载12个subsystem,不会有同类型多个的情况,这样其实就是为了不同Hierarchy分配不同的subsystem,然后各个管理自己的限制要不然会很混乱,当然也可以单个Hierarchy分配多个subsystem)
  5. cgroups一对多Hierarchy, Hierarchy由cgroup组成,cgroup包含task, subsystem挂载一个少一个,不能挂2个同类型

总结

抽象成一个个文件夹,然后文件夹就是cgroup,最上层的文件夹就是Hierarchy的概念,然后这些最上层的文件夹汇总就叫cgroups 然后对应文件夹挂载对应的资源限制类型,然后在文件夹cgroup里面进行配置对应的限制,设定好限制后,里面的task中的进程就被限制了