一、测试背景
服务器升级SSD后,速度和性能没有得到应有的提升,原因是没有正确使用SSD,主要是raid、linux、mysql数据库等相关参数没有正确的配置,本文对SSD的相关参数进行了对比性能测试,根据相关资料以及测试结果得出相关结论,了解实用场景以及对应优势。
二、测试环境
- 主机:172.20.166.52
- Cpu:32 * Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
- 内存:129G
- 操作系统:CentOS release 6.6
- Sysbench:Sysbench 0.5
- SSD硬盘:800G*6 raid5
- 主机:172.20.166.23
- Cpu:32 * Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
- 内存:129G
- 操作系统:CentOS release 6.6
- Sysbench:Sysbench 0.5
- SSD硬盘:800G*6 raid10 /raid0
三、测试工具及内容
使用Sysbench对相同硬件、软件环境的raid、linux、mysql等相关参数进行io性能测试、mysql性能测试,对比io性能。
IO性能测试Sysbench参数:
MySQL性能测试Sysbench参数:
四、测试结果
1、Linux系统参数测试结果
Linux对比测试参数如下:
对Linux操作系统测试了5组参数,分别如上图表所示,由测试数据可得出如下结论:
- 关闭NUMA,对SSD硬盘性能提高较大;
- O调度算法采用Deadline和Noop性能差距不大,Noop调度算法性能略高于Deadline;
- rotational、read_ahead_kb、rq_affinity参数的调整对SSD硬盘性能几乎没有影响,建议使用默认配置。
2、Raid参数测试结果
Raid对比测试参数如下:
BGI(Background initialization):
开启BGI,创建好Raid阵列后不必等待初始化完成就可以开始使用,比如分区和格式化,但是系统仍然在后台检查磁盘。
对Raid配置测试了4组参数,分别如上图表所示,由测试数据可得出如下结论:
- Raid的Write Policy设置为WriteBack,硬盘性能有很大提高,而且性能比较稳定;
- Raid的Read Policy设置为ReadAdaptive,硬盘性能略高于Normal;
- Raid的IO Policy设置为Direct,性能明显高于Cached;
- BGI采用默认配置的30%或者关闭BGI,性能几乎没有变化,建议使用默认配置。
3、Raid0的OP测试结果
OP配置对比如下:
对比测试了不设置OP和设置15%的OP,如上图表所示,由测试数据可得出如下结论:
- io测试时线程数小于128时,15%的OP的性能明显高于不设置OP的性能,随着线程数的增加,15%的OP的性能优势逐渐减少,到1024线程时,两者性能很接近。
- mysql测试时15%的OP的性能略高于不设置OP的性能,两者性能很接近。
4、MySQL参数测试结果
MySQL对比测试参数如下:
对MySQL测试了5组参数,分别如上图表所示,由测试数据可得出如下结论:
- innodb_write_io_threads/ innodb_read_io_threads设置为8性能比较理想;
- innodb_log_file_size设置为1536M或者2048M,性能差别不大;
- nnodb_io_capacity测试了从500到12000的参数,性能差别不大,设置为3000时出现测试数据的***值,从测试数据观察,该参数设置在2000-8000范围内性能相对理想;
- innodb_max_dirty_pages_pct设置为75性能较为理想。
五、LINUX参数测试数据对比
对Linux操作系统测试了5组参数,分别如上图表所示,由测试数据可得出如下结论:
- 关闭NUMA,对SSD硬盘性能提高较大;
- IO调度算法采用Deadline和Noop性能差距不大,Noop调度算法性能略高于Deadline;
- rotational、read_ahead_kb、rq_affinity参数的调整对SSD硬盘性能几乎没有影响。
1、NUMA测试数据对比
1.IO性能测试
2.MySQL性能测试
2、IO调度测试数据对比
1.IO性能测试
2.MySQL性能测试
3.rotational测试数据对比
4.read_ahead_kb测试数据对比
5.rq_affinity测试数据对比
六、RAID参数测试数据对比
涉及到的raid对比测试参数如下:
BGI(Background initialization):
开启BGI,创建好Raid阵列后不必等待初始化完成就可以开始使用,比如分区和格式化,但是系统仍然在后台检查磁盘。
对Raid配置测试了4组参数,分别如上图表所示,由测试数据可得出如下结论:
- Raid的Write Policy使用Writeback,硬盘性能有很大提高,而且性能比较稳定;
- Raid的Read Policy使用ReadAdaptive,硬盘性能略高于Normal;
- Raid的IO Policy使用Direct,性能明显高于Cached;
- BGI采用默认配置30%或者关闭BGI,性能几乎没有变化。
1、Write Policy测试数据对比
1.IO性能测试
2.MySQL性能测试
2、Read Policy测试数据对比
1.IO性能测试
2.MySQL性能测试
3.IO Policy测试数据对比
4.BGI测试数据对比
七、Raid0的SSD OP测试数据对比
OP是Over-provisioning(预留空间)的简称,是指用户不可操作的容量,就是留出一部分容量不使用不分区,OP预留的空间一般被用于优化操作。
对比测试了不设置OP和设置15%的OP,分别如上图表所示,由测试数据可得出如下结论:
- io测试时线程数小于128时,15%的OP的性能明显高于不设置OP的性能,随着线程数的增加,15%的OP的性能优势逐渐减少,到1024线程时,两者性能很接近。
- mysql测试时15%的OP的性能略高于不设置OP的性能,两者性能很接近。
1.IO性能测试
2.MySQL性能测试
八、MySQL参数测试数据对比
涉及到的MySQL对比测试参数如下:
对MySQL测试了5组参数,分别如上图表所示,由测试数据可得出如下结论:
- innodb_write_io_threads/ innodb_read_io_threads设置为8性能比较理想;
- innodb_log_file_size设置为1536M或者2048M性能较理想,两者性能差别不大;
- innodb_io_capacity测试了从500到12000的参数,性能差别不大,设置为3000时出现测试数据的***值,从测试数据观察,该参数设置在2000-8000范围内性能相对理解;
- innodb_max_dirty_pages_pct设置为75性能较为理想。
1.innodb_write/read_io_threads测试数据
2.innodb_log_file_size测试数据
3.innodb_io_capacity测试数据
4.innodb_max_dirty_pages_pct测试数据
九、相同硬盘数不同raid测试数据对比
使用6块ssd硬盘,分别配置了raid5、raid10、raid0、raid0-15%OP,进行了io混合随机读写性能测试。
Sysbench测试参数:
1、不同Raid对比分析结果
1.硬盘利用率
Raid0的硬盘空间使用率是100%,如果预留15%做OP,空间使用率只有全部硬盘大小的75%;Raid5的空间使用率是(n-1)/n(n是磁盘数量,磁盘数量越多,空间使用率越高);Raid10的硬盘使用率只有50%;硬盘使用率顺序是
- Raid0 > raid0-15%OP > Raid5 > Raid10
2.读写性能
raid0、raid0-15%OP的读写性能明显高于raid5、raid10,raid0-15%OP的性能略高于raid0。
- raid0-15%OP > raid0 > raid10 > raid5
3.稳定安全性
Raid10是最安全稳定的,Raid5提供了一块盘的奇偶检验保证安全,Raid0没有安全保护措施。另外当Raid5一块盘出现故障时候,其性能明显下降。
2、不同Raid测试数据
1.io混合随机读写性能数据
2.一块硬盘故障,raid10和raid5性能变化
十、SSD推荐参数配置
SSD对应linux、raid、mysql推荐参数以及推荐参数设置方法。
1、Linux推荐参数设置
- 关闭numa
- io调度算法设置为noop
- Rotational保持默认值1
- read_ahead_kb保持默认值128
- rq_affinity保持默认值1
2、Linux推荐参数设置方法
1.关闭numa
进入System BIOS设置,选择Memory设置,选择Node Interteaving为Enable进行关闭numa,如下图所示。
执行命令“numactl --hardware”进行检查,输出结果available: 1 nodes (0)时表示关闭成功,如下图。
2.修改io调度算法noop
执行命令:
- echo noop > /sys/block/sda/queue/scheduler
检查命令:
- cat /sys/block/sda/queue/scheduler
3.Rotational值的调整
执行命令:
- echo 0 > /sys/block/sda/queue/rotational
查看命令:
- cat /sys/block/sda/queue/rotational
4.read_ahead_kb值的调整
执行命令:
- echo 0 > /sys/block/sda/queue/read_ahead_kb
查看命令:
- cat /sys/block/sda/queue/read_ahead_kb
5.rq_affinity值的调整
执行命令:
- echo 0 > /sys/block/sda/queue/rq_affinity
查看命令:
- cat /sys/block/sda/queue/rq_affinity
3、Raid推荐参数设置
- 1Write Policy设置为WriteBack(WB)
- 2Read Policy设置为ReadAdaptive
- 3IO Policy设置为Direct
- 4BGI(Background initialization)保持默认设置30%
4、Raid推荐参数设置方法
使用MegaCli命令可以修改Raid参数配置,该命名是官方提供的针对MegaRAID卡的设置命令,如果使用不同品牌Raid卡,可以参照官方提供的命令进行设置。
MegaCli查看Raid参数命令:
查看所有Raid:
- MegaCli -LDGetProp -Cache -LALL –aALL
查看其中一个Raid:MegaCli -LDGetProp -Cache -L1 -a0
MegaCli修改Raid参数命令:
- MegaCli -LDSetProp WT|WB|NORA|RA|ADRA -L1 -a0
- or
- MegaCli -LDSetProp -Cached|-Direct -L1 -a0
1.Write Policy设置为WriteBack命令
MegaCli -LDSetProp WB -L1 -a0
2.Read Policy设置为ReadAdaptive命令
MegaCli -LDSetProp ADRA -L1 -a0
3.IO Policy设置为Direct命令
MegaCli -LDSetProp -Direct -L1 -a0
4.BGI调整方法
进入Device Settings,选择Interated RAID Controller,选择Controller Managent,选择Change Controller Properties,可以修改BGI参数,如下图。
5、SSD的OP推荐设置
推荐保留15%的硬盘空间不进行分区,这部分空间即是OP的保留空间。
设置方法:分区时候保留15%的硬盘空间不进行分区。
4、MySQL推荐参数设置
- innodb_write_io_threads/ innodb_read_io_threads推荐设置为8
- innodb_log_file_size推荐设置为2048M
- innodb_io_capacity推荐设置为3000
- innodb_max_dirty_pages_pct设置为75
【本文为51CTO专栏作者“王伟”原创稿件,转载请联系原作者】