免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 26765 | 回复: 13
上一主题 下一主题

[系统管理] Cgroup解析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-31 08:47 |只看该作者 |倒序浏览
Cgroup用法解析

                                                                                                                ----小魔怪出品


      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               0:off        1:off        2:off        3:off        4:off        5:off        6:off
[root@susir /]# chkconfig cgconfig on
[root@susir /]# chkconfig --list cgconfig
cgconfig               0:off        1:off        2:on        3:on        4:on        5:on        6:off
服务的停止和启动
[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 <balbir@linux.vnet.ibm.com>
#  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> [...]

关于Cgroup的详细用法请大家补充。谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-07-31 11:30 |只看该作者
不错 这工具挺好

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
3 [报告]
发表于 2011-07-31 13:11 |只看该作者
看来是新特性,楼主总结的不错

论坛徽章:
0
4 [报告]
发表于 2011-07-31 20:49 |只看该作者
看来是新特性,楼主总结的不错
chenyx 发表于 2011-07-31 13:11



    其实这不是什么新特新。5.6里面就有。西安沙龙的时候时间比较紧。PPT做的比较粗略。大概提说了一哈。最近整理完6的东西了。和大家一起分享。

论坛徽章:
0
5 [报告]
发表于 2011-07-31 21:01 |只看该作者
研读一下!体会再讨论。

论坛徽章:
0
6 [报告]
发表于 2011-07-31 21:49 |只看该作者
暂时没有用过,不过今天讲的挺好,这个收下了学习学习。

论坛徽章:
0
7 [报告]
发表于 2011-11-22 10:33 |只看该作者
mark一下。。。

论坛徽章:
0
8 [报告]
发表于 2011-11-25 08:15 |只看该作者
Thanks for your sharing.

论坛徽章:
0
9 [报告]
发表于 2011-11-27 02:58 |只看该作者
最近看了点cgroup相关的资料,大概说下我的理解

1. Control Group(cgroup) 是一个内核功能,在2.6.24版本就合并到linux内核中。 不需要安装libcgroup也可以使用它,不过那样需要通过虚拟文件系统来与之交互,比较麻烦。 libcgroup提供一系列使用守护进程和实用工具,来简化这些操作。

2. 相关概念
tasks: 任务,这简单来说就是一组进程
cgroup: 资源分配策略,用于关联任务和子系统参数
subsystem: 子系统,又叫资源控制器。 它根据cgroup策略控制资源的访问,比如cpu子系统,内存子系统等
hierarchy: 层级结构,类似于文件系统,是树状结构的cgroup集合,这用于保证某一组任务只能关联这课树上的一个枝叶(cgroup)。 然而与文件系统不一样的是,cgroup可以有多个根,即多个hierarchy,而文件系统只能有一个根。可以这样想:每一个hierarchy对应一个由cgroup策略构成的虚拟文件系统。多个层级结构,可以方便对策略做更细粒度的控制。

使用控制组的目的主要有两个: 对进程的资源访问进行控制和记账(accounting),比如控制哪些进程可以使用哪个cpu,使用多少内存,使用多大带宽,还可以用于对这些使用量进行跟踪。

具体使用办法,参考: http://docs.redhat.com/docs/en-U ... nt_Guide/index.html

论坛徽章:
0
10
发表于 2012-07-15 13:15
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP