linux 的 cgroups 模型之说人话

本贴最后更新于 1862 天前,其中的信息可能已经物是人非

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 中的进程就被限制了

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    946 引用 • 943 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...