搜索
首页运维Nginx五分钟技术趣谈 | Linux Cgroup层级规则简析

五分钟技术趣谈 | Linux Cgroup层级规则简析

Part 01 cgroup概述  

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 02  cgroup子系统  

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 03  cgroup层级规则 

结合cgroup层级(hierarchy)可以理解为一颗树,树的每个节点就是一个进程组,每棵树都会与一到多个子系统关联。在一棵树里,会包含Linux系统中的所有进程,但每个进程只能属于一个节点(进程组)。系统中可以有很多颗cgroup树,每棵树都和不同的subsystem关联,一个进程可以属于多棵树,即一个进程可以属于多个进程组,只是这些进程组和不同的子系统关联。目前Linux最多可以建十二颗cgroup树,每棵树关联一个子系统,当然也可以只建一棵树,然后让这棵树关联到所有的子系统。当一颗cgroup树不和任何子系统关联的时候,意味着这棵树只是将进程进行分组,至于要在分组的基础上做些什么,将由应用程序自己决定,systemd就是这样一个例子。

层级的组成规则有四个,描述如下:

规则1:单个层次结构可以具有一个或多个子系统。如图1所示,/cpu_memory_cg这个层级对cgroup1,cgroup2设置了cpu和memory两个子系统。

五分钟技术趣谈 | Linux Cgroup层级规则简析

图1 层级规则1

规则2:如果任何一个子系统已经附加到了一个层次,则不能将他们附加到另一个层次的结构中。如图2所示,层级A的cpu_cg首先管理cpu子系统,那么层级B的cpu_mem_cg就无法管理cpu子系统。

五分钟技术趣谈 | Linux Cgroup层级规则简析

图2 cgroup层级规则2

规则3:每次在系统上创建新的层次结构时,系统上的所有任务最初都是该层次结构的默认cgroup(称为根cgroup)成员。对于创建的任何单个层次结构,系统上的每个任务都可以是该层次结构中的一个cgroup成员。一个任务可以位于多个cgroup中,只要这些cgroup中的每个处于不同的子系统层次结构中即可。任务一旦成为同一层次结构中的第二个cgroup成员,就会将其从该层次结构中的第一个cgroup中删除,即在同一层次结构中的两个不通cgroup,绝不会有同一任务,也即是对某进程某类cgroup子系统的限制方式只能有一种。创建第一个层次结构时,系统上的每个任务都是至少一个cgroup(根cgroup)的成员,因此,在使用cgroup时,每个系统任务始终至少位于一个cgroup中,如图3所示。

五分钟技术趣谈 | Linux Cgroup层级规则简析

图3 cgroup层级规则3

规则4:系统上派生的任何进程都会创建一个子进程(或线程)。子进程自动继承其父级的cgroup成员资格,但可以根据需要移动到其他cgroup中,移动后父子进程完全独立,如图4所示。

五分钟技术趣谈 | Linux Cgroup层级规则简析

图4 cgroup层级规则4


Part 04 cgroup层级关系分析 

我们从进程的角度出发,结合源码中的数据结构来解析cgroups相关数据之间的关系。首先在Linux中,管理进程的数据结构是task_struct,其中与cgroups有关的成员如下:

五分钟技术趣谈 | Linux Cgroup层级规则简析

其中cgroup指向一个css_set结构,其存储了与进程相关的cgroups信息。cg_list为使用同一个css_set的进程链表。css_set结构如下:

五分钟技术趣谈 | Linux Cgroup层级规则简析

结构体的元素信息解释如下:

  • 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结构体情况:

五分钟技术趣谈 | Linux Cgroup层级规则简析

结构体中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一致。

五分钟技术趣谈 | Linux Cgroup层级规则简析

为了理清楚css_set和cgroup的关系,我们还需对中间层的cg_cgroup_link结构进行分析,结构体数据如下:

五分钟技术趣谈 | Linux Cgroup层级规则简析

结构体中的数据说明如下:

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详细描述了多对多的挂接关系。

五分钟技术趣谈 | Linux Cgroup层级规则简析

图5 进程和cgroup多对多关系图

Part 05  结语 

本文在cgroup概念基础上,对其和进程之间多对多的关系进行了拆解,从相关结构体中变量的挂接分析其具体代码实现方式,希望能帮助读者对cgroup层级关系和使用方式有更好的理解。

以上是五分钟技术趣谈 | Linux Cgroup层级规则简析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
雷军分享新年愿望:交付30万辆车、健身房打卡100次雷军分享新年愿望:交付30万辆车、健身房打卡100次Apr 13, 2025 pm 11:54 PM

新年伊始,雷军抖音跨年直播分享了2025年的三个新年愿望,这场长达四个半小时的直播吸引了众多关注。雷军的三大愿望分别是:第一,实现30万辆汽车交付目标,缓解压力,不再被进度追赶。第二,拥有更多旅行时间,欣赏各地美景、品尝特色美食,并结合工作进行汽车测试。第三,坚持健身,计划在健身房打卡100次,强身健体。雷军在直播中坦言,2024年奔波于各地,行程安排紧凑,往往只能短暂停留,难以深入体验当地文化。例如,在德国纽北赛道,他仅停留了8个小时。因此,在新的一年里,他希望能够更好地平衡工作与生活,在旅行

年度口碑佳作!九号公司微电影《记忆奇旅》荣膺多项权威大奖年度口碑佳作!九号公司微电影《记忆奇旅》荣膺多项权威大奖Apr 13, 2025 pm 11:51 PM

九号公司携手品牌代言人易烊千玺打造的微电影《记忆奇旅》,在2024年荣获多项权威媒体大奖,成为年度口碑佳作。这部作品以独特的叙事风格、精湛的制作和真挚的情感,赢得了业界的高度赞誉。2024年度获奖荣誉:2024金触点全球商业创新大奖-年度影视广告2024中国广告营销大奖-娱乐营销组银奖2024TopDigital创新营销奖-影视制作类金奖2024上海国际广告节-微电影银奖2024第十一届中国创新传播大奖-整合营销类银奖WISE2024商业之王-年度案例第31届中国国际广告节2024数字营销实战大

创新引领,再获殊荣!AGON斩获PConline2024智臻科技奖创新引领,再获殊荣!AGON斩获PConline2024智臻科技奖Apr 13, 2025 pm 11:48 PM

近日,PConline2024智臻科技奖正式揭晓,AGON爱攻QD-OLED电竞显示器AG326UD荣获“年度技术创新”奖项。此项殊荣不仅代表了业界对其技术优势与市场表现的高度认可,更充分体现了AGON爱攻在电竞显示器技术领域的创新能力和卓越成就。01.瞰科技未来,品技术革命PConline智臻科技奖的权威含金量作为科技行业的风向标,PConline智臻科技奖凭借其严谨的评审体系和深度的行业分析,成功赢得广泛的行业认可。该奖项始终致力于表彰推动科技行业发展的优秀产品和品牌,涵盖从技

索尼证实PS5 Pro使用特制GPU 与AMD合作研发AI可能性索尼证实PS5 Pro使用特制GPU 与AMD合作研发AI可能性Apr 13, 2025 pm 11:45 PM

SonyInteractiveEntertainment(SIE,索尼互动娱乐)首席架构师MarkCerny公开更多次世代主机PlayStation5Pro(PS5Pro)硬体细节,包括性能升级的AMDRDNA2.x架构GPU,以及与AMD合作代号「Amethyst」的机器学习/人工智慧计划。 PS5Pro性能提升的重点仍集中在更强大的GPU、先进的光线追踪与AI驱动的PSSR超解析度功能等3大支柱上。 GPU采用客制化的AMDRDNA2架构,索尼将其命名为RDNA2.x,它拥有部分RDNA3架构才

终于改了!微软Windows搜索功能将迎来全新更新终于改了!微软Windows搜索功能将迎来全新更新Apr 13, 2025 pm 11:42 PM

微软针对Windows搜索功能的改进,目前已在欧盟地区部分WindowsInsider频道展开测试。此前,整合后的Windows搜索功能饱受用户诟病,体验欠佳。此次更新将搜索功能拆分为本地搜索和基于Bing的网络搜索两部分,以提升用户体验。新版搜索界面默认进行本地文件搜索,如需进行网络搜索,需点击“MicrosoftBingWebSearch”标签进行切换。切换后,搜索栏将显示“MicrosoftBingWebSearch:”,用户可在此输入关键词。此举有效避免了本地搜索结果与Bing搜索结果混

熟练地烤好了!怪物猎人推出20周年烤肉计时器与暖水壶熟练地烤好了!怪物猎人推出20周年烤肉计时器与暖水壶Apr 13, 2025 pm 11:39 PM

为庆祝卡普空《怪物猎人》系列20周年,宝岛社推出了一款别具匠心的杂志套装——《怪物猎人》主题烧烤计时器及随行杯。该套装将于12月27日在日本全国全家便利店发售,售价3498日元。这款杂志套装最大的亮点在于其互动式烧烤计时器,完美复刻了系列游戏中的经典烧烤场景。计时器采用旧版烤肉工具的设计,配有LED火焰灯效和游戏BGM,让您在实际烧烤过程中也能体验到狩猎的乐趣。旋转手柄模拟翻转烤肉,成功烤熟后更会播放“烤好了!”的语音提示。计时器尺寸约为9.5cm(高)x10.7cm(宽)x8cm(深),内置L

太懂用户了!小米SU7车主可免费领Are U OK气门芯帽太懂用户了!小米SU7车主可免费领Are U OK气门芯帽Apr 13, 2025 pm 11:36 PM

小米汽车一周年庆典,为车主送上新年大礼!继去年交付量突破13万辆后,小米汽车官方微博宣布,将为每位小米SU7车主及准车主赠送雷军经典语录“AreyouOK?”主题气门芯帽,数量有限,免费领取!活动时间:2024年12月28日下午4点至2025年1月20日23:59:59。在2024年12月31日23:59:59前购车或完成订单的用户,即可免费获得一套四件套“AreyouOK?”气门芯帽。这款气门芯帽于今年9月首发,采用亮黄色PVC和黄铜材质制成,黄铜芯直接嵌入,确保行驶安全,不易脱落。用途广泛,

HDMI 2.2标准有望2025前夕公布!8K分辨率即将到来HDMI 2.2标准有望2025前夕公布!8K分辨率即将到来Apr 13, 2025 pm 11:33 PM

据报道,HDMI2.2标准有望在2025年CES展会前夕正式发布,HDMIForum计划于1月6日公布这一新一代视频信号传输协议规范。2017年发布的HDMI2.1标准,最大带宽为48Gbps,支持4K144Hz和8K30Hz视频传输,结合DSC技术最高可达10K120Hz。预计HDMI2.2将大幅提升带宽,支持更高分辨率和刷新率,并采用新型线材。虽然具体规格尚未公开,但HDMI2.2势必超越HDMI2.1的48Gbps带宽和10240*4320分辨率限制。鉴于DisplayPort2.1在20

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。