之前在学习docker的时候接触到了Cgroups的相关概念,下面将总结一些 hierarchy层级树(cgroup树)相关知识
Cgroups组件
在学习cgroup之前需要了解cgroups的三个组件
控制组
一个cgroups包含一组进程,并可以在这个cgroups上增加Linux subsystem的各种参数配置,将一组进程和一组subsystem关联起来
subsystem 子系统
是一组资源控制模块,可以通过lssubsys -a命令查看当前内核支持哪些subsystem
subsystem作用于hierarchy的cgroup节点,并控制节点中进程的资源占用
hierarchy 层级树
主要功能是把cgroups串成一个树型结构,使cgruops可以做到继承。也就是说将cgroup通过树状结构串起来,通过虚拟文件系统的方式暴露给用户
hierarchy 层级树
hierarchy 一个hierarchy可以理解为一棵cgroup树,树的每个节点就是一个进程组,每棵树都会与零到多个subsystem关联。
在一颗树里面,会包含Linux系统中的所有进程,但每个进程只能属于一个节点(进程组)。
系统中可以有很多颗cgroup树,每棵树都和不同的subsystem关联,一个进程可以属于多颗树,即一个进程可以属于多个进程组,只是这些进程组和不同的subsystem关联。目前Linux支持12种subsystem,如果不考虑不与任何subsystem关联的情况(systemd就属于这种情况),Linux里面最多可以建12颗cgroup树,每棵树关联一个subsystem,当然也可以只建一棵树,然后让这棵树关联所有的subsystem。当一颗cgroup树不和任何subsystem关联的时候,意味着这棵树只是将进程进行分组,至于要在分组的基础上做些什么,将由应用程序自己决定,systemd就是一个这样的例子
三个组件的关系
cgroup中的组件是相互关联的
1.系统创建新的hierarchy之后,系统中所有的进程都会加入这个hierarchy的cgroup的根节点,这个cgroup根节点是hierarchy默认创建的,在这个hierarchy中创建的所有cgroup都是这个cgroup根节点的子节点
2.一个subsystem只能附加到一个hierarchy上
3.一个hierarchy可以附加多个subsystem
4.一个进程可以作为多个cgroup的成员,但是这些cgroup必须在不同的hierarchy下
5.一个进程fork出子进程时,子进程和父进程是在同一个cgroup中的,根据需要也可以移动到其他的cgroup中
创建 hierarchy 层级并挂载子系统
1.挂载一颗和所有subsystem关联的cgroup树到/sys/fs/cgroup
mount -t cgroup xxx /sys/fs/cgroup
2.挂载一颗和cpuset subsystem关联的cgroup树到/sys/fs/cgroup/cpuset
mkdir /sys/fs/cgroup/cpuset
mount -t cgroup -o cpuset xxx /sys/fs/cgroup/cpuset
3.挂载一颗与cpu和cpuacct subsystem关联的cgroup树到/sys/fs/cgroup/cpu,cpuacct
mkdir /sys/fs/cgroup/cpu,cpuacct
mount -t cgroup -o cpu,cpuacct xxx /sys/fs/cgroup/cpu,cpuacct
4.挂载一棵cgroup树,但不关联任何subsystem
mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd xxx /sys/fs/cgroup/systemd
参考资料:
https://blog.csdn.net/wasd12121212/article/details/85760504?biz_id=102&utm_term=cgroup%20hierarchy%20%E5%B1%82%E7%BA%A7%E6%A0%91&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-7-85760504&spm=1018.2118.3001.4187
https://blog.csdn.net/qccz123456/article/details/90768509?biz_id=102&utm_term=cgroup%20hierarchy%20%E5%B1%82%E7%BA%A7%E6%A0%91&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-90768509&spm=1018.2118.3001.4187
https://www.cntofu.com/book/108/doc/zh/cgroups_in_storm.md
https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt