IT技术博客大学习 共学习 共进步

不同SSD盘组合搜索引擎单机性能测试[2013年版]

搜索技术博客-淘宝 2013-06-09 13:34:53 浏览 3,181 次

一、测试机器

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

二、测试目的

测试不同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
f) 索引加载方式:Index    mmap none,Summary     cached 5%, Attribute   mmap lock
注:每次测试,需要手动清page cache (sudo vim /proc/sys/vm/drop_caches,写1,触发清除page cache)

四、测试数据

索引情况 attribute 4.8G index 59G summary 73G (”’44W”’ raw Doc)

五、测试方法

修改SSD盘策略,修改索引
启动local_search,先用abench -p 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

建议继续学习

  1. 我对技术方向的一些反思 (阅读 11,141)
  2. SSD的主要缺陷及Wear Leveling技术详解 (阅读 10,021)
  3. 基于SSD的数据库性能优化 (阅读 8,661)
  4. SSD 寿命的检查和健康判断 (阅读 7,160)
  5. SSD磨损数据的分析报告 (阅读 5,020)
  6. Linux 中对 SSD 的优化 Discard,类 TRIM 的功能 (阅读 4,980)
  7. SSD的随机写一定很慢吗? (阅读 4,180)
  8. SSD 想说爱你不容易 (阅读 3,380)
  9. 数据的存储介质-固态存储SSD (阅读 2,820)