https://aijishu.com/a/1060000000361186
引言:读IOPS__翻倍的原因相对简单,但写IOPS__暴增似乎也是有代价的。MegaRAID 9600__的算法会不会改用纠删码了?
背景阅读
《PCIe 4.0 SAS+NVMe RAID/HBA卡:最高读IOPS 300万、写24万》(第二代Tri-Mode)
《350万IOPS:NVMe SSD RAID卡性能测试解析》
《首款SAS/SATA/PCIe三模RAID发布:ARM替代PowerPC》(第一代Tri-Mode)
《RAID卡未来之路:除了NVMe还有啥?》(6年前的Roadmap)
昨天看到消息,Broadcom(原LSI)的新一代24Gb/s(SAS)PCIe 4.0存储产品家族发布了,即第3代Tri-Mode三模NVMe/SAS/SATA MegaRAID和eHBA卡等,还有SAS Expander芯片。
从上图中至少可以先看出两点:1、本次有PCIe x16插槽的板卡;2、有提供总共24个内部SAS/PCIe lane下行设备接口的型号(3个×8 SFF-8654连接器)。
大家还记得上代MegaRAID产品性能的“一点遗憾”吗?——RAID 5随机写IOPS最大只有24万,可能不少客户觉得够用吧?但别忘了今天NVMe SSD的单盘性能水平。
最大读IOPS翻一倍、RAID 5写IOPS翻三倍
本文关注的重点还是性能。上图截自Broadcom 9600 Series 24G PCIe 4.0 Tri-Mode RAID Adapters and eHBAs的Product Brief文档,里面的信息量(包括隐含信息量)其实蛮大的。
首先,针对MegaRAID 9600系列阵列卡和eHBA产品,最高4K随机读IOPS能达到600万-640万之间,这是在JBOD和HBA模式下;
RAID 0/1的4K随机读IOPS最高可达450万-640万,也相当不错吧;
RAID 5最高IOPS在90万-110万,注意这里写的是“4K RW(读写)”,如果RAID 5读也在这个水平的话,比上一代的350万岂不是下降了?
针对这个疑点,下文中会继续讨论,您能提前猜到技术实现的原因吗?
如上表,本次发布的新品中MegaRAID卡有3款:9660-16i、9670-24i和9670W-16i,分别为16、24、16个内部驱动器接口。前2款的PCIe主机插槽都是x8 Gen 4.0,而9670W-16i卡使用的SAS4116W ROC(RAID-on-Chip)芯片前后端接口设计都是x16 Gen 4.0 PCIe/24G SAS。
往下看板卡功耗与3颗ROC主控的关系,16 lane的SAS4116为18W,24 lane的SAS4124提高到24W,而SAS4116W的25W相对更高一点。
eHBA卡共6款:9600-8i8e、9600-16e、9600W-16e、9600-16i、9600-24i、9620-16i,下行设备接口lane数量分别为8内8外、16外、16外、16内、24内和16内。同样也是带有字母W的9600W-16e(SAS4016W IOC芯片也带这个字母)前后端接口都是x16 lane PCIe/SAS。
在这次的新品中,我没看到以前那种不带缓存支持“软RAID”的MegaRAID 9x40型号,eHBA卡也仅有一款9620-16i提供了RAID 0、1、10支持,同时它的最大SAS/SATA物理盘数量也限制为32。
SAS4016、SAS4024、SAS4016W三款IOC主控芯片对应的板卡功耗,分别为15W、17W和18W。
上面表格缺失了以往RAID卡一项挺重要的规格参数——Cache缓存容量。可能是在SSD时代影响不大了吧?毕竟HDD机械盘RAID的性能瓶颈早已不再计算处理上。
如上表,MegaRAID 9660 -16i Tri-Mode带有4GB单通道DDR4-3200缓存;MegaRAID 9670 -24i提高到8GB单通道;只有MegaRAID 9670W -16i配备了8GB双通道缓存——简单说就是为了匹配其高性能。
RAID 5随机写IOPS提高,随机读却下降
本次Broadcom公布的资料中,最让我烧脑的莫过于SAS4116W芯片(对应MegaRAID 9670W -16i)的性能指标。最高RAID随机写IOPS达到1.1 million,而随机读却只有900,000。这一度让我怀疑是不是笔误写错了?而仔细对照本文开头那张截图里的“900K to 1.1M RAID 5 IOPS(4K RW)”,又没有错。但怎么解释其合理性呢?
Broadcom并没有公布MegaRAID 9600系列每款卡的性能指标,但ROC芯片资料里却可以参考。比如SAS4116和SAS4124的最高读IOPS都有300万,随机写IOPS则分别为50万和110万(前面提到了功耗也不一样)。让人有点看不懂的是,按道理性能应该最好的SAS4116W的随机读IOPS只写了90万?我认为只有一种解释:这个90万对应RAID 5性能,而另外2款的300万则是RAID 0/1;写IOPS则应该都写的是RAID 5。
再来看下不带“硬RAID”的IOC芯片性能:SAS4016和SAS4024也都是300万随机读IOPS,SAS4016W就高达600万了。这里我猜测,如果SAS4116W只做RAID 0/1的话,应该也能达到600万读IOPS。
注:600万4KB IOPS对应的数据吞吐已高达23,437 MB/s,这里如果使用PCIe 4.0 x8接口带宽已经不够,不难理解W结尾型号是PCIe 4.0 x16了吧。
“非常规”性能背后:RAID 5算法改用纠删码?
本文要讨论最关键的一个问题:RAID 5写IOPS提高了,为什么读IOPS却下降?
看到读/写IOPS在一个大致对等的位置,我忽然想起了ZFS文件系统的全条带(Full Stripe)读写。RAID Z的好处是,不借助Cache就可以在顺序写时达到最小的写惩罚,因为每次都写到新位置而不是读-改-写;ZFS随机写原理上有点类似NetApp的WAFL(写任意文件布局),但是随机读也是全条带性能就不太好看了,相当于多个盘一起操作只读出其中一块的数据。
扩展阅读:《OpenZFS开源文件系统2.0+:持久化L2ARC读缓存、ZIL写缓存提速》
ZFS提高机械盘RAID随机读可以借助L2ARC(SSD读缓存),但我们讨论的RAID卡已经是全闪存阵列了,如果想用卡上DRAM Cache一共8GB也命中不了太多数据吧。而且RAID卡面对SSD为了提高性能通常都设置为绕过Cache直接读盘。
那么MegaRAID 9600系列的SSD RAID 5是不是也把算法改成了全条带读写呢?我觉得从性能特征来看有些道理,“读放大”不会影响SSD的寿命,不覆盖原有位置的全条带写反而对闪存介质友好。当然处理上估计会复杂点,要维护元数据,以及像ZFS和WAFL那样做GC(垃圾回收)。
上面这段属于个人猜想了,如果写的不对请大家拍砖哈。我是初步认为,MegaRAID 9600系列应该是在RAID 5处理中精简了数据拷贝(包括改写过程中的搬移)和内存I/O操作,从而在ROC性能提高有限和板卡功耗受限的情况下,大幅提高了随机写IOPS(算是传统RAID的顽疾吧)。
RAID和SAS控制卡市场,看似Broadcom一家独大,但在这个相当成熟的领域并非没有新进竞争者,比如我在《110 GB/s、1900万IOPS:使用GPU的RAID卡及其背后》里面写过的GRAID。下面是他们最近的Roadmap:
由于使用NVIDIA GPU来加速Linux mdraid,GRAID借助硬件性能可发挥的空间较大,比如未来规划的EC纠删码、Thin精简配置、压缩/加密/dedup去重等。MegaRAID 9600这次会不会也用了纠删码呢?
主控芯片性能:Arm核心和主频与上代相同
再看看新一代ROC芯片的参数:双核Arm A15 1.6GHz与上一代SAS3808相同,只是L2 Cache从1MB增加到2MB,on-chip片上内存从6MB提高到15MB。
IOC(I/O处理器)系列芯片Arm部分规格也一样,但没有RAID 5/6的XOR DMA引擎。虽然eHBA卡写的支持PD(物理盘)数量与ROC一样,但IOC芯片的最大能力——SAS/SATA设备支持2000个,PCIe(NVMe)设备64个(连接在PCIe Switch后面)。
最后补充一点,9600系列eHBA在稍后的firmware版本中,将支持SMR(企业级)和Multi-Actuator多磁头臂硬盘。