在《存储极客:spc-1负载分析与afa寿命评估》一文中,我们讨论了如何从ssd耐用性角度规划match存储系统的配置。今天再谈谈闪存性能的规划,包括测试和配置选型两个方面。存储极客设计了下面这个流程:应用性能收集/评估>>存储设备模拟测试>>后续分析怎样把前两个环节打通,是问题的关键。
某家存储厂商性能收集/分析工具的截图,算是同类中的一个代表吧。
测试准备全闪存阵列配置实践
我先讲一些基础的东西,包括san存储网络建议怎么连、划zone的规则和hba卡参数等。针对的应用环境是数据库——oracleoltp。
图片引用自《acceleratingoracleoltpwithdellscseriesall-flasharrays》,以下同。
上面是一个典型的传统oraclerac+集中式存储阵列+san网络的配置。其中以dellsc9000为例,双控同时连接到后端的sc220sas驱动器机箱,里面满配24个ssd中有一块热备盘。
1、存储网络最佳配置
存储和poweredger730服务器之间有2个brocade650516gbfc交换机。在服务器fchba驱动设置上,包括timeouts(超时)和qd(队列深度)的建议如下:
toadjustthevalues,thefollowinglineswereaddedtofile/etc/modprobe.d/qla2xxx.conf.
optionsqla2xxxqlport_down_retry=5
optionsqla2xxxql2xmaxqdepth=
由于是冗余的本地存储连接,每条路径的超时重试时间为5秒。
oncethesystemhasrestarted,verifythattheconfigurationchangeshavetakeneffect:
#cat/sys/module/qla2xxx/parameters/qlport_down_retry
5
#cat/sys/module/qla2xxx/parameters/ql2xmaxqdepth
32
fchba的队列深度建议设为32。这部分都是以qlogic光纤卡为例,如果换emulex也是同样的道理。
下面我们看看zone的配置。
以左右两边fc交换机为中心拓扑出2个存储网络故障域,如果是iscsi就换成以太网交换机。
上图以其中一台服务器为例。2块fchba卡上共有4个端口,camaro代表主机名,s1/s2分别对应左右两边的hba卡。每块hba都同时连接到2台fc交换机,然后可以看到两个存储控制器上的全部主机接口。
上图是故障域fabric1中的4个zone。前面2个zone包含服务器camaro上两块hba卡靠左边的端口,它们都可以看到双存储控制器靠左的2个主机接口。如果感觉上面两张图的对应关系还不够清楚,不妨再看看下面这个表:
如上表,在一台服务器上,每块hba卡的2个口分别可以看到同zone中所有存储控制器上的1,2/3,4端口。目的大家也都清楚:为了实现san网络连接的高可用、有效利用带宽,隔离以降低管理上的复杂性。
2、宽条带化和thin-provisioning注意事项
本文测试的sc9000配置了24个1.92tb读密集型3dnandtlcssd,2mb的“数据页面”就是dellsc(compellent)的宽条带化raid打散粒度。如果做自动分层存储的话,这个数据调度的粒度也是2mb,靠同一套元数据管理机制来实现的。
raid10-dm就是三重镜像,可以理解为存储控制器本地三副本,最大保障数据可靠性,同时没有分布式存储多副本的网络开销。
因为传统raid10的双盘故障风险在宽条带化存储池中被放大了,而raid6的随机写性能又不够理想,raid10-dm给了用户更多一种选择。
以dellsc为例,当ssd/hdd容量、个数在一定范围内会推荐采用raid10-dm镜像,如果超出一定水平则强制要求镜像保护必须为raid10-dm,这是为数据安全性考虑的。
存储管理界面截图引用自《工程师笔记:scv2000试用之raid分层+快照》一文。
有没有兼顾性能和容量利用率的方式呢?除了在自动分层存储中将不同驱动器配置为不同raid之外,在单一类型驱动器的存储池中,dellsc仍然支持跨两种raid级别进行分层存储,结合镜像和奇偶校验各自的优点。其原理是利用周期快照“冻结”只读数据块并改为raid5/6方式存放,这种读写分离的思想同样也能用于ri(读密集型)ssd和wi(写密集型)ssd之间的自动分层。
上图只是一个举例,由于本文是模拟oltp应用环境的读写混合测试,实际都是在性能更好的raid10-dm配置进行。
在有元数据分配数据条带的情况下,精简配置(thin-provisioning)就成为原生的特性。但我也看到有同行朋友反映由于用户没做好容量预警,存储池被写爆的状况。当然这也是有办法避免的,比如上图所示创建卷时“预分配存储”选项。
需要注意的是,这个选项在我们的性能测试中另有深意,简单说也可以解释为“poc防作弊”。由于我们使用的是oracleorion测试工具,其写入的数据为全零,如果是没有预分配的thin卷,有个智能技术(零检测)——不会真正向ssd/hdd盘写入数据。如果这样的话,显然我们看不到真实的性能数据。
混合读写测试结果
orion是一个oracle官方模拟数据库存储io的测试工具。otlp的典型负载为8kb随机读写,这里通过参数指定读/写比例为70:30。
测试结果如上表。深红色折线代表iops,我们看到当并发orion任务达到14时,8kb混合读写iops超过250,000。
根据这个结果可以大致估算出100%读iops能跑多高吗?大家先看看我下面的方法是否合理:
估算方法一:在257,313iops中有30%的写io,考虑到raid10落在ssd盘上会有写放大,那么把这些写的时间换成读操作应该能快不少,保守估计跑到40万iops以上问题不大。
问题1:
闪存盘读比写快,那么上面的估计是否保守了?
我的答案是yes,但具体低估了多少,除了实测之外另有一种推算方法可以考虑。
问题2:
前后端存储网络、连接会不会成为瓶颈?
按照40万8kbiops来计算,折合3200mb/s的带宽。具体到我们测试环境是端到端16gbfcsan网络,4条交换机上行链路不应成为瓶颈;后端每条sas线缆12gbx4lane也是如此。
问题3:
我用不了这么多个ssd,换个配置性能可以按比例缩放计算吗?
以我在《ssd寿命与闪存阵列选型(上)为什么关注dwpd?》中引用的dellsc4020spc-1性能测试结果为例,6块ssd超过11万iops,平均每个接近2万了。
当然,spc-1测试的混合工作负载数据块大小和读写比例(《存储极客:spc-1负载分析与afa寿命评估》中曾有详细分析)与本文的orion有些不同,另外6块480gbssd用的是raid10双盘镜像,所以只是个参考对比。考虑到sc9000比sc4020要高端,其性能上限应该也会较高。
估算方法二:这个我也是看到不只一家存储厂商使用。大家知道ssd驱动器有个制造厂商的iops性能指标,而在阵列中的发挥会有不小的折扣。于是人们就在存储系统中测试各种单盘raid0的性能,以此为基础来估算不同数量ssd配置能够达到的iops,当然如果是写性能还要考虑raid惩罚的影响。
关于方法二我就不详细举例了,有兴趣了解的朋友可以找相关人士咨询。
性能分析收集工具了解存储需求的助手
我在本文开头列出过一张iops截图,上面这个为主机上监测到访问存储的带宽,对应的具体存储配置未知。它们都是使用dpack(dellperformanceanalysiscollection)软件收集的。
读写i/o尺寸与应用类型相关,比如oracleoltp典型的是8kb,上面这个比较像exchange邮件服务器。另外我还看到过有的存储厂商宣称32kb优化对实际应用的意义较大。
延时是另一个关乎应用体验的重要指标,这个与i/o请求大小有很大关系。比如上面图表大部分时间写延迟很低,应该有存储cache的效果在里面,绝大多数i/o都在20ms以内,属于exchange正常接受的范围。至于蓝色的波峰,不排除是有个大数据块i/o,也可能是由于持续写入压力大,缓存数据满了落盘导致。
另外需要说明的是,如果按照oracleoltp的8kb访问习惯,平均延时通常比上面图中要低。而存储i/o与数据库事物交易延时并不是一回事,因为根据事物复杂度不同,每笔事物中包含的i/o数量也是不同的,而且还有计算的开销要考虑。因此,我们不能从应用端一看到几十ms的延时,就全都怪存储不给力。
在用户现有的应用系统中收集到上述性能数据之后,再加上我在本文中介绍的方法,存储售前顾问就可以更有针对性地推荐阵列配置。现在全闪存逐渐开始流行,而有些情况下用固态混合(ssd+hdd)分层存储也是不错的选择。如果用户看重容量和性价比,或者想保留更多的历史快照数据,能够兼容传统硬盘的阵列就显出优势了。