cgroup框架结构

这一章里,我们先整体介绍一个cgroup的框架结构,以及cgroup文件系统的相应文件定义。这里我们先看一下cgroup的主要结构关系:


图2 主要数据结构关系

该图包含了cgroup的所有主要数据结构及它们的关系。其中cgroupfs_root相当于我们mount操作指定的dir;cgroup表示在mount目录下的mkdir cg_test;而cgroup_subsys则是所有subsys的基类(-o选项),它定义了所有subsys的相应方法,及属性;cgroup_subsys_state是cgroup管理的subsys的group控制体的抽象类(这个名字有点别扭,看了后面可能就会明白),每个子系统有自己实现类如cpuset,task_group,mem_cgroup等,即cgroup_subsys_state实现C语言的多态,cgroup只管理cgroup_subsys_state这个结构,而不同的子系统根据这个结构,通过container_of来还原出自己的真正控制体;cg_cgroup_link则定义着cgroup与css_set的多对多关系(一个css_set为什么会有多个cgroup?——其根本的原因在于一个task会被attach到多个hierarchy,并且在每个hierarchy下的必有一个cgroup管理着该task(一个task只有一个css_set),所以有几个hierarchy该css_set就有几个cgroup。一个cgroup为什么会有多个css_set?——因为一个cgroup可以attach多个进程,而这些进程它们的css_set可能不一样,这个由该task所属的cgroups决定,只有所属的cgroups完全一样,它们才会共享一个css_set,否则的话,它们的css_set就不一样),css_set->cg_links指向所有管理了该css_set的cgroup(这些cgroup由cg_cgroup_link->cg_link_list链接起来的cg_cgroup_link),同理cgroup->css_sets指向所有该cgroup管理的css_set(这些css_set由cg_cgroup_link->cgrp_link_list链接起来的cg_cgroup_link),加入一个这样的中间结构其原因主要是解除css_set与cgroup之间的耦合关系(考虑在两者直接连接的情况下,如果我们要删除cgroup的操作,及多加了这个结构的相应操作?)。所有的css_set保存在css_set_table的全局哈希表里,它们的hash函数及key为css_set_hash(css_set->subsys);css_set则建立task与它的一对多关系,不一样的进程可能指向同一个css_set(如刚fork的父子进程),而css_set->tasks则是所有引用该css_set的tasks的list的head,task之间用task->cg_list进行链接;同样的,一个cgroupfs_root的所有cgroup_subsys由cgroupfs_root->subsys_list组织;所有的cgroupfs_root通过它的root_list连接到roots这个全局变量头里。
     通过该图我们可以知道cgroup内并没有保存task的list,那么我们查看tasks文件的时候(cat tasks)是怎么获得它的所有tasks?——cgroup->css_sets保存了所有它管理的css_set(通过cg_cgroup_link连接),另外css_set->tasks保存了所有引用它的tasks(该过程对应于cgroup_tasks_open);同样的,当我们cat /proc//cgroup的时候可以查看到一个task被哪些cgroup管理,这个过程是通过task->cgroups获得它的css_set,然后再从css_set->cg_links(通过cg_cgroup_link连接)获得它所属的cgroup(该过程相对应于cgroup_open->proc_cgroup_show->task_cgroup_from_root,实际的代码过程跟分析有点不一样,是由于输出要求按root区分,但依据的关系是一样的)。
注:我们mount之后其实已经产生了一个top cgroup,即它本身既是cgroupfs_root也是一个cgroup。

cgroup学习(二)——cgroup框架结构相关推荐

  1. 关于cgroup 学习

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

  2. linux cgroup学习总结

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

  3. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  4. spring security 学习二

    spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...

  5. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  6. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

  7. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  8. OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

    OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...

  9. OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats()

    OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats() 1.connectedComponents() ...

  10. OpenCV学习(二十) :分水岭算法:watershed()

    OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...

最新文章

  1. python 下载大文件
  2. oracle 主键自增函数_oracle 实现主键自增
  3. git 配置图形比较工具
  4. Andrew Ng机器学习(一):线性回归
  5. Session过期,如何跳出iframe框架页的问题
  6. sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理
  7. 「leetcode」15. 三数之和:双指针法
  8. 红米5 Plus刷开发版/小米手机刷开发版
  9. 实现微信小程序的分享转发功能(可以从分享页返回小程序首页)
  10. 嵌入式系统架构设计师的理解
  11. 电脑使用技巧提升篇10:电脑文件夹加密
  12. java 实现短信验证码
  13. meo学习笔记2:函数重载(C++)
  14. Python 获取中文字拼音首个字母
  15. Win10电脑开机后黑屏只有鼠标怎么办?
  16. 力扣 两数相加 C语言 题解
  17. 桌面存放linux文件无法删除,桌面文件无法删除怎么办【图文教程】
  18. 华为交换机端口不配置access_华为交换机屏蔽端口号
  19. (Modern Family S01E03) Part 3  MitchCam  准备买diaper Cam说Mitch势力 逛超市Mitch像是发现了新大陆
  20. INC公司和LLC公司的区别

热门文章

  1. sdut 2493 Constructing Roads (图论)
  2. 两道动态规划的作业题
  3. 24点游戏算法python_24点游戏算法
  4. python3.7升级pip_完美解决python3.7 pip升级 拒绝访问问题
  5. 记一些关于acm的小知识(自用,粗糙,勿点呀)
  6. [IOS]NSUserDefaults读取和写入
  7. Puppet apply命令参数介绍(五)
  8. Intel笔记本低压版CPU性能对比分析
  9. UIView属性clipsTobounds的应用
  10. 【SICP练习】142 练习3.77