linux的qos机制 - cgroup篇 (3)
来源:互联网 发布:mac 桌面隐藏硬盘 编辑:程序博客网 时间:2024/06/08 10:58
从这篇开始介绍cgroup的原理,这两篇文章很不错先放这里
http://blog.csdn.net/ustc_dylan/article/details/4030824
http://blog.csdn.net/ustc_dylan/article/details/4030831
/* The default css_set - used by init and its children prior to any
* hierarchies being mounted. It contains a pointer to the root state
* for each subsystem. Also used to anchor the list of css_sets. Not
* reference-counted, to improve performance when child cgroups
* haven't been created.
*/
static struct css_set init_css_set;
static struct cg_cgroup_link init_css_set_link;
系统所有的subsystem都在这里:
static struct cgroup_subsys *subsys[] = {
#include <linux/cgroup_subsys.h>
};
cgroup_init_early:初始化init_css_set, init_css_set_link这两个全局结构,设置init进程的cgroups指针,为init_css_set
cgroup_init:调用cgroup_init_subsys初始化subsys数组里所有剩下的的subsystem(没有在cgroup_init_early中初始化的subsys),为init_css_set设置hlist指向的hash list,最后调用register_filesystem注册一个类型为cgroup的伪文件系统,并创建/proc/cgroups。其中cgroup_init会调用cgroup_init_subsys
cgroup_init_subsys:对于每一个subsystem,都要添加到rootnode(系统最高的唯一cgroupfs_root),rootnode保存了一个subsys_list里面是所有subsystem的列表,这些group_subsys互相保存在cgroup_subsys->sibling的列表中。这里出现了一个struct cgroup dummytop,用来表示hierarchy最高层的cgroup。
进程启动时会调用如下三个函数,
cgroup_fork:该函数执行 child->cgroups = current->cgroups,即把父进程指向的css_set 赋值给子进程,同时增加该css_set 的引用计数。
cgroup_fork_callbacks:对于cgroup里的所有subsystem(cgroup_subsys),调用sys->fork(sys, task_struct *)
cgroup_post_fork:更新task_struct->cg_list
进程退出是会调用:
cgroup_exit:如果run_callbacks为1,对于每一个subsystem,调用sys->exit(sys, task_struct* ),把自己从 css_set 的task列表中删除,然后把原来的css_set 结构保存在cg中,把自己的 css_set 设为 init_css_set。最后调用 put_css_set_taskexit (cg),里面判断css_set的引用计数,如果为0就释放掉了。释放的同时,清理掉css_set_table哈希表,cg_cgroup_link里相应项,如果对应的cgroup已经没有进程了,设置一个标志位 CGRP_RELEASABLE
我们注意到了每个subsystem有个need_forkexit_callback标志位,如果cgroup_subsys->fork,cgroup_subsys->exit 任意一个函数指针不为空,该位被置上,因此每次进程fork或者exit的时候,都会调用subsystem相应的fork, exit函数。
另外还有一个dummytop,用于无主的cgroup,比如把某个子系统移除cgroup之后就会把其对应的cgroup更改为dummytop
cgroup的文件系统这里不多说了,请参考这篇文章 http://blog.csdn.net/ustc_dylan/article/details/4030824
其实cgroup的文件系统就是通过文件系统的inode, dentry, file操作函数提供了一个控制的接口,用于设置QoS控制参数,和把进程和cgroup关联起来。每个子系统都会通过cgropu文件系统来关联自己的接口,获取需要控制的进程,从而和cgroup机制完美对接。
原创地址:http://blog.csdn.net/majieyue/article/details/7327257
- linux的qos机制 - cgroup篇 (3)
- linux的qos机制 - cgroup篇 (3)
- linux的qos机制 - cgroup篇 (1)
- linux的qos机制 - cgroup篇 (2)
- linux的qos机制 - cgroup篇 (4)
- linux的qos机制 - dm-ioband篇 (3)
- linux的qos机制 - dm-ioband篇 (1)
- linux的qos机制 - dm-ioband篇 (4)
- OVS中使用linux的QoS机制
- Linux的Cgroup
- Linux的Cgroup
- Linux cgroup机制分析之框架分析
- Linux cgroup机制分析之框架分析
- Linux cgroup机制分析之cpuset subsystem
- Linux cgroup机制分析之框架分析
- Linux cgroup机制分析之框架分析
- Linux cgroup机制分析之框架分析
- Linux cgroup机制分析之框架分析
- 理解Unity中的协程的使用
- LeetCode OJ 之 Trapping Rain Water (“收集”雨水)
- 时间已经过去8年了,我的博客既然还在!为CSDN点赞!
- leetcode 160: Read N Characters Given Read4 II - Call multiple times
- C语言入门总结!
- linux的qos机制 - cgroup篇 (3)
- 【张尧学与一等奖】中国科技奖励之我见
- SDUT_2015寒假集训_BFS&DFS_D-找朋友
- 【PAT 1033】To Fill or Not to Fill
- 【张尧学与一等奖】乐见政府退出科学分歧 欣闻校长不避同行争议
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- MATLAB nctoolbox使用
- Python 中 datetime时间模块学习
- Leetcode NO.147 Insertion Sort List