[转帖]读IOPS 640万、写110万:24G SAS/NVMe RAID卡性能谜团

iops,24g,sas,nvme,raid,性能,谜团 · 浏览次数 : 0

小编点评

**排版:** **1. RAID 5写IOPS提高了,为什么读IOPS却下降?** * RAID 5算法改用纠删码,但我们讨论的RAID卡已经是全闪存阵列了,如果想用卡上DRAM Cache一共8GB也命中不了太多数据吧。 * 而且RAID卡面对SSD为了提高性能通常都设置绕过Cache直接读盘。 **2. 如何解释ZFS文件系统的全条带 (Full Stripe)读写?** * ZFS随机写原理上有点类似NetApp的WAFL (写任意文件布局),但随机读也是全条带性能就不太好看了,相当于多个盘一起操作只读出其中一块的数据。 **3. 为什么MegaRAID 9600系列应该是在RAID 5处理中精简了数据拷贝(包括改写过程中的搬移)和内存I/O操作?** * RAID 5处理中精简了数据拷贝和内存I/O操作,可以大幅提高随机写IOPS。 * 此外,减少内存I/O操作可以降低板卡功耗。 **4. 9600系列eHBA在稍后的firmware版本中,将支持SMR (企业级)和Multi-Actuator多磁头臂硬盘。** * SMR可以减少硬盘读写操作,提高随机写IOPS。 * Multi-Actuator可以提供多个IO操作,提升性能。 **5. 总结:** * RAID 5写IOPS提高了,是因为改用纠删码和减少内存I/O操作。 * 9600系列eHBA在稍后的firmware版本中,将支持SMR和Multi-Actuator多磁头臂硬盘。

正文

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芯片。

image.png

从上图中至少可以先看出两点:1、本次有PCIe x16插槽的板卡;2、有提供总共24个内部SAS/PCIe lane下行设备接口的型号(3个×8 SFF-8654连接器)。

大家还记得上代MegaRAID产品性能的“一点遗憾”吗?——RAID 5随机写IOPS最大只有24万,可能不少客户觉得够用吧?但别忘了今天NVMe SSD的单盘性能水平。

最大读IOPS翻一倍、RAID 5写IOPS翻三倍

image.png

本文关注的重点还是性能。上图截自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万岂不是下降了?

针对这个疑点,下文中会继续讨论,您能提前猜到技术实现的原因吗?

image.png

如上表,本次发布的新品中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的性能瓶颈早已不再计算处理上。

image.png

如上表,MegaRAID 9660 -16i Tri-Mode带有4GB单通道DDR4-3200缓存;MegaRAID 9670 -24i提高到8GB单通道;只有MegaRAID 9670W -16i配备了8GB双通道缓存——简单说就是为了匹配其高性能。

RAID 5随机写IOPS提高,随机读却下降

image.png

本次Broadcom公布的资料中,最让我烧脑的莫过于SAS4116W芯片(对应MegaRAID 9670W -16i)的性能指标。最高RAID随机写IOPS达到1.1 million,而随机读却只有900,000。这一度让我怀疑是不是笔误写错了?而仔细对照本文开头那张截图里的“900K to 1.1M RAID 5 IOPS(4K RW)”,又没有错。但怎么解释其合理性呢?

image.png

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:

image.png

由于使用NVIDIA GPU来加速Linux mdraid,GRAID借助硬件性能可发挥的空间较大,比如未来规划的EC纠删码、Thin精简配置、压缩/加密/dedup去重等。MegaRAID 9600这次会不会也用了纠删码呢?

主控芯片性能:Arm核心和主频与上代相同

image.png

再看看新一代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后面)。

image.png

最后补充一点,9600系列eHBA在稍后的firmware版本中,将支持SMR(企业级)和Multi-Actuator多磁头臂硬盘。

更多参考《双磁头臂硬盘技术细节:希捷Exos 2X14的十四点问答

OCP开源硬件2:SMR硬盘技术路线之争

与[转帖]读IOPS 640万、写110万:24G SAS/NVMe RAID卡性能谜团相似的内容:

[转帖]读IOPS 640万、写110万:24G SAS/NVMe RAID卡性能谜团

https://aijishu.com/a/1060000000361186 存储 引言:读IOPS__翻倍的原因相对简单,但写IOPS__暴增似乎也是有代价的。MegaRAID 9600__的算法会不会改用纠删码了? 背景阅读 《PCIe 4.0 SAS+NVMe RAID/HBA卡:最高读IOP

[转帖]IOPS计算与典型的IO场景

https://blog.csdn.net/qq43748322/article/details/122344886?spm=1001.2014.3001.5502 首先需要知道I/O中读操作(Read)与写操作(Write)所占的百分比。然后通过下列公式,将主机的IOPS需求转换成硬盘实际IOPS

[转帖]浅谈RAID写惩罚(Write Penalty)与IOPS计算

介绍 通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RAID10是提供最好的性能和数据保护,不过成本最高等等。其实决定这些性能考虑的因素很简单,它就是RAI

[转帖]浅谈RAID写惩罚(Write Penalty)与IOPS计算_文字版

https://www.cnblogs.com/IvanChen/p/4491984.html 介绍 通常在讨论不同RAID保护类型的性能的时候,结论都会是RAID-1提供比较好的读写性能,RAID-5读性能不错,但是写入性能就不如RAID-1,RAID-6保护级别更高,但写性能相对更加差,RAID

[转帖]读Brendan Gregg - 谈性能分析

https://zhuanlan.zhihu.com/p/206743670 Brendan Gregg何许人 Brendan Gregg在性能分析工业界如雷贯耳, 相信看到这篇文章的人肯定知道他的大名. 我们看一下他自己写的bio, 这里摘取的是short版本: Brendan Gregg is

[转帖]磁盘读速度巨慢使用arcconf工具调整后的二次优化

情况叙述:lvm文件系统出现损坏,格式为xfs,磁盘修复失败后该节点需要重新格式化处理,格式化后重新划分pv,vg,lv,做完之后应用反应读写的速度达不到应用使用的要求,与正常的相比速度不稳定 现象:time和dd测试速度后发现写的速度为10-20MB/s 解决1:yy3:~ # chmod +x

[转帖]MioIO读/写性能测试

https://www.jianshu.com/p/a0a84f91b16f image.png COSBench是Intel团队基于java开发,是一个测试云对象存储系统的分布式基准测试工具,全称是Cloud Object Storage Benchmark;由Driver和Controller两

[转帖]Innodb存储引擎-锁(数据库锁的查看、快照读&当前读、MVCC、自增长与锁、外键与锁、行锁、并发事务的问题、阻塞、死锁、锁升级、锁的实现)

文章目录 锁lock 与latch读锁/写锁/意向锁INNODB_TRX/INNODB_LOCKS/INNODB_LOCK_WAITS一致性非锁定读(快照读)一致性锁定读(当前读)MVCC版本链Read View流程 自增长与锁外键和锁行锁类型记录锁(record lock)间隙锁(gap lock

[转帖]DBWR与LGWR的写入机制

https://www.jianshu.com/p/6c87cb6cd320 读与写是每个数据库提供的最基本的功能。当数据库中出现第一个进程时,总免不了要将数据从磁盘上加载到内存中,一次数据库的物理I/O由此发生。而这对应着数据库的读事件。通常大多数情况下,数据库中不仅会伴随着大量的读,也会产生大量

[转帖]共识、线性一致性与顺序一致性

https://segmentfault.com/a/1190000022248118 etcd 是线性一致性读,而 zk 却是顺序一致性读,再加上各种共识、强弱一致的名词,看的时候总会混淆,这篇文档就列举下分布式系统中的那些"一致性名词",引用了很多其他的文章,不过会多出一些例子来帮助理解。 什么