Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744067
  • 博文数量: 107
  • 博客积分: 1715
  • 博客等级: 上尉
  • 技术积分: 3168
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-18 18:42
个人简介

阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:king_wangheng@163.com 微博 :@王恒-Henry QQ :506437736

文章分类

全部博文(107)

文章存档

2014年(2)

2013年(38)

2012年(67)

分类: LINUX

2012-11-29 22:56:33

目的

       CGroup通过用户对资源的分配,对系统资源进行有效隔离的一种虚拟化处理方式。然而,尽管CGroup已经提供了一些列的工具,但是对于单个group的资源监控却没有提供很好的工具。为了使得对CGroup的资源进行更加详尽的、实时的监控,并且参考系统监控工具实现,开发CGroup系统监控工具cgsysstat,对分配资源进行实时详尽的监控。

概要设计

       CGroup监控工具cgsysstat基于cgroup的库libcgroup,参考系统Linux资源监控工具开发基于cgroup组的资源监控。

       其中cgiostat工具主要对IO使用情况进行监控,类似iostat系统工具。主要对CPU(平均、详细)使用情况、IO使用情况进行统计和计算,根据输入的时间间隔和输出次数输出。主要的参数选项和输出格式也类似iostat,并根据cgroup与系统的不同之处,进行相应的调整。详细的说明参考一下说明内容。

       cgfree工具主要用于内存资源的监控,类似free系统工具。主要对内存使用情况以及swap使用情况进行统计和计算,根据输入的时间间隔和输出次数输出。

       cgvmstat工具主要用于详细的内存监控以及IOCPU的监控信息,类似vmstat系统工具。对swap使用、内存使用、buffercacheinactive内存空间、active内存空间、IOpage inpage outCPUusersystemidle等统计信息进行监控。

       cgiostat_ext工具是基于cgroup中进程的IO资源利用情况进行的统计,意在补充cgiostat的不足,但从目前来看,统计的信息不全面,且不准确,仅供参考。

详细设计

       CGroup监控的统计信息主要包括CPU统计信息、IO统计信息、memory统计信息、进程统计信息四部分。通过这四部分,可以得到CPU的利用情况、IO吞吐情况、memory使用情况以及每个进程的详细统计信息。

       对于每个Group来说,包含的统计信息包含在以上四部分中,为了分离Group的统计信息,设计了四个数据结构:cg_cpuset_stats_listscg_blkio_statscg_mem_statscg_proc_stats_lists

cg_cpuset_stats_lists设计

       cg_cpuset_stats_lists用于存储当前Group包含的CPU的信息,CPU分配情况根据CPUSET中当前Group分配的CPU信息获得。cg_cpuset_stats_lists是链表的头,给出了链表中对象的数目、第一个对象和最后一个对象,通过链表头,可以安全的遍历整个链表。对于每个cg_cpu_stats对象来说,它包含了CPUid(由系统编号决定)、stats统计信息和指向下一个对象的指针。其中cpu_stats结构中包含了当前cpu的所有统计参数的值。详细设计如图所示:

      

1  cg_cpuset_stats_lists结构设计

 

cg_blkio_stats设计

       cg_blkio_stats用于存储当前GroupIO统计信息,主要是group全局的IO使用情况。因为IO的统计信息与系统设备有关,如8:0sda磁盘的IO统计信息,并且可以获取多种设备的统计信息,因此根据设备的不同使用链式组织。其数据结构定义如下所示:

 

2  cg_blkio_stats数据结构定义

 

       由数据结构定义可知,cg_blkio_stats包含了IO的统计信息,由于IO的统计信息与设备相关。因此,以设备号和索引号作为唯一确定的统计信息,使用链表结构进行存储。cg_device_stats_listscg_device_value_lists是设备链表中的IO统计信息,不同的是,cg_device_stats_lists是有IOreadwritesyncasync统计信息,而cg_device_value_lists仅仅有一个统计值。

       cg_device_stats_lists结构的设计如下图3所示。cg_device_stats_lists是链表头,cg_device_stats包含了实际的统计信息,链表中的不同节点以设备号dev和索引号idx来区别不同设备的统计信息。

 

3  cg_device_stats_lists结构设计

 

       cg_device_value_lists结构的设计如下图4所示。设计同cg_device_stats_lists结构类似,不同之处是统计信息只有一个统计值。

 

4  cg_device_stats_lists结构设计

 

cg_mem_stats设计

       cg_mem_stats存储当前group的内存统计信息。具体的数据结构定义如下图5所示,其中statmem_stats统计的信息包括cachepage页的换入/换出、swap使用、inactive内存、active内存等信息。

 

5  cg_mem_stats数据结构定义

 

cg_proc_stats_lists设计

       cg_proc_stats_lists存储了与进程相关的统计信息。每个进程的cg_proc_stats都包括进程的IO统计信息、stat统计信息以及statm统计信息。具体的设计如下图6所示:

 

6  cg_proc_stats_lists结构设计

 

       其中,io_stats信息是进程的IO统计信息,信息来源于/proc//io中的统计信息;proc_stat信息是进程的统计信息,信息来源于/proc//statproc_statm信息是进程的内存统计信息,信息来源于/proc//statm

       基于以上四种不同结构的设计,组成group的组信息。 cg_group_listsgroup组的链表头信息,cg_group存储了Group组的所有信息,根据group名,进行区分不同组的统计信息。cg_group中包含groupnamegroup的路径、cg_cpu_stats_lists统计CPU信息列表的数组cpuset_stats[2]cg_blkio_stats统计IO信息的数组blkio_stats[2]cg_mem_stats统计memory信息的数组mem_stats[2]以及cg_proc_stats_lists统计进程信息列表的数组proc_stats[2]。之所以定义为长度为2的数组,是因为统计信息是一个累计值,所以需要计算两次统计信息的差值,得到当前时间的资源利用情况。详细设计如下图7所示:

 

7  cg_group_lists结构设计

 

       通过以上统计信息,就可以对当前group的统计信息进行计算,根据不同的输出需求,输出group的资源利用情况。

总结

       通过cgsysstat对group内的CPU统计信息、IO统计信息、Memory统计信息以及group包含的每个进程的统计信息进行计算,根据要求,就可以格式化输出相应的统计资源。具体各个工具的使用说明文档,请参照CGroup监控工具使用说明文档》

阅读(4128) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

king_wangheng2012-12-02 15:27:30

参考文档《Red_Hat_Enterprise_Linux-6-Resource_Management_Guide》,上面有具体的使用说明。

Bean_lee2012-12-02 12:04:07

这个cgroup怎么使用啊。我在进程调度中接触了一点点.