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介绍的主要内容,如果未能解决你的问题,请参考以下文章