cgroup学习(五)—— create new cgroup
create new cgroup
该过程就是mkdir/cgroup/cpu/test_cpu:在一个/cgroup/cpu hierarchy上创建一个cgroup,下面的bt是创建一个cpu hierarchy下的cgroup:
- mkdir /cgroup/cpu/test_cpu
- 74447177 8388 (mkdir) call trace:
- 0xffffffff8105fe80 : cpu_cgroup_create+0x0/0x40[kernel]
- 0xffffffff810c1021 :cgroup_mkdir+0x161/0x540 [kernel]
- 0xffffffff811850a7 :vfs_mkdir+0xa7/0x100 [kernel]
- 0xffffffff8118816e :sys_mkdirat+0xfe/0x120 [kernel]
- 0xffffffff811881a8 : sys_mkdir+0x18/0x20[kernel]
- 0xffffffff8100b0f2 :system_call_fastpath+0x16/0x1b [kernel]
在cgroup_mkdir里会直接调用cgroup_create(这里可能被编译器优化了),它先为该cgroup所属的每个subsys创建一个cgroup_subsys_state,并初始化:
- for_each_subsys(root, ss) {
- struct cgroup_subsys_state*css = ss->create(ss, cgrp);
- init_cgroup_css(css, ss,cgrp);
- …
- }
通过该cgroup->subsys[]可以获得该cgroup的所有cgroup_subsys_state,同样通过cgroup_subsys_state->cgroup可以知道该cgroup_subsys_state所属的cgroup。以后cgroup与subsys的group控制体的转换都是通过该结构来完成。
cpu_cgroup_create最终会通过sched_create_group(继承父cgroup)来生成一个task_group(即cpu子系统的group控制体结构),它包含了该cgroup的se,cfs_rq,shares等(在介绍cpu子系统的时候,我们再详细讨论)。
创建完成cgroup_subsys_state后就是生成该目录cgroup_create_dir,及生成子系统的文件cgroup_populate_dir:
- 74447240 8388 (mkdir) call trace:
- 0xffffffff81054e60 :cpu_cgroup_populate+0x0/0x30 [kernel]
- 0xffffffff810c007a :cgroup_populate_dir+0x7a/0x110 [kernel]
- 0xffffffff810c11fc : cgroup_mkdir+0x33c/0x540[kernel]
- 0xffffffff811850a7 :vfs_mkdir+0xa7/0x100 [kernel]
- 0xffffffff8118816e :sys_mkdirat+0xfe/0x120 [kernel]
- 0xffffffff811881a8 : sys_mkdir+0x18/0x20[kernel]
- 0xffffffff8100b0f2 :system_call_fastpath+0x16/0x1b [kernel]
在创建cgroup目录的时候(cgroup_create_dir)会将该cgroup保存在dentry->d_fsdata = cgrp里,这样就将目录与该cgroup关联起来,当需要操作该目录下的文件时,就通过从这里取得它所属的cgroup;同样在生成每个文件的时候(cgroup_add_file)会把该文件的cftype保存到dentry->d_fsdata = (void *)cft,当在操作该文件的时候,将根据它定义的方法来完成。
简而言之,该过程完成cgroup结构的创建包括该cgroup所属的所有子系统的cgroup_subsys_state,然后相应的目录及文件,并把这些文件与该cgroup绑定起来。这里并没有建立css_set与该cgroup的关系,因为mkdir时该cgroup还没有attach任何进程,所以也不会有css_set与它有关系。
cgroup学习(五)—— create new cgroup相关推荐
- 关于cgroup 学习
一.前言 cgroup在K8S中有重要应用,K8S参考书籍: kubernetes权威指南第5版 公司一个项目用linux 的 cgroup 技术来限制进场cpu和内存使用,具有非常好的学习意义,所以 ...
- linux cgroup学习总结
linux-cgroup使用 大纲 概念 安装与使用 概念 基础知识 cgroups 是Linux内核提供的一种可以限制,隔离单个进程或者多个进程组 (process groups)所使用物理资源的机 ...
- OpenCV与图像处理学习五——图像滤波与增强:线性、非线性滤波、直方图均衡化与Gamma变换
OpenCV与图像处理学习五--图像滤波与增强:线性.非线性滤波.直方图均衡化与Gamma变换 三.图像滤波与增强 3.1 线性滤波 3.1.1 方框滤波 3.1.2 均值滤波 3.1.3 高斯滤波 ...
- vivado 亚稳态_【vivado学习五】时序分析
想一千次,不如去做一次.华丽的跌倒,胜过无谓的徘徊. [vivado学习五]时序分析 典型的时序模型由发起寄存器.组合逻辑和捕获寄存器3部分组成,如图1所示形成了三条时钟路径:原时钟路径(Source ...
- C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...
Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...
- PyTorch框架学习五——图像预处理transforms(一)
PyTorch框架学习五--图像预处理transforms(一) 一.transforms运行机制 二.transforms的具体方法 1.裁剪 (1)随机裁剪:transforms.RandomCr ...
- Docker学习五:Docker 数据管理
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
- 罗马音平假名片假名转换器_零基础日语萌新该如何学习五十音?
在这里跟小伙伴们讲一下如何学习日语50音.五十音就像我们的二十六个字母一样.如果我们不能熟练地写和发音五十种音调,我们就无法很好地继续学习. 日语五十音图 https://sourl.cn/rMFhZ ...
- vector 插入_Java学习五分钟系列:对比Vector、ArrayList、LinkedList
Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. Java的集合类,值得我们深入的学习,建议大家有时间的话,可以阅读一下源 ...
最新文章
- Scrapy爬取IT之家
- OpenCV检测平面物体
- Java描述设计模式(24):备忘录模式
- 漫步数理统计一——绪论
- Unity 4 3 制作一个2D横版射击游戏 2
- 查找功能_苹果查找功能怎么查找另一台设备?很简单,只需这样操作
- man后面的数字(转)
- PHP在线教育平台源码 网课小程序源码
- 怎么把cad的图导入ps_CAD图纸快速高效导入PS的方法
- 关于协作与个人英雄主义
- 《海边的卡夫卡》书评
- Android 11.0 ActivityManagerService的启动流程
- 你可能不知道的css-doodle
- JavaScript进阶学习(Web APIs)
- 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64
- 软件测试周刊(第51期):漂漂亮亮、从从容容地出现在大家面前,不仅是虚荣的事,更是庄重与自信的事。 ​​​
- 信息学奥赛一本通 1214:八皇后 | OpenJudge NOI 2.5 1756:八皇后
- js脚本锁计算机软件,[计算机软件及应用]JS脚本大全各种常用脚本.doc
- 强化学习丨有限马尔可夫决策过程学习总结
- html css弹出修改框,CSS弹出框样式