create new cgroup

该过程就是mkdir/cgroup/cpu/test_cpu:在一个/cgroup/cpu hierarchy上创建一个cgroup,下面的bt是创建一个cpu hierarchy下的cgroup:

[html] view plain copy
  1. mkdir /cgroup/cpu/test_cpu
  2. 74447177 8388 (mkdir) call trace:
  3. 0xffffffff8105fe80 : cpu_cgroup_create+0x0/0x40[kernel]
  4. 0xffffffff810c1021 :cgroup_mkdir+0x161/0x540 [kernel]
  5. 0xffffffff811850a7 :vfs_mkdir+0xa7/0x100 [kernel]
  6. 0xffffffff8118816e :sys_mkdirat+0xfe/0x120 [kernel]
  7. 0xffffffff811881a8 : sys_mkdir+0x18/0x20[kernel]
  8. 0xffffffff8100b0f2 :system_call_fastpath+0x16/0x1b [kernel]

在cgroup_mkdir里会直接调用cgroup_create(这里可能被编译器优化了),它先为该cgroup所属的每个subsys创建一个cgroup_subsys_state,并初始化:

[cpp] view plain copy
  1. for_each_subsys(root, ss) {
  2. struct cgroup_subsys_state*css = ss->create(ss, cgrp);
  3. init_cgroup_css(css, ss,cgrp);
  4. }

通过该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:

[html] view plain copy
  1. 74447240 8388 (mkdir) call trace:
  2. 0xffffffff81054e60 :cpu_cgroup_populate+0x0/0x30 [kernel]
  3. 0xffffffff810c007a :cgroup_populate_dir+0x7a/0x110 [kernel]
  4. 0xffffffff810c11fc : cgroup_mkdir+0x33c/0x540[kernel]
  5. 0xffffffff811850a7 :vfs_mkdir+0xa7/0x100 [kernel]
  6. 0xffffffff8118816e :sys_mkdirat+0xfe/0x120 [kernel]
  7. 0xffffffff811881a8 : sys_mkdir+0x18/0x20[kernel]
  8. 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相关推荐

  1. 关于cgroup 学习

    一.前言 cgroup在K8S中有重要应用,K8S参考书籍: kubernetes权威指南第5版 公司一个项目用linux 的 cgroup 技术来限制进场cpu和内存使用,具有非常好的学习意义,所以 ...

  2. linux cgroup学习总结

    linux-cgroup使用 大纲 概念 安装与使用 概念 基础知识 cgroups 是Linux内核提供的一种可以限制,隔离单个进程或者多个进程组 (process groups)所使用物理资源的机 ...

  3. OpenCV与图像处理学习五——图像滤波与增强:线性、非线性滤波、直方图均衡化与Gamma变换

    OpenCV与图像处理学习五--图像滤波与增强:线性.非线性滤波.直方图均衡化与Gamma变换 三.图像滤波与增强 3.1 线性滤波 3.1.1 方框滤波 3.1.2 均值滤波 3.1.3 高斯滤波 ...

  4. vivado 亚稳态_【vivado学习五】时序分析

    想一千次,不如去做一次.华丽的跌倒,胜过无谓的徘徊. [vivado学习五]时序分析 典型的时序模型由发起寄存器.组合逻辑和捕获寄存器3部分组成,如图1所示形成了三条时钟路径:原时钟路径(Source ...

  5. C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...

    Timer类:设置一个定时器,定时执行用户指定的函数.               定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...

  6. PyTorch框架学习五——图像预处理transforms(一)

    PyTorch框架学习五--图像预处理transforms(一) 一.transforms运行机制 二.transforms的具体方法 1.裁剪 (1)随机裁剪:transforms.RandomCr ...

  7. Docker学习五:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  8. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  9. 罗马音平假名片假名转换器_零基础日语萌新该如何学习五十音?

    在这里跟小伙伴们讲一下如何学习日语50音.五十音就像我们的二十六个字母一样.如果我们不能熟练地写和发音五十种音调,我们就无法很好地继续学习. 日语五十音图 https://sourl.cn/rMFhZ ...

  10. vector 插入_Java学习五分钟系列:对比Vector、ArrayList、LinkedList

    Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. Java的集合类,值得我们深入的学习,建议大家有时间的话,可以阅读一下源 ...

最新文章

  1. Scrapy爬取IT之家
  2. OpenCV检测平面物体
  3. Java描述设计模式(24):备忘录模式
  4. 漫步数理统计一——绪论
  5. Unity 4 3 制作一个2D横版射击游戏 2
  6. 查找功能_苹果查找功能怎么查找另一台设备?很简单,只需这样操作
  7. man后面的数字(转)
  8. PHP在线教育平台源码 网课小程序源码
  9. 怎么把cad的图导入ps_CAD图纸快速高效导入PS的方法
  10. 关于协作与个人英雄主义
  11. 《海边的卡夫卡》书评
  12. Android 11.0 ActivityManagerService的启动流程
  13. 你可能不知道的css-doodle
  14. JavaScript进阶学习(Web APIs)
  15. 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64
  16. 软件测试周刊(第51期):漂漂亮亮、从从容容地出现在大家面前,不仅是虚荣的事,更是庄重与自信的事。 ​​​
  17. 信息学奥赛一本通 1214:八皇后 | OpenJudge NOI 2.5 1756:八皇后
  18. js脚本锁计算机软件,[计算机软件及应用]JS脚本大全各种常用脚本.doc
  19. 强化学习丨有限马尔可夫决策过程学习总结
  20. html css弹出修改框,CSS弹出框样式

热门文章

  1. ZOJ 1654 二分匹配基础题
  2. 为ASP.NET封装的SQL数据库访问类(转)
  3. 创建visual basic2005 数据库
  4. centos7 安装mysql_第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据
  5. cronmon 定时任务执行状态监控
  6. 2017-2018-20172309 《程序设计与数据结构》第五周学习总结
  7. 面向对象程序设计——总结作业
  8. docker学习3-虚拟网络模式
  9. PHP get_class_methods函数用法
  10. set 集合容器实现元素的插入与中序排序