110 GB/s、1900万 IOPS:使用GPU的RAID卡及其背后
使用GPU来做RAID卡的GRAID我不是第一次听说,但之前并没仔细研究。昨天看到一篇新闻(https://news.mydrivers.com/1/829/829213.htm)说他们推出了新品——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供别的主机访问。受限于时间精力,我先不在这里讨论了。大家有什么想交流的,也可以在下面留言:)
参考资料
https://www.graidtech.com/solution
https://pan.baidu.com/s/1le_QKeZ-HYp5yhnrIPZBzg?pwd=tcyd
提取码:tcyd
扩展阅读:《企业存储技术》文章分类索引(微信公众号专辑)》
注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。进一步交流可加微信:490834312。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)
尊重知识,转载时请保留全文,并包括本行及如下二维码。感谢您的阅读和支持!《企业存储技术》微信公众号:HL_Storage
长按二维码可直接识别关注
历史文章汇总:http://www.toutiao.com/c/user/5821930387/
http://www.zhihu.com/column/huangliang
点击下方“阅读原文”,查看更多历史文章↓↓↓