使用GPU来做RAID卡的GRAID我不是第一次听说,但之前并没仔细研究。昨天看到一篇新闻(_https://news.mydrivers.com/1/...)说他们推出了新品——SupremeRAID SR-1010号称全球最快的NVMe/NVMeoF RAID卡。
没错,这块卡硬件上就是NVIDIA RTX A2000,半高双宽,只是把金属I/O挡片换了,没有显示输出接口而已。
下面来看看性能(_图片点开后可放大,以下同_):
注意,上图左/右分别是Linux、Windows环境的性能;上半部分为RAID优化状态,下半部分则是Rebuild修复时。仅看性能数字,确实比使用Broadcom等芯片的传统服务器SAS/NVMe RAID卡要高很多(扩展阅读:《_350万IOPS:NVMe SSD RAID卡性能测试解析_》)。
首先是Linux下4K随机读1900万IOPS;随机写RAID 10可达600万,RAID 5则是150万IOPS。顺序读带宽110 GB/s(差不多要把服务器主板的PCIe/NVMe带宽都用起来吧),不同RAID级别的顺序写都在20多GB/s。
疑问1:GRAID与mdraid操作系统卷管理器的关系
Windows下的性能比Linux要低许多,特别是随机I/O,这让我想起了依赖操作系统软RAID/卷管理器的Intel RST/VROC。唯一例外的是,GRAID Windows RAID 10顺序写能跑到比Linux还快的35 GB/s(正好是随机读的一半)。
至于在Rebuild重建时的性能衰减,也是Windows下的读速度下降比例更大。GRAID独特的一点是,Rebuild时的写性能普遍影响较小,这个我们结合看下面的原理图应该更好理解。
根据GRAID架构图,它在用户数据读取时是不经过GRAID控制卡(GPU)的,也就是说驱动软件里有维护RAID算法和结构。而写数据时要经过GPU卡,计算校验位(也有读取数据更新校验块的时候)之后写入NVMe SSD。
再看前面GRAID的写带宽,在GPU卡接口PCIe Gen4 x16的情况下,能跑到20GB/s以上已经效率挺高了。
上图引用自GRAID-SupremeRAID用户手册。在这个预安装的软件包中,就包括NVIDIA的GPU显卡驱动。再看手动安装过程,会有更多的发现哦:)
如上图,大家看到GRAID依赖的包里有什么了吧?mdadm是MDRAID管理工具。
当然,与VROC不同的是,Intel经过优化还是让MDRAID跑在CPU上,而GRAID则是用GPU来跑(所以算硬RAID?)。
那么是不是任何一块NVIDIA GPU都可以支持GRAID软件呢?根据上面这段说明,我感觉License Key有可能是与GPU序列号绑定的。
上图中的层级结构,如果对传统RAID技术熟悉的朋友应该不难理解。GRAID首先要用/dev/nvme0n1这样的SSD设备创建/dev/gpd0n1物理盘(用于进一步管理),然后创建驱动器组即RAID,最后在RAID组上划分/dev/gvd0n1“VirtualDrive”逻辑磁盘给操作系统用。
启动盘能否做RAID呢?GRAID不像传统RAID卡那样有主机引导时预加载的Option Rom,也没有Intel那样的生态能把这部分做进BIOS。所以只有在安装Linux系统时,先用MD创建软RAID 1,等graidctl工具等装好后,再转换为GRAID。如下图命令:
这应该就是相当于把之前mdraid中的镜像盘拆出来,直接移到GRAID中。
上图是运行列出虚拟盘的命令。我们看到的/dev/mdXXX所在的DG磁盘组ID 4,我猜就是从mdraid转换过来的。而直接用GRAID新建出来的VD路径应该是DG0上的/dev/gvdXXX这种格式。
我还看到了“Stripe Cache”,这又是什么呢?
使用Stripe Cache来改进HDD RAID 5/6的性能
我们知道传统RAID卡、存储阵列控制器上缓存的重要性,特别是做RAID 5/6是否开Write Back Cache对写性能影响较大。GRAID也有一个针对机械盘的“条带缓存”功能。
如上图:这一段命令是先在DG0上创建一个4GB的VD(推荐用于Stripe Cache的大小),然后在DG1(应该是机械盘RAID组)上也创建VD(5TB)。接着将4GB的VD配置为5TB VD的“条带缓存”,最终用户访问的VD设备名应该是/dev/mapper/dg1vd0,这里是不是调用了device mapper的Cache功能呢?
具体到这个Stripe Cache所在的DG0,如果是SSD RAID对机械盘加速效果应该更好。另外,上面还介绍了一条刷新stripe cache的命令。
关于掉电保护和数据完整性
最后我还想到一个小问题,比如像Intel VROC这样不带掉电保护写缓存的软RAID,如果需要严格保证写入的一致性不丢数据,可以选择在SSD上配置一个log,有影响性能但保证完整性。GRAID虽然有GPU卡上的显存,但我没看提到掉电保护相关,他们的数据写入完整性是怎么实现的?
GRAID还有NVMe-oF方面的支持,比如通过网络连接外部的NVMe-oF SSD,或者创建NVMe-oF Target供别的主机访问。受限于时间精力,我先不在这里讨论了。大家有什么想交流的,也可以在下面留言:)
作者:唐僧 huangliang
原文:企业存储技术
推荐阅读
欢迎关注企业存储技术极术专栏