一、cgroup介绍:
据官方文档介绍,rhel6为内核准备了一个新特性------资源控制,也即cgroup。此服务的软件包是libcgroup。有了这个,你就可以分
配资源,例如:CPU time,系统内存,
网络带宽等。这个是被cgconfig服务所控制的。如果此服务没有启动,在根目录下的cgroup文件夹里就不会存在内容。
[[email protected]]#/etc/init.d/cgconfig status
[[email protected]]#/etc/init.d/cgconfig stop
[[email protected]]#ls /cgroup
启动此服务之后,就会在/cgroup目录下面多出一些内容,如图所示:
[[email protected] cgroup]# /etc/init.d/cgconfig restart
Stopping cgconfig service: [ OK ]
Starting cgconfig service: [ OK ]
[[email protected] cgroup]# pwd
/cgroup
[[email protected] 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软件包,如果没有安装可以使用以下命令进行安装:
[[email protected] /]# rpm -q libcgroup
libcgroup-0.36.1-6.el6.x86_64
如果没有安装请用YUM安装。
2、cgroup服务的控制:
将其更改为伴随系统的启动而启动:
[[email protected] /]# chkconfig --list cgconfig
cgconfig 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[[email protected] /]# chkconfig cgconfig on
[[email protected] /]# chkconfig --list cgconfig
cgconfig 0:off 1:off 2:on 3:on 4:on 5:on 6:off
服务的停止和启动
[[email protected] cgroup]# /etc/init.d/cgconfig stop/start
3、cgroup的配置文件cgconfig.conf文件介绍:
在cgconfig.conf文件中,主要包含了两个主要类型:mount和group。mount是指创建以及挂载哪些层次为虚拟文件系统,并附上子系统的层次结构。cgconfig.conf文件的内容如下所示:
[[email protected] /]# more /etc/cgconfig.conf
#
# 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/
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer
......省略。。。。。。。
例如cpuset=/cgroup/cputest,就可以理解为以下几条命令
[[email protected] /]# mount -t cgroup -o cpuset cpuset /cgroup/cpuset
mount: cpuset already mounted or /cgroup/cpuset busy
[[email protected] /]# umount /cgroup/cpu
cpu/ cpuacct/ cpuset/
[[email protected] /]# umount /cgroup/cpuset
[[email protected] /]# mount -t cgroup -o cpuset cpuset /cgroup/cpuset
4、与cgroup相关的几个命令:
lssubsys-----显示已经存在的子系统。
[[email protected] /]# 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。
[[email protected] /]# lscgroup
cpu:/
cpuacct:/
memory:/
devices:/
freezer:/
net_cls:/
blkio:/
cpuset:/
5、挂载与卸载子系统层次:
如上所示,各个模块均以挂载与对于的目录下面。以下卸载了cpu子系统层次:
[[email protected] /]# umount /cgroup/cpu
[[email protected] /]# 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
其他的卸载与挂载都一样。使用以下命令将其挂载回去:
[[email protected] /]# mount -t cgroup -o cpu cpu /cgroup/cpu
[[email protected] /]# 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命令,具体用法如下所示:先来看个示例:
[[email protected] /]# cgcreate
Usage is cgcreate -t : -a : -g :
[[email protected] /]# cgcreate -g cpu,net_cls:/test-subgroup
[[email protected] /]# 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
[[email protected] /]# cgdelete
Usage is cgdelete [-r] : [...]