Cgroup框架分析

article/2025/7/18 21:31:00

cgroups概念扫盲

关于cgroups本文主要分析的是cgroups整体框架,不涉及对各个子系统的介绍和cgroupsfs的介绍,在分析cgroup整体框架的时候,首先我们需要对cgroups中的一些概念有所深刻认识,只有在这个基础上,才能明白为何cgroups的框架是设计成这样的,为了节约篇幅,更好突出cgroup框架这一内容,所以我不打算花时间来描述cgroup的一些概念。关于这方面的内容我推荐阅读附录A中提到的文章,如果你英文不好,你也可以参考下我总结的几篇cgroup文章,从基本概念到用户态的基本使用都所有涉及文章链接参考附录B

cgroups框架分析

cgroups框架中涉及了大量的结构体,并且嵌入了很多list_head以及hlist_node等数据结构,目的是将这些数据结构链接在一起,无论从任何一个结构体出发都可以很好的找到自己想要的目标结构体,因此内核中也出现了大量的短小精悍的inline funtion,这些function基本只有一两句话,核心的语句就是通过list_head或者hlist_node找到目标链接的结构体。内核中更有甚者会给两个概念上是多对多的这样关系的结构体专门抽象出一个单独的结构体嵌入list_head实现两个结构体的多对多关系,cgroup中就有这样的例子。

cgroups中的结构体概述

struct task_struct,这是进程描述符的结构体,和cgroup相关的则是其中struct css_set *cgroup成员,以及struct list_head cg_list成员struct css_set这是个啥东东呢css的全称为cgroup subsystem state,也就是cgroup子系统的状态,set很自然就是集合的意思了,所以css_set维护了一组子系统的状态所以呢css_set中核心的成员就是struct cgroup_subsys_state[CGROUP_SUBSYS_COUNT],一个子系统对应一个这样的结构体,好吧那就继续分析下这个结构体吧,struct cgroup_subsys_state对于这个结构体来说,里面有这个子系统对应的cgroup,这个子系统引用的次数,一个子系统如果使用了,那么肯定是属于一个cgroup的,所以这个结构体中最核心的成员应该是struct cgroup *cgroup,很显然struct cgroup就是一个cgroup组,如果不知道什么是cgroup中组或者是层次的概念,请看附录A或B中提到的文章,好了现在一个子系统对应一个cgroup,那么现在来看看struct cgroup是个啥啥,struct cgroup 首先会指向一组子系统,因为一个cgroup可以对应多个子系统,其次,一个cgroup应该维护层次关系,应该可以找到其兄弟cgroup,父cgroup等信息,所以cgroup中含有struct list_head children,struct list_head sibling还有struct cgroup cgroup,还应该有个啥呢?cgroup的name,所以就有了*struct cgroup_name __rcu *name这个成员,还应该有个指针指向cgroupfs文件系统,因为创建一个cgroup会在对应的cgroupfs文件系统中创建一系列的文件,所以就有了一个struct cgroupfs_root *root 成员,struct cgroup_name 就是一个char数组,加上一个锁,这个部分核心成员应该算是cgroupfs_root吧,好了到此为止吧,再往下分析我怕我收不住。总结一下就是结构体中的成员以及结构体之间的关于和cgroup的基本概念息息相关,所以在掌握cgroup的基本概念的前提下去分析cgroup框架是必经之路。cgroup框架还不仅仅是这些,下面会继续挖掘cgroup中结构体之间的深层次关系。

cgroups中结构体之间的关系

这里写图片描述
从上面的这幅图可以看出,通过task_struct可以找到一个css_set,这是一个子系统状态的集合,里面有cgroup_subsys_state,所以,通过task_struct来找到这个进程附加在哪些子系统中,受到哪些子系统的限制,通过cgroup_subsys_state子系统状态结构体又可以找到这个子系统属于哪个cgroup,所以通过css_set建立了task_struct和cgroup_subsys 以及task_struct和cgroup的一对多的关系。同时内核为了方便查找css_set,将所有的css_set建立了一个hash table 通过子系统可以快速找到子系统对应的状态,也就是cgroup_subsys_state,注意看下task_struct的cg_list成员,这个成员将所有具有相同css_set的进程连接起来,好吧,这一切都是为了快速查找,内核可谓之用心良苦啊。

这里写图片描述
css_set和cgroup是什么样的关系呢,内核为了清晰的表达出这两者的关系可谓之用心良苦,专门设计了一个结构体来表现其多对多的关系cg_cgroup_link,一个css_set对应多个子系统,每个子系统都有其对应的cgroup,所以一个css_set对应多个cgroup,反之,一个cgroup可能包含多个子系统,而多个子系统可能分开存在于多个css_set集合中,所以一个cgroup就对应多个css_set了
好吧,到此为止内核完美的呈现了这些数据结构直接的关系。最后来张大集合。

这里写图片描述
这张是cgroup涉及到的一些 结构体,以及这些结构体之间的关系,可见关系还是很复杂的,其中cgroup_subsys很重要,这是一个抽象类,每一个子系统都会去实例化这样的一个结构体,然后实现其中的一些方法,比如附加子系统,对子系统中的数据读写,等等一系列的操作,cgroupfs_root则是表示的是一个层次,很显然这个结构体应该将所有层次连接起来,以及所有的子系统连接起来,所以你会看到图中有roo_list和subsys_list两个链表。到此为止整个cgroup的框架其实以及很清楚了。

总结: cgroup总体框架的代码不难,难的是这些结构体的复杂关系。

附录

附录A

RedHat Resource Manager Document

附录B

Cgroup基本入门
Cgroup基本使用
Cgroup使用进阶


http://chatgpt.dhexx.cn/article/70DhMF0G.shtml

相关文章

音视频常见播放器框架分析

音视频面试必问:如何设计一个播放器 1.常见播放器框架分析 2.如何解决播放端延迟的问题 3.音视频如何做同步 4.快进、快退、逐帧播放如何实现 音视频开发技术精讲《常见播放器框架分析》 播放器框架 SDL2播放音频 使用SDL播放解码后的音频数据,SDL播放…

商业分析经典框架

商业分析经典框架 文章目录 商业分析经典框架1.行业怎么盈利现状分析PEST分析产业链分析 2.行业里谁在挣钱竞争分析标杆公司分析竞争格局分析细分机会分析 3.企业还能盈利么发展分析商业化模式演变新技术/产品新用户新市场 总结 1.行业怎么盈利 现状分析 PEST分析 这个行业在…

Linux内核4.14版本——alsa框架分析(1)—alsa简介

目录 一,ALSA声音编程介绍 二,ALSA历史 三,数字音频基础 四,ALSA基础 五,ALSA体系结构 六,设备命名 七,声音缓存和数据传输 八,Over and Under Run 九,一个典型…

sFuzz源代码框架分析

sFuzz是发表在软件工程顶会ICSE2020年论文(sFuzz:An Efficient Adaptive Fuzzer for Solidity Smart Contracts)中实现的工具。sFuzz通过基于距离的启发式策略的模糊测试技术实现对合约漏洞检测。 sFuzz基于C实现,集成了以太坊和模…

Linux V4L2 框架分析

背景 Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio 1. 概述 V…

IM即时通讯项目框架分析

1 IM即时通讯项目框架分析和部署 1. 即时通讯框架分析和部署 2. 登录服务器和消息服务器设计 3. 路由服务器设计 4. 数据库代理服务器设计 5. 文件服务器和docker部署 6. 性能测试和k8s上云发布 1.1 即时通讯应用场景 即时通讯技术应用非常广泛,涉及教育、电商、金融、…

框架分析--框架驱动

使用pomelo开发应用时,我们一直关注的是给框架填入相应的回调,给app配置一些上下文。而没有太多关心整个框架的驱动力量。 在我们启动应用的时候,我们会在game-server目录下执行pomelo start,然后就能看到很多log信息,…

二、小程序框架分析

2.1小程序框架 2.1.1基本框架 1)逻辑层 用来处理业务逻辑 JavaScript 2)视图层 用来渲染页面 视图层描述语言WXML 视图样式WXSS 2.1.2目录结构 1)框架全局文件 ①app.js 定义全局数据和函数的使用 指定微信小程序的生命周期函数 onLa…

多属性决策模型 matlab代码及例子

多属性决策模型 通过层次分析模型得到的 权重与属性值相乘 再找最优 层次分析方法 请看上篇博客层次分析法 例子然后各项指标的重要性创建比较矩阵,通过层次分析法得到各权重。 利用各项指标权值与每个公司对应数据相乘再相加得到的总值对比。

多属性决策模型

多属性决策模型 一、多属性决策模型(1)特点(2)属性值的归一化①效益型②成本型③固定型④偏离型⑤区间型⑥偏离区间型 二、例题及步骤①建立数学模型②属性值归一化③对不同的属性构建成对比较矩阵并计算属性权重④计算每个公司的…

数学建模 02多属性决策 归一化处理

多属性决策 什么是多属性决策 它指的是利用已有的决策信息通过移动的方式对一组(有限个)备选方案进行排序或者择优。它的主要组成部分有如下2种: 1、获取决策信息:属性权重和属性值(实数、区间数和语言)…

基于离差最大化的多属性决策方法及matlab应用

1.基于离差最大化的多属性决策方法 若所有方案在属性uj下的属性值差异越小,则说明属性对方案决策所起的作用越小;反之越重要。从对方案进行排序的角度考虑,方案属性值偏差越大的属性应该赋予较大的权重。 步骤1 对于多属性决策问题,构造决策矩阵A,并利用适当方法规范化处…

多属性决策的权重确定方法及matlab 程序

本文介绍11种多属性决策权重确定方法及matlab 程序。 1.列和求逆归一化方法(NHM) 1 2.行和归一化方法(NRA) 1 3.和积法(ANC) 1 4.方根法(NGM) 1 5. 特征向量法(EM) 2 6.上三角梯度特征向量法HGEM 2 7.下三角梯度特征向量法LGEM 2 8.综合梯度特征向量法HLGEM 2 9.加权最…

数学建模 多属性决策模型

转载博客来自:https://blog.csdn.net/zxiang248/article/details/72828742 多属性决策介绍 多属性决策是现代决策科学的一个重要组成部分,它的理论和方法在工程设计、经济、管理和军事等诸多领域中有着广泛的应用,如:投资决策、…

数模(2)——多属性决策模型

原创为b站视频:https://www.bilibili.com/video/av20238704 定义: 利用已有的决策信息通过一定的方式对一组备选方案进行排序或择优。 步骤: (1)获取决策信息:属性权重和属性值 (2&#xf…

数学建模02 —— 多属性决策模型

一、引言 在工程设计、经济、管理和军事等诸多领域中有着广泛的应用。比如:投资决策、项目评估、产业部门发展排序和经济效益综合评价等等。 二、实质 利用已有的决策信息通过一定的方式对一组(有限个)备选方案进行排序或择优。 两部分组成…

数学建模——多属性决策问题

数学建模 多属性决策 定义 多属性决策常应用在投资决策、项目评估、维修服务、武器系统性能评定、工厂选址、投标招标、产业部门发展排序和经济效益综合评价等方面.多属性决策的实质是利用已有的决策信息通过一定的方式对一组(有限个)备选方案进行排序或择优. 它主要由两部分…

层次分析法和多属性决策算法

层次分析法 层次分析法是笔者参加建模比赛最喜欢用的模型,也是各种算法中最简单的算法,大部分类型的题目都可以用层次分析法入手,进行初步的分析。 层次分析法的优点在于不需要任何数据,矩阵中用到的数据都是建模者主观上的比较&a…

数学建模方法-多属性决策模型

一、引言 哈喽大家好,今天我们要讲的一个内容叫“多属性决策”。这个东东它在工程设计、经济、管理和军事等诸多领域中有着广泛的应用。比如:投资决策、项目评估、产业部门发展排序和经济效益综合评价等等。那么接下来我们就要开始我们的内容咯。 二、多…

matlab实现决策矩阵规范化(多属性决策)

matlab实现决策矩阵规范化(多属性决策) 一般来说,不同的决策变量量纲也不同,规范化可以消除量纲对最终结果的影响,使不同变量具有可比性。 假设决策矩阵为 A ( a i j ) m n A({a_{ij}})_{mn} A(aij​)mn​, 规范化…