前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cgroup初步分析(1)

cgroup初步分析(1)

作者头像
一见
发布2018-08-07 17:27:09
8900
发布2018-08-07 17:27:09
举报
文章被收录于专栏:蓝天蓝天蓝天

原文地址:cgroup初步分析(1) 作者:哭泣的土地

cgroup的功能和作用不废话,直说一下cgroup的几条设计准则,有了几条设计准则的约束,就比较容易理解其中的数据结构和函数,至于源代码cgroup.c,无非是两个内容,一是task_struct、cgroup、css_set三个数据结构互相关联,而是cgroup文件系统的实现。 先看设计准则:

  • 一个层级(hierarchy)就是一棵数,它可以包含一个资源子系统(subsys)或者多个资源子系统(subsys);
  • 一个资源子系统(subsys)只能存在一个层级(hierarchy);
  • 一个层级(hierarchy)中不同的cgroup之间的task都是互斥的,也就是说一个task只能存在于一个层级(hierarchy)中唯一的一个cgroup;
  • 一个task可以同时存在于多个层级(hierarchy)中;即一个task对应于多个cgroup
  • 一个cgroup可以对应多个css_set;
  • 一个css_set可以对应多个cgroup;
  • 一个task只对应唯一一个css_set。

问题1:如何通过一个task找到它在某个层级(hierarchy)的cgroup?

下面的结构可以说明这种寻找关系:

方法1:首先从task.cgroups找到css_set结构,从css_set结构中找到css_set结构对应的所有的cgroup,从中找出属于指定层级(hierarchy)的cgroup(每个层级都有一个唯一的top cgroup通过对比cgroup cgroup来判断是否属于该层级)。

方法2:首先从task.cgroups找到css_set结构,从css_set结构的struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]元素中找到每个子系统状态的结构struct cgroup_subsys_state变量,其中有个指针,指向该子系统对应的cgroup。

问题2:如何通过一个cgroup找到它目录下所有的task?

cgroup通过cg_cgroup_link连接了多个css_set结构变量,每个结构变量都有一个tasks的链表,上面是该css_set对应的所有tasks。如图所示:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-06-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档