一、测试机器

Linux huawei_C5.co3 2.6.32-220.23.2.ali927.el5.x86_64 #1 SMP Mon Jan 28 14:57:06 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
MemTotal:       49520300kB
Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz  * 24
注:测试相关机型:
A7机型:CPU 6核 * 4,主频1.9GHz;内存 48G;硬盘 600G ssd * 1
C5机型:CPU 6核 * 4,主频2.3GHz;内存 48G;硬盘 600G ssd * 8

二、测试目的

测试不同SSD盘组合策略HA3引擎性能,寻找到较好的SSD盘组合策略

三、测试环境配置

a) IO调度策略:deadline(sudo echo deadline > /sys/block/sdb/queue/scheduler)
b) 预读策略:关闭系统预读(sudo blockdev –setra 0 /dev/sdb1)
c) 针对raid,需要重新关闭raid的系统预读(sudo blockdev –setra 0 /dev/md0)
d) local_search线程数:64
e) 截断配置:粗排数10000,精排数300(分两次排序,粗排截断前10000个doc参与第一次排序,精排截断前300个doc参与第二次排序)
f) 索引加载方式:Index    mmap none,Summary     cached 5%, Attribute   mmap lock(索引加载使用mmap方式时,lock方式采用锁内存,而none方式不锁内存;cached 模式采用cache方式,5%意义为cache大小为索引文件大小的5%)
注:每次测试,需要手动清page cache (sudo vim /proc/sys/vm/drop_caches,写1,触发清除page cache)

四、测试数据

索引情况 正排索引attribute 4.8G ,倒排索引index 59G, summary 73G (4.4KW raw Doc)

五、测试方法

修改SSD盘策略,修改索引
启动local_search,使用性能压测工具abench,先用abench -p 30 (30个并发)预热,然后abench -p 30 压测出qps(abench -p 30 时压测出的qps为峰值,-p太大 spin_lock锁很厉害,处理中)

六、测试结果

1. 不同SSD盘组合策略性能
2. raid0(两块盘)不同条带大小性能
3. raid0不同块数盘性能

七、测试说明

71G小索引–全内存:使用71G小索引,index 配置改为mmap lock,测试不考虑IO影响,全内存情况下引擎性能
ONE-SSD:测试136G大索引,单块SSD盘性能
RAIND0(64K):测试两块盘组成软raid 0
RAIND1:测试两块盘组成软raid 1,测试raid 1性能,主要用于对比测试,实际的高成本导致我们的应用场景不会使用raid 1
TWO-SSD(软连接,多个segment): 两块SSD盘,不做raid,索引用多segment形式,通过软连接将索引平均分到两块SSD盘
TWO-SSD(数据按term hashkey划分):两块SSD盘,不做raid,索引存两份,hack indexlib,seek时按term的hashkey模2到一块SSD盘(此为实验方法,实际使用时可以将索引按term切分)
RAIND0(two SSD):两块SSD组成RAID0
RAIND0(three SSD):三块盘组成RAID0,测试不同块数SSD 引擎性能
RAIND0(32K):两块SSD组成RAID0,条带大小设为32K,create raid时设置
RAIND0(64K): 两块SSD组成RAID0,条带大小为默认值
RAIND0(128K): 两块SSD组成RAID0,条带大小设为128K,create raid时设置

八、结果分析

1. 对比全内存和单块SSD大索引,索引量翻倍,性能减半
2. 对比单块SSD盘和RAID 0 ,单盘IO是瓶颈,而在两块盘做的RAID 0时,IO已经不是瓶颈,可以继续加压,而加压则会导致spin_lock锁很厉害,高峰值30%+(perf观测结果)
3. 对比同是两块盘组成的RAID 0、RAID 1,性能相差不大,FIO测试的IO性能也证明RAID 0 及RAID 1 性能相当
4. 两块SSD盘不做RAID,用软连接多个segment,IOPS需求也会提升,并不能提高性能,和单盘性能相当,
5. 两块SSD盘不做RAID,按term的hashkey选择读其中一个盘,此方案IO需求不变,均分到两块盘,性能最佳
6. 不同块数SSD盘组成RAID 0,引擎性能几乎无异,IO负载减小,FIO测试表明三块盘的IO性能明显提升
7. 两块SSD盘改变条带大小,性能几乎无异,数据分析表示,引擎读索引的平均IO大小较小,4KB的读占大部分,条带设置过大对我们的应用场景无效,设置过小又会影响性能提升。使用默认64KB即可

九、结论&建议

1. 对比A7机型和C5机型,C5的CPU性能较好(主频2.3,A7主频1.9),单盘时IO是瓶颈,而A7机型瓶颈在CPU,锁比较厉害,需要解决
2. IO瓶颈解决方法有两种,两块SSD盘做RAID0,有12%的性能提升,而两块盘不做RAID,可以达到18%的性能提升。两块盘不做RAID性能优于做RAID
3. 不同块数SSD盘测试引擎性能无异,此时瓶颈已经从单盘时的IO瓶颈转移到CPU瓶颈
4. 随着CPU性能的提升,IO是瓶颈,是主要矛盾,此时的解决方案可以是用多块SSD盘按term切分存索引。而当随着SSD盘数的增多,CPU则成为瓶颈,成为主要矛盾,spin_lock及smp_invalidate_interrupt消耗过大,20%~40%的CPU消耗,需要解决此问题
5. A7机型是单SSD盘,考虑到SSD盘的写性能及写寿命,推荐普通盘存log+SSD盘,增量索引可以单独存放。如果需要SSD盘写,则要考虑分区对齐、一些挂载选项及定时TRIM

标签:, ,

4 Responses


  1. 子嘉 on 26 六 2013

    这么好的文章都没有人顶一下!

    • 钓雪 on 26 六 2013

      哈哈 ,谢谢子嘉

  2. 孝杰 on 31 七 2013

    好文章,而且最近也在研究ssd磁盘的使用,找机会交流下

    • 钓雪 on 07 八 2013

      好的,旺旺联系哈


留言