参考:https://zhuanlan.zhihu.com/p/434731896、https://www.cnblogs.com/zhrx/p/16388175.html
cgroup
目前我们所提到的容器技术、虚拟化技术(不论何种抽象层次下的虚拟化技术)都能做到资源层面上的隔离和限制。
对于容器技术而言,它实现资源层面上的限制和隔离,依赖于linux内核所提供的cgroup和namespace技术。
两项技术的概括
- cgroup主要作用:管理资源的分配、限制;
- namespace的主要作用:封装抽象,限制,隔离,使命名空间内的进程开起来拥有他们自己的全局资源;
cgroup是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘、输入输出等)。
cgroup需要限制的资源是:
- CPU
- 内存
- 网络
- 磁盘I/O
作用:
- 资源限制:可以配置cgroup,从而限制进程可以对特性资源的使用量
- 优先级:当资源发生冲突时,可以控制一个进程相比另一个cgroup中的进程可以使用的资源量(CPU、磁盘或网络等)
- 记录:在cgroup级别监控和报告资源限制
- 控制:可以使用单个命令更改cgroup中所有进程的状态(冻结、停止或重新启动)
依赖的四个核心概念
- 子系统
- 控制组
- 层技树
- 任务
控制组(group)
表示一组进程和一组带有参数的子系统的关联关系。例如,一个进程使用了CPU子系统来限制CPU的使用时间,则这个进程和CPU子系统的关联关系称为控制组。
层级树
有 一系列的控制组按照树状结构排列组成的。这种排列方式可以使得控制组拥有父子关系,子控制组默认拥有父控制组的属性,也就是子控制组会继承父控制组。
比如,系统中定义了一组控制组c1,限制了CPU可以使用1核,然后另一个控制组c2想实现既限制CPU使用1核,同时限制内存使用2G,那么c2就可以直接继承c1,无需重复定义CPU限制。
子系统
一个内核的组件,一个系统代表一类资源调度控制器。例如内存子系统可以限制内存的使用量,CPU子系统可以限制CPU的使用时间。
子系统是真正实现某类资源的限制的基础。
subsystems(子系统)cgroups中的子系统就是一个资源调度控制器(又叫controllers)。 在/sys/fs/cgroup/这个目录下可以看到cgroup子系统
|
|
这篇文章好强,可以抽空研究复现下:https://www.cnblogs.com/zhrx/p/16388175.html