CGroup原理篇V11.3 CGroup Kernel API介绍

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGroup原理篇V11.3 CGroup Kernel API介绍相关的知识,希望对你有一定的参考价值。

一、概览

每个内核子系统都希望钩入到通用cgroup系统都需要创建一个cgroup_subsys对象。这里有很多方法,有一些是cgroup机制的回调函数以及相应cgroup机制分配给cgroup子系统的ID。

  • cgroup_subsys对象汇总其他的字段包括如下:
  • subsys_id:子系统的的唯一数组索引,表示该子系统营管理cgroup->subsys[]中哪个条目。
  • name:子系统的唯一名称,长度不应该超过MAX_CGROUP_TYPE_NAMELEN定义的值(#define MAX_CGROUP_TYPE_NAMELEN 32)。
  • early_init:表示子系统是否在系统启动时执行早期的初始化工作。

由系统创建的每个控制组对象 都有一个数组指针,按照子系统的ID进行索引。这个指针完全由子系统来管理。通用的cgroup代码则永远不会触及这个指针。

二、同步

cgroup系统使用cgroup_mutex作为一个全局的互斥体。任何想修改控制组的主体都要携带这个互斥体,以防止cgroup系统被修改。但在某些情况下需要使用更具体的锁。

子系统可以通过cgroup_lock()和cgroup_unlock()来加锁和释放锁,详细可参考kernel/cgroup.c。

可以通过下面的方法访问一个任务的cgroup指针:

  • 持有一个任务的cgroup_mutex
  • 持有一个任务的alloc_lock(通过task_lock())
  • 在rcu_read_lock()部分通过rcu_dereference()

三、子系统API

每个子系统应该在linux/cgroup_subsys.h中添加一个条目,如下:

以上是关于CGroup原理篇V11.3 CGroup Kernel API介绍的主要内容,如果未能解决你的问题,请参考以下文章

CGroup原理篇V11.2 CGroupV1子系统介绍

CGroup原理篇V1十HugeTLB子系统

CGroup原理篇V1十一Memory子系统(Memcg)实现备忘录

CGroup原理篇V1五BLKIO子系统

CGroup原理篇V1十二Memory子系统

CGroup原理篇V1七CPUSET子系统