首页 > 代码库 > Cgroup
Cgroup
Cgroup(control group)是将任意进程进行分组化管理的Linux内核功能。Cgroup本身
是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体
的资源管理功能是通过这个功能来实现的。这些具体的资源管理功能称为Cgroup子系
统或控制器。
Cgroup子系统有控制内存的Memory控制器、控制进程调度的CPU控制器等。运行中
的内核可以使用的Cgroup子系统由/proc/cgroup来确认。
Cgroup提供了一个cgroup虚拟文件系统,作为进行分组管理和各子系统设置的用户接
口。要使用Cgroup,必须挂载cgroup文件系统。这时通过挂载选项指定使用哪个子系
统。这里指定debug这个没有实质功能的调试用子系统来挂载。
# mount -t cgroup -o debug cgroup /cgroup
注意事项:这里所说的“虚拟文件系统”,是指procfs和sysfs这种不具有物理设备的文件系统。
并不是用来接纳文件系统差异的内核内部层layerVFS。
小贴士:关于cgroup文件系统的标准化挂载要点,是由开发论坛进行讨论的,但目前尚未得出结
论。这里是挂载到/cgroup。
挂载后,在挂载位置下应该可以看到下列几个文件。这些是Cgroup呈现出来的特殊文件。
# ls /cgroup
cgroup.event_control debug.current_css_set debug.taskcount
cgroup.procs debug.current_css_set_cg_links notify_on_release
debug.cgroup_css_links debug.current_css_set_refcount release_agent
debug.cgroup_refcount debug.releasable tasks
文件名前缀为cgroup的以及没有前缀的文件是由Cgroup的基础结构提供的特殊文件。
而前缀为debug的文件是由debug子系统提供的特殊文件。Cgroup的子系统提供的
特殊文件都会像这样加上子系统的前缀。因此,根据挂载时指定的选项,即所使用的子
系统不同,存在的特殊文件也不同。但是Cgroup的基础结构所提供的特殊文件则是无
论指定哪种子系统都一直存在的。特殊文件分为只读文件和可读写文件。只读文件是为
用户提供信息的文件。可读写的特殊文件通过写入值来更改Cgroup以及Cgroup子系统
设置的文件。设置的值可以通过读入特殊文件来确认。在这些特殊文件中,最重要的是
tasks特殊文件。其内容可以显示如下。
# cat /cgroup/tasks
1
2
3
4
...
虽然看上去只是一些数字的排列,但其实这些是属于这个分组的线程的线程ID(TID)。
在这时,系统上运行的所有线程的TID都包含在/cgroup/tasks中。这就表示全部线
程都属于这个分组。那么这里出现的“分组”又是什么呢?分组,就是体现为cgroup文
件系统目录的线程的集合。由于/cgroup也是目录,因此它也表示一个分组。像这样位
于挂载点最上层的目录是自动生成的分组,称为根分组。在这个阶段,只有/cgroup(即
根分组)是系统上存在的唯一分组。