阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:king_wangheng@163.com 微博 :@王恒-Henry QQ :506437736
分类: LINUX
2012-07-18 14:15:47
目的
通过之前对mysql的OLTP基准测试发现,性能的瓶颈为IO。为了降低IO对性能的影响,本文基于Virident FlashMAX进行测试。此外,为了进一步了解CGroup对mysql多实例在CPU、IO隔离下,性能的情况,进行了以下测试。
测试环境:
测试系统环境如下所示:
Summary: |
Dell R610, 1 x Xeon E5645 2.40GHz, 47.2GB / 48GB 1333MHz DDR3 |
System: |
Dell PowerEdge R610 (Dell 08GXHX) |
Processors: |
1 (of 2) x Xeon E5645 2.40GHz 5860MHz FSB (HT enabled, 6 cores, 24 threads) |
Memory: |
47.2GB / 48GB 1333MHz DDR3 == 6 x 8GB, 6 x empty |
Disk: |
sda (scsi0): 1.2TB (17%) JBOD == 1 x DELL-PERC-H700 |
Disk-Control: |
megaraid_sas0: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator], Package 12.10.4-0001, FW 2.100.03-1584, BIOS 3.18.00_4.09.05.00_0x0416A000, Cache 1GB, BBU |
Chipset: |
Intel 82801IB (ICH9) |
Network: |
em1 (bnx2): Broadcom NetXtreme II BCM5709 Gigabit, d4:be:d9:f5:62:50, 1000Mb/s |
OS: |
CentOS 6.2 (Final), Linux 2.6.32-220.23.1.el6.x86_64 x86_64, 64-bit |
此外,Virident FlashMAX官方提供的参数如下所示:
Capacity (GB) |
1000 |
NAND Flash |
MLC |
Form Factor |
Low Profile (half height, half length) |
Read Performance |
1.3 GB/s (4KB blocks) 325,000 IOPS (4KB blocks) 1,000,000 IOPs (0.5KB blocks) |
Sustained Mixed Performance (75:25 r/w) |
850 MB/s (4 KB blocks) 280,000 IOPS (4KB blocks) |
Access Latency |
19us |
Lifetime (PB written to flash) |
10, 15 |
以上测试系统可知,物理机器配置为两个物理CPU,每个CPU上有6核心,开启超线程状态下,显示为24 CPU。SSD的读写性能可以参照:《Virident FlashMAX测试》。
测试工具及条件
测试工具为percona提供的TPCC-MySQL基准测试工具,测试环境如下所示,数据大小大约为30G。并且所有实例的测试条件相同。
[warehouse]: 300 [connection]: 32 [rampup]: 1200 (sec.) [measure]: 1800 (sec.) |
测试方案
对比测试CGroup控制多实例与无CGroup控制多实例的性能比较。CGroup划分四个MySQL实例,每个实例配置文件中的参数相同,CGroup划分组对应关系如下表所示,具体测试内容如下所示:
CGROUP |
CPU |
IO |
cgroup1 |
0~5 |
R:140MB/s; W:100MB/s |
cgroup2 |
6~11 |
R:140MB/s; W:100MB/s |
cgroup3 |
12~17 |
R:140MB/s; W:100MB/s |
cgroup4 |
18~23 |
R:140MB/s; W:100MB/s |
1、单实例测试。测试cgroup1下MySQL的性能和单实例MySQL性能比较。
2、两个实例测试。测试cgroup1、cgroup2下MySQL的性能和两个实例MySQL性能比较。
3、四个实例测试。测试cgroup1、cgroup2、cgroup3、cgroup4下MySQL的性能和四个实例MySQL性能比较。
4、CGroup下MySQL性能影响比较。比较1中cgroup1、2中的cgroup1和3中cgroup1的性能影响。
5、减小CGroup的IO限制。测试cgroup1下mysql的性能,测试cgroup1和cgroup2下mysql的性能,测试cgroup1、cgroup2、cgroup3 下mysql的性能,测试cgroup1、cgroup2、cgroup3、cgroup4下mysql的性能。调整后的CGroup如下所示:
CGROUP |
CPU |
IO |
cgroup1 |
0~5 |
R:20MB/s; W:40MB/s |
cgroup2 |
6~11 |
R:20MB/s; W:40MB/s |
cgroup3 |
12~17 |
R:20MB/s; W:40MB/s |
cgroup4 |
18~23 |
R:20MB/s; W:40MB/s |
测试结果
1、单实例测试
cgroup1下MySQL的性能测试结果与单实例测试结果如下所示:
测试 |
测试结果 |
cgroup1下的MySQL性能 |
16766.666 TpmC |
无cgroup下MySQL性能 |
21341.801 TpmC |
通过对测试采集的数据进行分析,分别从MySQL的checkpoint、dirty page ratio、CPU的user、system、iowait以及IO的read、write、util方面进行对比。具体如下所示:
1)MySQL的checkpoint对比
cgroup1下的MySQL与无cgroup下的MySQL在checkpoint值的对比如下图所示:
2)MySQL的dirty page ratio对比
cgroup1下的MySQL与无cgroup下的MySQL在dirty page ratio的对比如下图所示:
3)CPU的user利用率对比
cgroup1与无cgroup的CPU的user利用率对比如下图所示:
4)CPU的system利用率对比
cgroup1与无cgroup的CPU的system利用率对比如下图所示:
5)CPU的iowait百分比对比
cgroup1与无cgroup的CPU的iowait百分比对比如下图所示:
6)IO的read对比
cgroup1与无cgroup的IO的read对比如下图所示:
7)IO的write对比
cgroup1与无cgroup的IO的write对比如下图所示:
8)IO的util对比
cgroup1与无cgroup的IO的util对比如下图所示:
结论
由测试结果可以看出,cgroup隔离下的MySQL的性能低于单实例下MySQL的性能。
2、两个实例测试
cgroup1、cgroup2下的MySQL的性能测试结果与两个实例测试结果如下所示:
测试 |
cgroup1/instance1 |
cgroup2/instance2 |
CGroup下的MySQL性能 |
14767.267 TpmC |
15373.667 TpmC |
无cgroup下MySQL性能 |
16136.600 TpmC |
16189.866 TpmC |
通过对测试采集的数据进行分析,分别从MySQL的checkpoint、dirty page ratio、CPU的user、system、iowait以及IO的read、write、util方面进行对比。具体如下所示:
1)MySQL的checkpoint对比
cgroup1下的MySQL与无cgroup下的MySQL instance1在checkpoint值的对比如下图所示:
cgroup2下的MySQL与无cgroup下的MySQL instance2在checkpoint值的对比如下图所示:
2)MySQL的dirty page ratio对比
cgroup1下的MySQL与无cgroup下的MySQL instance1在dirty page ratio的对比如下图所示:
cgroup2下的MySQL与无cgroup下的MySQL instance2在dirty page ratio的对比如下图所示:
3)CPU的user利用率对比
cgroup与无cgroup的CPU的user利用率对比如下图所示:
4)CPU的system利用率对比
cgroup与无cgroup的CPU的system利用率对比如下图所示:
5)CPU的iowait百分比对比
cgroup与无cgroup的CPU的iowait百分比对比如下图所示:
6)IO的read对比
cgroup与无cgroup的IO的read对比如下图所示:
7)IO的write对比
cgroup与无cgroup的IO的write对比如下图所示:
8)IO的util对比
cgroup与无cgroup的IO的util对比如下图所示:
结论
由测试结果可以看出,cgroup隔离下的两个MySQL的性能低于无cgroup隔离的两个实例的MySQL性能,但性能差大大的降低。
3、四个实例测试
cgroup1、cgroup2、cgroup3、cgroup4下MySQL的性能测试想结果与四个实例测试结果如下所示:
测试 |
cgroup1/instance1 |
cgroup2/instance2 |
cgroup3/instance3 |
cgroup4/instance4 |
CGroup下的MySQL性能 |
10704.333 TpmC |
11604.866 TpmC |
11613.566 TpmC |
11363.400 TpmC |
无cgroup下MySQL性能 |
10268.100 TpmC |
10316.400 TpmC |
10323.134 TpmC |
10260.200 TpmC |
通过对测试采集的数据进行分析,分别从MySQL的checkpoint、dirty page ratio、CPU的user、system、iowait以及IO的read、write、util方面进行对比。具体如下所示:
1)MySQL的checkpoint对比
cgroup1下的MySQL与无cgroup下的MySQL instance1在checkpoint值的对比如下图所示:
cgroup2下的MySQL与无cgroup下的MySQL instance2在checkpoint值的对比如下图所示:
cgroup3下的MySQL与无cgroup下的MySQL instance3在checkpoint值的对比如下图所示:
cgroup4下的MySQL与无cgroup下的MySQL instance4在checkpoint值的对比如下图所示:
2)MySQL的dirty page ratio对比
cgroup1下的MySQL与无cgroup下的MySQL instance1在dirty page ratio的对比如下图所示:
cgroup2下的MySQL与无cgroup下的MySQL instance2在dirty page ratio的对比如下图所示:
cgroup3下的MySQL与无cgroup下的MySQL instance3在dirty page ratio的对比如下图所示:
cgroup4下的MySQL与无cgroup下的MySQL instance4在dirty page ratio的对比如下图所示:
3)CPU的user利用率对比
cgroup与无cgroup的CPU的user利用率对比如下图所示:
4)CPU的system利用率对比
cgroup与无cgroup的CPU的system利用率对比如下图所示:
5)CPU的iowait百分比对比
cgroup与无cgroup的CPU的iowait百分比对比如下图所示:
6)IO的read对比
cgroup与无cgroup的IO的read对比如下图所示:
7)IO的write对比
cgroup与无cgroup的IO的write对比如下图所示:
8)IO的util对比
cgroup与无cgroup的IO的util对比如下图所示:
结论
由测试结果可以看出,cgroup隔离下的四个MySQL的性能略微高于无cgroup隔离的四个实例的MySQL性能。从测试来看,cgroup的效果可能显现出来。
4、CGroup下MySQL性能影响比较
比较测试1中cgroup1、测试2中的cgroup1和测试3中cgroup1的性能影响情况如下所示:
测试 |
cgroup1的TpmC |
单实例 |
16766.666 TpmC |
两个实例 |
14767.267 TpmC |
四个实例 |
10704.333 TpmC |
结论
从以上测试结果来看,cgroup进行隔离MySQL实例,当实例数增加时,性能会受到影响。从测试结果分析来看,由于每个CGroup的IO限制为read:100MB/s、write:100MB/s。而IO的峰值为read:90MB/s,write:220MB/s。因此,可以推断,IO的影响是一个重要的因素。在单实例测试对比来看,在请求线程数一致的情况下,对CPU的隔离,导致线程切换更加频繁,也同样对性能造成了影响。
5、减小CGroup的IO限制
测试cgroup1下mysql的性能;测试cgroup1和cgroup2下mysql的性能;测试cgroup1、cgroup2、cgroup3 下mysql的性能;测试cgroup1、cgroup2、cgroup3、cgroup4下mysql的性能。测试结果如下表所示:
测试 |
cgroup1 |
cgroup2 |
cgroup3 |
cgroup4 |
单实例 |
7329.167 TpmC |
|
|
|
两个实例 |
7292.167 TpmC |
7333.100 TpmC |
|
|
三个实例 |
7201.533 TpmC |
7389.400 TpmC |
7258.733 TpmC |
|
四个实例 |
6986.100 TpmC |
7214.233 TpmC |
7181.867 TpmC |
7024.333 TpmC |
通过对测试采集的数据进行分析,分别从CPU的user利用率、system利用率、iowait百分比,以及IO的read、write、util进行对比。具体如下所示:
1)CPU的user利用率
CPU的user利用率如下图所示:
2)CPU的system利用率
CPU的system利用率如下图所示:
3)CPU的iowait百分比
CPU的iowait百分比如下图所示:
4)IO的read
CPU的read如下图所示:
5)IO的write
CPU的write如下图所示:
6)IO的util
CPU的util如下图所示:
结论
通过降低CGroup的IO read、write的大小,从测试效果来看,验证了测试4中的推论:IO的影响是一个重要的因素。
测试结论
从测试结果来看,CGroup对MySQL多实例的隔离效果影响因素为:1、IO的争用;2、对CPU的限制导致线程数切换的增加。因此,CGroup对MySQL多实例的隔离,在实例数较少的情况下,性能有所降低;在实例数很多的情况下,CGroup隔离MySQL多实例有一定的效果。
此外,在将IO限制到很小,降低IO争用的情况下,CGroup对MySQL多实例的隔离效果明显。因此,IO争用的影响是CGroup隔离效果与否的重要因素。
通过CGroup有效的控制IO,降低IO的争用,从很大程度上可以发挥CGroup的功能。此外,对于不均衡的MySQL多实例,通过CGroup进行隔离,可以有效的降低对资源(CPU、IO)的争用。