五分钟技术趣谈 | Linux Cgroup层级规则简析
Part 01cgroup概述
cgroup是Control Groups的缩写,是Linux内核提供的一种可以对进程或进程组进行物理资源(如:CPU,内存,设备IO等)限制、隔离和统计的机制。cgroup的用户空间管理是通过cgroup文件系统来实现,得益于Linux的虚拟文件系统,其文件系统的细节被隐藏,用户通过相关的控制文件来实现该功能的使用。
cgroup于2.6内核时期由Google公司主导引入,它是Linux内核实现资源虚拟化的技术基础,是LXC(Linux Containers)和Docker容器的技术基石。cgroup中有如下相关概念:
任务(task):进程的别称;控制组(control group):按照某种标准划分的进程集合。Cgroup中的资源控制都是以控制组为单位来实现。进程可以加入到某个控制组,也可以从一个进程组迁移到另一个控制组中。一个进程组的进程可以使用cgroups以控制组为单位分配的资源,同时受到cgroup以控制组为单位设置的资源限制。层级(hierarchy):控制组的层级关系,采用树的结构方式组织,子节点的控制组继承父节点的资源设置属性。子系统(subsystem):一个子系统就是一种资源控制器,比如cpu子系统可以控制进程CPU使用时间分配,如图1所示。子系统必须附件到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制组都受到这个子系统的控制。Part 02cgroup子系统
cgroup子系统和内核版本有关,随着内核的迭代,能限制的资源也越来越多,一般包括如下子系统。
➤blkio:对输入/输出访问存取块设备设定限制,比如物理设备(磁盘,固态硬盘,USB等等)。
➤cpu:限制进程的cpu使用,涉及cpu调度时间片分配。
➤cpuacct:自动生成cgroup中任务所使用的cpu报告。
➤cpuset:为cgroup中的任务分配独立cpu(多核系统)和内存节点。
➤devices:允许或者拒绝cgroup中的任务访问设备。
➤freezer:挂起或恢复cgroup中的任务。
➤memory:设定cgroup中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
➤net_cls:使用等级识别符标记网络数据包,可允许Linux流浪控制程序识别从具体cgroup中生成的数据包。
➤ns:namespace子系统。
Part 03cgroup层级规则
结合cgroup层级(hierarchy)可以理解为一颗树,树的每个节点就是一个进程组,每棵树都会与一到多个子系统关联。在一棵树里,会包含Linux系统中的所有进程,但每个进程只能属于一个节点(进程组)。系统中可以有很多颗cgroup树,每棵树都和不同的subsystem关联,一个进程可以属于多棵树,即一个进程可以属于多个进程组,只是这些进程组和不同的子系统关联。目前Linux最多可以建十二颗cgroup树,每棵树关联一个子系统,当然也可以只建一棵树,然后让这棵树关联到所有的子系统。当一颗cgroup树不和任何子系统关联的时候,意味着这棵树只是将进程进行分组,至于要在分组的基础上做些什么,将由应用程序自己决定,systemd就是这样一个例子。
层级的组成规则有四个,描述如下:
规则1:单个层次结构可以具有一个或多个子系统。如图1所示,/cpu_memory_cg这个层级对cgroup1,cgroup2设置了cpu和memory两个子系统。
图1 层级规则1
规则2:如果任何一个子系统已经附加到了一个层次,则不能将他们附加到另一个层次的结构中。如图2所示,层级A的cpu_cg首先管理cpu子系统,那么层级B的cpu_mem_cg就无法管理cpu子系统。
图2 cgroup层级规则2
规则3:每次在系统上创建新的层次结构时,系统上的所有任务最初都是该层次结构的默认cgroup(称为根cgroup)成员。对于创建的任何单个层次结构,系统上的每个任务都可以是该层次结构中的一个cgroup成员。一个任务可以位于多个cgroup中,只要这些cgroup中的每个处于不同的子系统层次结构中即可。任务一旦成为同一层次结构中的第二个cgroup成员,就会将其从该层次结构中的第一个cgroup中删除,即在同一层次结构中的两个不通cgroup,绝不会有同一任务,也即是对某进程某类cgroup子系统的限制方式只能有一种。创建第一个层次结构时,系统上的每个任务都是至少一个cgroup(根cgroup)的成员,因此,在使用cgroup时,每个系统任务始终至少位于一个cgroup中,如图3所示。
图3 cgroup层级规则3
规则4:系统上派生的任何进程都会创建一个子进程(或线程)。子进程自动继承其父级的cgroup成员资格,但可以根据需要移动到其他cgroup中,移动后父子进程完全独立,如图4所示。
图4 cgroup层级规则4
Part 04cgroup层级关系分析
我们从进程的角度出发,结合源码中的数据结构来解析cgroups相关数据之间的关系。首先在Linux中,管理进程的数据结构是task_struct,其中与cgroups有关的成员如下:
其中cgroup指向一个css_set结构,其存储了与进程相关的cgroups信息。cg_list为使用同一个css_set的进程链表。css_set结构如下:
结构体的元素信息解释如下:
refcount是css_set的引用计数,其可以被多个进程共用,只要这些进程的cgroups信息相同。比如,在所有已经创建的层级里面都在同一个cgroup里的进程。hlist用于把所有css_set构建成一个hash表,内核能快速查找特定的css_set。tasks将所有引用此css_set的进程链接成链表。cg_links指向一个由struct cg_group_link组成的链表subsys为一个指针数组,存储一组指向cgroup_subsys_state的指针。一个cgroup_subsys_state就是进程与一个特定的子系统相关的信息。通过这个指针,进程就可以获得相应的cgroups控制信息。接下来我们看一下cgroup_subsys_state结构体情况:
结构体中cgroup指针指向一个cgroup结构,进程受到子系统的资源控制,实际上是通过加入特定的cgroup子系统实现,因为cgroup在特定的层级上,而子系统又是附加到层级上的。
我们来看看cgroup的结构,
sibling,children和parent三个链表负责将同一层级的cgroup连接成一棵树。susys为之前描述过的子系统指针数组。root指向了一个cgroupfs_root的结构,就是cgroup所在的层级对应的结构体。root->top_cgroup指向所在层级的根cgroup,也就是幻剑层级时自动创建的那个cgroup。获取层级的根cgroup可以通过cgroup->root->top_cgroup。css_sets指向一个由cg_cgroup_link的链表,和css_set中cg_links一致。为了理清楚css_set和cgroup的关系,我们还需对中间层的cg_cgroup_link结构进行分析,结构体数据如下:
结构体中的数据说明如下:
cgrp_link_list链接到cgroup->css_sets指向的链表。
cgrp则指向此cg_cgroup_link相关的group。
cg_link_list则链接到css_set->cg_links指向的链表。
cg则指向cg_cgroup_link相关的css_set。
可以看出cgroup和css_set实际上是一个多对多的关系,需要添加一个中间结构将两者结合,cg_group_link中的cgrp和cg元素就是结合部,cgrp_link_list和cg_link_list两个链表即为挂接的cgroup和css_set实体,方便轮询。
从cgroup的层级规则中可以看出,一组进程可以同属于不在同一层级的cgroup,相结合理解,一个css_set存储了一组进程根各个子系统相关的信息,子系统来自不通的cgroup层级,因此一个css_set存储的cgroup_subsys_state可以对应多个cgroup。另一方面,cgroup层级也存储了一组cgroup_subsys_state,其从cgroup所在的层级附加的子系统中获得,一个cgroup可以有多个进程,进程的css_set不一定相同,因为进程可能使用了多个层级,所以一个cgroup也需要对应多个css_set。图5详细描述了多对多的挂接关系。
图5 进程和cgroup多对多关系图
Part 05结语
本文在cgroup概念基础上,对其和进程之间多对多的关系进行了拆解,从相关结构体中变量的挂接分析其具体代码实现方式,希望能帮助读者对cgroup层级关系和使用方式有更好的理解。
推荐系统
电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载
语言:中文版系统大小:2.98GB系统类型:Win8电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- mac地址查询,小编教你怎么查询电脑mac地址
- win8系统常用快捷键有哪些 win8系统常用快捷键介绍【详解】
- 装机高手教你卡片U盘怎样运用
- 电脑系统怎么重装xp方法
- (图)狂人微信营销软件运用图文详细教程_微信
- win10系统删除Windows defender后的具体恢复步骤
- win7好还是win8好
- win7管理员身份运行
- 怎么设置win7系统打印机共享 win7如何在win7上共享打印机设置打印机共享操作方法【详解】
- Win8.1商务本 戴尔Ins14zD-3528售4010元
- 简述联想笔记本重装系统多少钱一次以及如何重装
- Windows10 S怎样?Windows10 S六大新特征介绍
- vlookup怎么用,小编教你excel vlookup怎么用
- Win8删除文件需要权限怎么办?Win8删除文件需要权限的解决办法
- Win10怎样使用diskpart命令来管理磁盘?
- win7截图快捷键,本文教您win7怎样截图
- win7电脑鼠标指win7鼠标指针怎么对应的针怎么换
- win7系统使用虚拟光驱的图文教程
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 5雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1电脑公司ghostwin1064位精简极速版v2023.05最新免费下载
- 2风林火山 GHOST WIN7 SP1 X86 安全稳定版 V2016.08(32位) 下载
- 3win10 22H2 19045.2006正式版 v2023.01下载
- 4笔记本专用Win10系统下载_笔记本Ghost Win10 64位专业激活版免费下载
- 5Win10 22H2正式版下载_Win10 22H2正式版台式电脑优化版系统2022.10
- 6雨林木风 GHOST WIN7 SP1 X64 万能装机版 V2015.05(64位) 下载
- 7Win10 21H2原版镜像下载_微软Win10 21H2官方原版镜像下载
- 8番茄花园 GHOST XP SP3 正式免激活版 V2023.08 下载
- 9新萝卜家园 Ghost XP SP3 电脑城装机版 2011.09+ 极速版 下载
- 10深度技术 GHOST WIN7 SP1 X86 快速装机优化版 V2014.12 下载