cgroup学习(三)——伪文件

伪文件

        cgroup是通过VFS与上层进行交互的,它定义了自己的cgroup文件系统,同时也定义了哪些文件,这些文件也是最终影响着cgroup行为,这一节我们介绍一下,每个子系统的伪文件定义在哪里?以及内核如何去操作这些伪文件。下面我们通过一张表来展示这些关系:

Subsys

Files

To_css

locate

cpu_cgroup_subsys

cpu_files

task_cgroup

sched.c

cpuset_subsys

Files

cpuset

cpuset.c

mem_cgroup_subsys

mem_cgroup_files

mem_cgroup

memcontrol.c

blkio_subsys

blkio_files

blkio_cgroup

blk_cgroup.c

freezer_subsys

Files

freezer

cgroup_freezer.c

        Subsys表示每个子系统的全局静态变量,该变量定义了该子系统的name,在该子系统上create,destroy,fork,attach cgroup(task)时的相应操作,以及populate生成哪些文件等。生成的文件定义在files全局静态变量里,这个变量是一个数组,包括了该子系统的所有子文件,以及它们的读写操作。我们在前一章介绍了cgroup_subsys_state结构,它是每个子系统的控制体的一个抽象类,to_css字段就是每个子系统控制体的实现类,它也保存了该子系统的下的相应参数(伪文件值),可以说该结构才是cgroup最重要的结构,也是真正对group起作用的结构。除了上面各个子系统files定义的文件外,它们公用的files定义在cgroup.c的files[](同样它也定义了对这些文件的open,write,release,read操作),包括最重要的tasks文件,它保存了该cgroup管理的所有tasks,对该文件的write操作最终将调用相应的subsys的attach操作。

        知道了这几个变量及结构就可以很快定位到相应操作的代码位置,对于理解后面的每个子系统的实现也是很有帮助。

你可能感兴趣的:(cgroup学习(三)——伪文件)