作者简介
唐杰
目前在Xilinx从事DC架构,曾任职于Fusion-IO,LSI,希捷等公司。本文唐大师为你详解Xilinx NVMe Over Fabric的FPGA方案。
想要和唐大师还有全世界的大牛讨论SSD及存储相关技术?加nanoarch为微信好友,拉你进ssdfans微信群
–未来的存储
很荣幸参加了由Membalze主办的DCTC2016[1]大会,在Xilinx的展台上也展示了Xilinx的NVMe Over Fabric的方案。在和各路大侠的交流过程中也产生了很多新的想法,在这里谢谢Membalze公司对Xilinx的支持,这个算是Xilinx NVMe Over Fabric方案的第一次正式实物展出,从几个大数据中心的客户的Lab中走出来给大家看,我们也是向前走了一步。
感谢阿里巴巴的鸿蒙同学在会上提出了一个用户的要求来说明NVMe Over Fabric的必须性,他说他们有个土豪的云客户,需要一个9PB的全Flash的存储,这个需求在不使用Over Fabric的技术条件下基本上不可能的。
对于NVMe Over Fabric的技术大家都有兴趣,而且有一个问得最多的问题,这个也是存储行业问得最多的问题,掉电了会不会丢数据。俺就从这里展开吧。
在这个FPGA的Design中,RDMA的QPs 从主机的CPU的DDR中转移到FPGA的BRAM中实现,这个队列相对于RDMA的驱动实现来讲是全硬件电路,同理队列中消息的处理是完全使用硬件的Arbiter来实现消息的传递和处理。
对于RDMA中的数据,则是通过网络直接保存在FPGA中的DDR上,就是图中的TX 和RX的Buffers。在收到数据之后,需要生成NVMe的命令把数据最终写入NVMe的设备。同理,NVMe设备的CQ和SQ也是有硬件实现。
问题来了,大家都在问那FPGA掉电之后,是不是数据就没有了,答案是肯定的,数据肯定没有了,但是问题是,你的数据没有丢,因为这个写入没有成功。原因是在Xilinx的设计中,我们的data path是全部有硬件来实现,不用使用大家在软件世界中的DoorBell和Polling这样的技术,因为在通讯业打拼很久的我司直接把交换机中的Cut-Through forwarding的技术复制过来了。在任何一个NVMeOF的数据包的payload没有写入对应的NVMe盘之前,我们都不会返回成功。因此,如果出现掉电,你的数据肯定没有写入成功,再来就是。
这里就出现了一个有意思的问题,大家为啥关心这个问题呢,因为很简单,在传统的存储世界中,大家层层的用DRAM做cache,然后用大大小小的电池来保护和数据恢复。因为,DRAM和HDD的数据相差是至少是ns和ms的区别。因此,如果大家在传统的存储系统设计的过程中,HDD要用DDR做buffer,机头也用DDR做buffer,文件系统要用page cache做buffer。层层加速,层层防护,让我想起一个同学在大会上的吐槽, “我们的硬盘性能不够,加机器,我们的存储容量不够了,加机器,我们的内存不够了,加机器。”
因此,对于新兴存储介质的存储系统的定义,大家需要重新考虑,使用大量的X86系统的DDR做数据buffer,然后使用大量的X86的CPU来运行各种牛逼的算法,处理各种NVRADM的high speed log 做数据恢复,或者直接在用大大小小的电池做保护。这条路可以走多久,在NVMe Over Fabric的情况下是否还需要。要知道NVMe的延时是us级的,RDMA的网络延时可能是ns的,你是否还需要在中间夹上大量的DDR。在SDC 2015中,Chelsio[2]的同学给出了一个建议:
如果到过现场,听过俺讲解的都硬件知道,Xilinx的设计就在TODAY这个架构上。我们会在今年年底推出NVMeOF的开发板,这个开发板就是TOMORROW的架构了。这次先到这里,下一篇再讲一个大家在现场比较关心的问题。
引用:
[1] http://dctc2016.eventdove.com/
[2]http://www.snia.org/sites/default/files/SDC15_presentations/networking/WaelNoureddine_Implementing_%20NVMe_revision.pdf