cgroup是control group的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。 子系统是根据cgroup对任务的划分功能将任务按照一种指定的属性划分成的一个组,主要用来实现资源的控制。在cgroup中,划分成的任务组以层次结构的形式组织,多个子系统形成一个数据结构中类似多根树的结构。cgroup包含了多个孤立的子系统,每一个子系统代表单一的资源,目前,redhat默认支持10个子系统,但默认只挂载了8个子系统,ubuntu 12.04 默认支持8个子系统,但默认只挂载了5个子系统。 redhat默认支持和挂载的子系统如下图所示。 ubuntu 12.04默认支持和挂载的子系统如下图所示。 当然也用户可以自定义子系统并进行挂载。 下面对每一个子系统进行简单的介绍: blkio : 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。 cpu : 这个子系统使用调度程序为cgroup任务提供cpu的访问。 cpuacct : 产生cgroup任务的cpu资源报告。 cpuset : 如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。 devices : 允许或拒绝cgroup任务对设备的访问。 freezer : 暂停和恢复cgroup任务。 memory : 设置每个cgroup的内存限制以及产生内存资源报告。 net_cls : 标记每个网络包以供cgroup方便使用。 ns : 名称空间子系统。 perf_event: 增加了对每group的监测跟踪的能力,即可以监测属于某个特定的group的所有线程以及 运行在特定CPU上的线程,此功能对于监测整个group非常有用,具体参见: 2. libcgroup工具安装 redhat系统:
ubuntu系统:
3.cgroup配置文件分析 /etc/cgconfig.conf是cgroup配置工具libcgroup用来进行cgroup组的定义,参数设定以及挂载点定义的配置文件, 主要由mount和group两个section构成。 (1)mount section的语法格式如下:
举个例子:
################################################################################ ## name: 指定cgroup的名称 ## permissions:可选项,指定cgroup对应的挂载点文件系统的权限,root用户拥有所有权限。 ## controller:子系统的名称 ## param name 和 param value:子系统的属性及其属性值 #################################################################################
上面配置文件定义相当于执行了如下shell命令:
|
|