Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1731666
  • 博文数量: 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-07-18 14:15:47

目的

通过之前对mysqlOLTP基准测试发现,性能的瓶颈为IO。为了降低IO对性能的影响,本文基于Virident FlashMAX进行测试。此外,为了进一步了解CGroupmysql多实例在CPUIO隔离下,性能的情况,进行了以下测试。

测试环境:

         测试系统环境如下所示:

 

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 CPUSSD的读写性能可以参照:《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、单实例测试。测试cgroup1MySQL的性能和单实例MySQL性能比较。

2、两个实例测试。测试cgroup1cgroup2MySQL的性能和两个实例MySQL性能比较。

3、四个实例测试。测试cgroup1cgroup2cgroup3cgroup4MySQL的性能和四个实例MySQL性能比较。

4CGroupMySQL性能影响比较。比较1cgroup12中的cgroup13cgroup1的性能影响。

5、减小CGroupIO限制。测试cgroup1mysql的性能,测试cgroup1cgroup2mysql的性能,测试cgroup1cgroup2cgroup3 mysql的性能,测试cgroup1cgroup2cgroup3cgroup4mysql的性能。调整后的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、单实例测试

         cgroup1MySQL的性能测试结果与单实例测试结果如下所示:

 

测试

测试结果

cgroup1下的MySQL性能

16766.666 TpmC

cgroupMySQL性能

21341.801 TpmC

 

         通过对测试采集的数据进行分析,分别从MySQLcheckpointdirty page ratioCPUusersystemiowait以及IOreadwriteutil方面进行对比。具体如下所示:

1MySQLcheckpoint对比

cgroup1下的MySQL与无cgroup下的MySQLcheckpoint值的对比如下图所示:

 

2MySQLdirty page ratio对比

cgroup1下的MySQL与无cgroup下的MySQLdirty page ratio的对比如下图所示:

 

 

3CPUuser利用率对比

cgroup1与无cgroupCPUuser利用率对比如下图所示:

 

 

4CPUsystem利用率对比

cgroup1与无cgroupCPUsystem利用率对比如下图所示:

 

 

5CPUiowait百分比对比

cgroup1与无cgroupCPUiowait百分比对比如下图所示:

 

 

6IOread对比

cgroup1与无cgroupIOread对比如下图所示:

 

 

7IOwrite对比

cgroup1与无cgroupIOwrite对比如下图所示:

 

 

8IOutil对比

cgroup1与无cgroupIOutil对比如下图所示:

 

 

结论

         由测试结果可以看出,cgroup隔离下的MySQL的性能低于单实例下MySQL的性能。

 

2、两个实例测试

cgroup1cgroup2下的MySQL的性能测试结果与两个实例测试结果如下所示:

测试

cgroup1/instance1

cgroup2/instance2

CGroup下的MySQL性能

14767.267 TpmC

15373.667 TpmC

cgroupMySQL性能

16136.600 TpmC

16189.866 TpmC

 

         通过对测试采集的数据进行分析,分别从MySQLcheckpointdirty page ratioCPUusersystemiowait以及IOreadwriteutil方面进行对比。具体如下所示:

1MySQLcheckpoint对比

cgroup1下的MySQL与无cgroup下的MySQL instance1checkpoint值的对比如下图所示:

 

 

cgroup2下的MySQL与无cgroup下的MySQL instance2checkpoint值的对比如下图所示:

 

 

2MySQLdirty page ratio对比

cgroup1下的MySQL与无cgroup下的MySQL instance1dirty page ratio的对比如下图所示:

 

 

cgroup2下的MySQL与无cgroup下的MySQL instance2dirty page ratio的对比如下图所示:

 

 

3CPUuser利用率对比

cgroup与无cgroupCPUuser利用率对比如下图所示:

 

 

4CPUsystem利用率对比

cgroup与无cgroupCPUsystem利用率对比如下图所示:

 

 

5CPUiowait百分比对比

cgroup与无cgroupCPUiowait百分比对比如下图所示:

 

 

6IOread对比

cgroup与无cgroupIOread对比如下图所示:

 

 

7IOwrite对比

cgroup与无cgroupIOwrite对比如下图所示:

 

 

8IOutil对比

cgroup与无cgroupIOutil对比如下图所示:

 

 

结论

         由测试结果可以看出,cgroup隔离下的两个MySQL的性能低于无cgroup隔离的两个实例的MySQL性能,但性能差大大的降低。

 

3、四个实例测试

         cgroup1cgroup2cgroup3cgroup4MySQL的性能测试想结果与四个实例测试结果如下所示:

 

测试

cgroup1/instance1

cgroup2/instance2

cgroup3/instance3

cgroup4/instance4

CGroup下的MySQL性能

10704.333 TpmC

11604.866 TpmC

11613.566 TpmC

11363.400 TpmC

cgroupMySQL性能

10268.100 TpmC

10316.400 TpmC

10323.134 TpmC

10260.200 TpmC

 

通过对测试采集的数据进行分析,分别从MySQLcheckpointdirty page ratioCPUusersystemiowait以及IOreadwriteutil方面进行对比。具体如下所示:

1MySQLcheckpoint对比

cgroup1下的MySQL与无cgroup下的MySQL instance1checkpoint值的对比如下图所示:

 

 

cgroup2下的MySQL与无cgroup下的MySQL instance2checkpoint值的对比如下图所示:

 

 

cgroup3下的MySQL与无cgroup下的MySQL instance3checkpoint值的对比如下图所示:

 

 

cgroup4下的MySQL与无cgroup下的MySQL instance4checkpoint值的对比如下图所示:

 

2MySQLdirty page ratio对比

cgroup1下的MySQL与无cgroup下的MySQL instance1dirty page ratio的对比如下图所示:

 

 

cgroup2下的MySQL与无cgroup下的MySQL instance2dirty page ratio的对比如下图所示:

 

 

cgroup3下的MySQL与无cgroup下的MySQL instance3dirty page ratio的对比如下图所示:

 

 

cgroup4下的MySQL与无cgroup下的MySQL instance4dirty page ratio的对比如下图所示:

 

 

3CPUuser利用率对比

cgroup与无cgroupCPUuser利用率对比如下图所示:

 

 

4CPUsystem利用率对比

cgroup与无cgroupCPUsystem利用率对比如下图所示:

 

 

5CPUiowait百分比对比

cgroup与无cgroupCPUiowait百分比对比如下图所示:

 

 

6IOread对比

cgroup与无cgroupIOread对比如下图所示:

 

 

7IOwrite对比

cgroup与无cgroupIOwrite对比如下图所示:

 

 

8IOutil对比

cgroup与无cgroupIOutil对比如下图所示:

 

 

结论

         由测试结果可以看出,cgroup隔离下的四个MySQL的性能略微高于无cgroup隔离的四个实例的MySQL性能。从测试来看,cgroup的效果可能显现出来。

        

4CGroupMySQL性能影响比较

比较测试1cgroup1、测试2中的cgroup1和测试3cgroup1的性能影响情况如下所示:

 

测试

cgroup1TpmC

单实例

16766.666 TpmC

两个实例

14767.267 TpmC

四个实例

10704.333 TpmC

 

结论

从以上测试结果来看,cgroup进行隔离MySQL实例,当实例数增加时,性能会受到影响。从测试结果分析来看,由于每个CGroupIO限制为read100MB/swrite100MB/s。而IO的峰值为read90MB/swrite220MB/s。因此,可以推断,IO的影响是一个重要的因素。在单实例测试对比来看,在请求线程数一致的情况下,对CPU的隔离,导致线程切换更加频繁,也同样对性能造成了影响。

 

5、减小CGroupIO限制

         测试cgroup1mysql的性能;测试cgroup1cgroup2mysql的性能;测试cgroup1cgroup2cgroup3 mysql的性能;测试cgroup1cgroup2cgroup3cgroup4mysql的性能。测试结果如下表所示:

 

测试

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

 

通过对测试采集的数据进行分析,分别从CPUuser利用率、system利用率、iowait百分比,以及IOreadwriteutil进行对比。具体如下所示:

1CPUuser利用率

         CPUuser利用率如下图所示:

 

 

2CPUsystem利用率

         CPUsystem利用率如下图所示:

 

 

3CPUiowait百分比

         CPUiowait百分比如下图所示:

 

 

4IOread

         CPUread如下图所示:

 

 

5IOwrite

         CPUwrite如下图所示:

 

 

6IOutil

         CPUutil如下图所示:

 

 

结论

         通过降低CGroupIO readwrite的大小,从测试效果来看,验证了测试4中的推论:IO的影响是一个重要的因素。

 

测试结论

从测试结果来看,CGroupMySQL多实例的隔离效果影响因素为:1IO的争用;2、对CPU的限制导致线程数切换的增加。因此,CGroupMySQL多实例的隔离,在实例数较少的情况下,性能有所降低;在实例数很多的情况下,CGroup隔离MySQL多实例有一定的效果。

此外,在将IO限制到很小,降低IO争用的情况下,CGroupMySQL多实例的隔离效果明显。因此,IO争用的影响是CGroup隔离效果与否的重要因素。

通过CGroup有效的控制IO,降低IO的争用,从很大程度上可以发挥CGroup的功能。此外,对于不均衡的MySQL多实例,通过CGroup进行隔离,可以有效的降低对资源(CPUIO)的争用。

 

 

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