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.taskcountcgroup.procs debug.current_css_set_cg_links notify_on_releasedebug.cgroup_css_links debug.current_css_set_refcount release_agentdebug.cgroup_refcount debug.releasable tasks文件名前缀为cgroup的以及没有前缀的文件是由Cgroup的基础结构提供的特殊文件。而前缀为debug的文件是由debug子系统提供的特殊文件。Cgroup的子系统提供的特殊文件都会像这样加上子系统的前缀。因此,根据挂载时指定的选项,即所使用的子系统不同,存在的特殊文件也不同。但是Cgroup的基础结构所提供的特殊文件则是无论指定哪种子系统都一直存在的。特殊文件分为只读文件和可读写文件。只读文件是为用户提供信息的文件。可读写的特殊文件通过写入值来更改Cgroup以及Cgroup子系统设置的文件。设置的值可以通过读入特殊文件来确认。在这些特殊文件中,最重要的是tasks特殊文件。其内容可以显示如下。# cat /cgroup/tasks1234...虽然看上去只是一些数字的排列,但其实这些是属于这个分组的线程的线程ID(TID)。在这时,系统上运行的所有线程的TID都包含在/cgroup/tasks中。这就表示全部线程都属于这个分组。那么这里出现的“分组”又是什么呢?分组,就是体现为cgroup文件系统目录的线程的集合。由于/cgroup也是目录,因此它也表示一个分组。像这样位于挂载点最上层的目录是自动生成的分组,称为根分组。在这个阶段,只有/cgroup(即根分组)是系统上存在的唯一分组。