阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:king_wangheng@163.com 微博 :@王恒-Henry QQ :506437736
分类: LINUX
2013-05-09 00:04:17
通过之前《cgroup的cpu.shares测试》结果得出的结论并不准确,并且由于时间关系,测试并不完善。为了进一步了解cpu.shares对CPU资源的利用情况,进行以下测试,并发现存在的问题。
通过sysbench同时压力测试mysql的3306和3606端口的实例,查看CPU的利用情况。
测试环境同《cgroup的cpu.shares测试》的环境一致,通过cgroup对mysql的6个实例进行资源隔离。资源限制情况如下所示:
本次测试方法有些调整,之前按照常规的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.py对3306和3606两个实例进行CPU信息采集,cgmonitor.py主要通过抓取cpuacct.stat和cpuacct.usage统计信息计算出CPU的system和user利用率。
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资源的比例的偏差。
2、mysql实例的cpuset.cpus的core为1-7,core 0预留给系统使用。尽管core 0为系统预留,但是不能保证所有系统进程都在core 0上进行,也会争用一部分core 1-7的CPU资源。
通过测试,发现通过top看到的mysql两个实例的CPU利用率的比例关系与cpu.shares限定的比例关系不吻合;通过cgmonitor.py工具采集的cpu的资源利用率的比例关系与cpu.shares限定的比例关系,会出现此消彼长的CPU利用率,但是从长期的统计结果来看,基本符合cpu.shares限定的比例。仍然存在的误差,可能与系统进程、测试程序等其他进程消耗,造成CPU资源利用率的偏差。