Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1449279
  • 博文数量: 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

2013-05-09 00:04:17


目的

         通过之前《cgroupcpu.shares测试》结果得出的结论并不准确,并且由于时间关系,测试并不完善。为了进一步了解cpu.sharesCPU资源的利用情况,进行以下测试,并发现存在的问题。

测试方案

通过sysbench同时压力测试mysql的3306和3606端口的实例,查看CPU的利用情况。

测试环境

         测试环境同《cgroupcpu.shares测试》的环境一致,通过cgroupmysql6个实例进行资源隔离。资源限制情况如下所示:

        

测试

         本次测试方法有些调整,之前按照常规的OLTP测试进行测试,可能会有IO的影响。此次测试只进行查询测试,数据量完全在内存操作,避免IO对测试的影响。

         测试语句为:

./sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root  --oltp-table-size=100000 prepare

./sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --num-threads=16  --oltp-table-size=100000 --oltp-read-only=on  --max-requests=0 --max-time=3600 run &

./sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root  --oltp-table-size=100000 cleanup

 

./sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3606 --mysql-user=root  --oltp-table-size=100000 prepare

./sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3606 --mysql-user=root --num-threads=16  --oltp-table-size=100000 --oltp-read-only=on --max-requests=0 --max-time=3600 run &

./sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-port=3606 --mysql-user=root  --oltp-table-size=100000 cleanup

 

         测试中,采样TOP信息中非常典型的两个瞬间,如下图所示:

top -d 2

 

         通过采样TOP信息可以看出,cpu的利用率的比例与cpu.shares限制的权重比例不吻合,并且差异较大,无明显规律,但总体来说,3306进程(34048)的CPU利用率比3606进程(10294)的CPU利用率总体来看要高。

         测试中,采样cgmonitor.py进行瞬间采样,如下图所示:

cgmonitor.py -s 2 -l -g admin,3306,3606



         通过cgmonitor采样发现,cpu的利用率的比例与cpu.shares限制的权重也不是完全吻合,并且抖动比较严重,为了更清晰了解他们的关系,进行长时间的采样处理。

         通过开发的cgmonitor.py33063606两个实例进行CPU信息采集,cgmonitor.py主要通过抓取cpuacct.statcpuacct.usage统计信息计算出CPUsystemuser利用率。

         600次采样平均值如下所示:

3306

3606

System

User

System

User

40.62

171.04

20.9

100.14

        

         根据采样的信息进行画图,如下所示:

 


图1 CPU的system利用率

 


图2 CPU的user利用率

 

         通过cgmonitor.py采样的信息可知,从平均值来看,基本CPU的利用率与cpu.shares的权重比例基本吻合。从趋势图来看,CPU的利用率呈现此消彼长的趋势,这与CPU的时间片划分、以及该时间内不同进程任务处理的忙闲有关。

         仍然存在的误差,可能与以下内容有关:

1、由于测试程序在本机,监控程序等一些列系统都会占用一部分资源,以及系统本身资源的开销,都会造成CPU资源的比例的偏差。

2mysql实例的cpuset.cpuscore1-7core 0预留给系统使用。尽管core 0为系统预留,但是不能保证所有系统进程都在core 0上进行,也会争用一部分core 1-7CPU资源。

结论

       通过测试,发现通过top看到的mysql两个实例的CPU利用率的比例关系与cpu.shares限定的比例关系不吻合;通过cgmonitor.py工具采集的cpu的资源利用率的比例关系与cpu.shares限定的比例关系,会出现此消彼长的CPU利用率,但是从长期的统计结果来看,基本符合cpu.shares限定的比例。仍然存在的误差,可能与系统进程、测试程序等其他进程消耗,造成CPU资源利用率的偏差。

参考

1、《cgroup的cpu.shares测试》:http://blog.chinaunix.net/uid-26896862-id-3650411.html


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