rhel6已经发布,6.1已经发布了。网上也出现了对其的介绍文章,但都是些表面上的,譬如:在安装过程中出现的一些改动,以及默认的文件系统类型使用的是ext4,等等。安装完rhel6,不知到你发现在根目录下面默认会存在一个cgroup的文件夹么,这个是个啥玩意嘛?这个就是rhel6的------资源管理。其实不算是啥新特性了。在内核2.6.26里面就有了。
一、cgroup介绍: 据官方文档介绍,rhel6为内核准备了一个新特性------资源控制,也即cgroup。此服务的软件包是libcgroup。有了这个,你就可以分配资源,例如:CPU time,系统内存, 网络带宽等。这个是被cgconfig服务所控制的。如果此服务没有启动,在根目录下的cgroup文件夹里就不会存在内容。 [root@susir]#/etc/init.d/cgconfig status [root@susir]#/etc/init.d/cgconfig stop [root@susir]#ls /cgroup 启动此服务之后,就会在/cgroup目录下面多出一些内容,如图所示: [root@susir cgroup]# /etc/init.d/cgconfig restart Stopping cgconfig service: [ OK ] Starting cgconfig service: [ OK ] [root@susir cgroup]# pwd /cgroup [root@susir cgroup]# ls blkio cpu cpuacct cpuset devices freezer memory net_cls 二、cgroup各个模块的介绍: cgroup类似与进程,他们是分等级的,各个属性都是从父进程哪里继承过来。cgroup包含了多个孤立的子系统,没一个子系统代表一个单一的资源。rhel6中一共准备了9个子系统,以下是每个子系统的详细说明: blkio 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。 cpu 这个子系统使用调度程序为cgroup任务提供cpu的访问。 cpuacct 产生cgroup任务的cpu资源报告。 cpuset 如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。 devices 允许或拒绝cgroup任务对设备的访问。 freezer 暂停和恢复cgroup任务。 memory 设置每个cgroup的内存限制以及产生内存资源报告。 net_cls 标记每个网络包以供cgroup方便使用。 ns 名称空间子系统。 以上九个子系统之间也存在着一定的关系.详情参阅官方文档。 三、cgroup的使用: 1、cgroup的安装: 在安装系统的时候,默认已经安装了libcgroup软件包,如果没有安装可以使用以下命令进行安装: [root@susir /]# rpm -q libcgroup libcgroup-0.36.1-6.el6.x86_64 如果没有安装请用YUM安装。 2、cgroup服务的控制: 将其更改为伴随系统的启动而启动: [root@susir /]# chkconfig --list cgconfig cgconfig 0ff 1ff 2ff 3ff 4ff 5ff 6ff [root@susir /]# chkconfig cgconfig on [root@susir /]# chkconfig --list cgconfig cgconfig 0ff 1ff 2n 3n 4n 5n 6ff 服务的停止和启动 [root@susir cgroup]# /etc/init.d/cgconfig stop/start 3、cgroup的配置文件cgconfig.conf文件介绍: 在cgconfig.conf文件中,主要包含了两个主要类型:mount和group。mount是指创建以及挂载哪些层次为虚拟文件系统,并附上子系统的层次结构。cgconfig.conf文件的内容如下所示: [root@susir /]# cat /etc/cgconfig.conf | more # # Copyright IBM Corporation. 2007 # # Authors: Balbir Singh <> # This program is free software; you can redistribute it and/or modify it # under the terms of version 2.1 of the GNU Lesser General Public License # as published by the Free Software Foundation. # # This program is distributed in the hope that it would be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # See man cgconfig.conf for further details. # # By default, mount all controllers to /cgroup/<controller> mount { cpuset = /cgroup/cpuset; cpu = /cgroup/cpu; cpuacct = /cgroup/cpuacct; memory = /cgroup/memory; devices = /cgroup/devices; freezer = /cgroup/freezer ......省略。。。。。。。 例如cpuset=/cgroup/cputest,就可以理解为以下几条命令 [root@susir /]# mount -t cgroup -o cpuset cpuset /cgroup/cpuset mount: cpuset already mounted or /cgroup/cpuset busy [root@susir /]# umount /cgroup/cpu cpu/ cpuacct/ cpuset/ [root@susir /]# umount /cgroup/cpuset [root@susir /]# mount -t cgroup -o cpuset cpuset /cgroup/cpuset 4、与cgroup相关的几个命令: lssubsys-----显示已经存在的子系统。 [root@susir /]# lssubsys -am cpu /cgroup/cpu cpuacct /cgroup/cpuacct memory /cgroup/memory devices /cgroup/devices freezer /cgroup/freezer net_cls /cgroup/net_cls blkio /cgroup/blkio cpuset /cgroup/cpuset ns 上所示,除ns子系统没有在/etc/cgconfig.conf文件里设置外,其他的都挂载在对应的目录下面。 lscgroup-----显示所有的cgroup。 [root@susir /]# lscgroup cpu:/ cpuacct:/ memory:/ devices:/ freezer:/ net_cls:/ blkio:/ cpuset:/ 5、挂载与卸载子系统层次: 如上所示,各个模块均以挂载与对于的目录下面。以下卸载了cpu子系统层次: [root@susir /]# umount /cgroup/cpu [root@susir /]# lssubsys -am #(-a代表所有,-m代表显示挂载点。) cpuacct /cgroup/cpuacct memory /cgroup/memory devices /cgroup/devices freezer /cgroup/freezer net_cls /cgroup/net_cls blkio /cgroup/blkio cpuset /cgroup/cpuset ns cpu 其他的卸载与挂载都一样。使用以下命令将其挂载回去: [root@susir /]# mount -t cgroup -o cpu cpu /cgroup/cpu [root@susir /]# lssubsys -am cpuacct /cgroup/cpuacct memory /cgroup/memory devices /cgroup/devices freezer /cgroup/freezer net_cls /cgroup/net_cls blkio /cgroup/blkio cpuset /cgroup/cpuset cpu /cgroup/cpu ns 6、创建一个自定义的cgroup: 这里要用到cgcreate命令,具体用法如下所示:先来看个示例: [root@susir /]# cgcreate Usage is cgcreate -t <tuid>:<tgid> -a <agid>:<auid> -g <list of controllers>:<relative path to cgroup> [root@susir /]# cgcreate -g cpu,net_cls:/test-subgroup [root@susir /]# lssubsys -am cpuacct /cgroup/cpuacct memory /cgroup/memory devices /cgroup/devices freezer /cgroup/freezer net_cls /cgroup/net_cls blkio /cgroup/blkio cpuset /cgroup/cpuset cpu /cgroup/cpu ns 没有出来。看到么。其实挂载上去之后,使用lssubsys命令是看不到的。因为啊。创建完了之后,系统还不能挂载,因为挂载点不存在,等挂载点创建了之后,系统会自动挂载上去的。 7、删除cgroup [root@susir /]# cgdelete Usage is cgdelete [-r] <list of controllers>:<relative path to cgroup> [...]更详细的请看: