NVME Fabric 是你的未来吗?(3)

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

作者简介

唐杰

目前在Xilinx从事DC架构,曾任职于Fusion-IOLSI,希捷等公司。本文唐大师为你详解NVMe Over Fabric协议。

想要和唐大师还有全世界的大牛讨论SSD及存储相关技术?加nanoarch为微信好友,拉你进ssdfans微信群 


–协议初探

目前在www.nvme.org 网站上发布的NVMe Over Fabric 协议有两部分,一部分在NVMe 的标准协议1.2.1中,和over Fabric相关的都在一个单独的文件中。从这个单独放置的选择,可以看出目前的这个协议还是比较初级的,不能放到整体的协议里,因为现在还有很多待定的区域。

    就从这个独立的文件谈起吧,一开始就定义了目前阶段的限制,而且也是未来的工作方向。

  • 严格1:1对应的SQ和CQ,不支持多个SQ对应一个CQ的设计。这就意味这个目前的实现的映射的功能比较弱。同时,因为1:1的方式,就不用担心请求乱序的问题。
  • 因为NVMe 本身没有流量控制实现,因此CQ的大小必须是可以所有的

    并发IO的总和。这个倒是可以理解,很多时候的流量控制是网络的功能,对于SCSI的over run和under run 的移植应该会在后面出现。

  • 元数据(如果支持的话)必须和数据在一起,目前不支持元数据和数据的分开传输的方式。 对应于EMC和HP的520字节的时代,目前4096Byte+64Byte的格式未来会是存储的主流吗?

严格意义上讲,上面的东西还是偏向存储功能的多,对于大部分互联网的应用来讲都不是什么事。

接下来就是关键了,这里列举了和NVMe协议的区别,通过区别来了解两个标准,这样记忆最深刻, 俺记忆深刻的是:

  • NVMe Over Fabric没有定义控制器生成一个host中断的方式,这部分由Host的HBA(其实就是各种传输卡)来自行处理。这样的好处就是可以个传输层拉开距离。
  • 对于建立CQ和RQ的时候,NVMe over Fabric不用原来NVMe的Admin的命令来实现,不用原来的ASQ,ACQ。这个其实不太理解,这个理论上应该可以做到通用的。
  • 不支持PRP,这个可以理解。这里就和NVMe over PCIe 有了区别,这里面就有另一个问题,NVMe over PCIe 和NVMe的区别在哪里?NVMe不就是NVM over PCIE 吗?

下面这个图必须放:

    

俺的理解,目前的主要区别是数据和命令的传输方式的不同的区别。这里面也就反馈了前面的一个重要局限, 因为数据和命令分开传输的情况,如果出现乱序怎么办?因此严格的1:1的配比就是这个原因。从而,也想起了Intel的DPDK的实现,数据和控制平面分开,从而提升数据传输的效率,想到Intel也不推荐跨CPU做操作就明白了,有得必有失。

后面这图,就是协议框架了:


    这个图里,个人觉得最关键东西在NVMe Transport这里,这是RDMA网络和NVMe结合的关键。至于Transport Binding 规范就是一堆如何发现,如何鉴权,如何建立链接的东东,这个熟悉ISCSI的基本上可以直接过了,没啥特殊的地方。

    第二章的封包和数据传输,基本上就是SQE和CQE以及SGL的这种组合,这个熟悉NVMe的大侠基本上也可以直接过。还有后面的命令集以及控制器的架构和发现,鉴权机制这些都不是俺关心的重点。重点是第7章的传输的定义。

    NVMe 的Transport必须保证每一对host和控制器之间的可靠的传输。呵呵,有没有TCP的感觉呢?这里的SQHD就有点像TCP里面的Sequence 和ACK ID了。

    还有一个Keep Alive的定义,这个俺是不太了解了,之前SATA的OOB都没搞清楚,这个需要补课先。

    7.3 的RDMA的定义是需要反复来看的,RDMA的传输机制需要保证有序的封包的传输和数据的处理,这个处理是使用RDMA的QP 来实现对Admin和I/O command的支持。

一个就是RDMA的封包和SQL的mapping, RDMA的传输支持SGL的数据块,SGL的最后区段以及键控的SQL的数据描述符,但是不支持在Host内存中的SGL,这就意味这必须有个转换或者可以用一个非标准的NVMe驱动也行,在NVMe的Fabric和管理封包中只有一个SGL的描述符,在I/O命令中可以有多个。

    看到这里,大家就明白了,RDMA和NVMe之前必须有一个转换,如何把RDMA的数据传输的QP和NVMe的SQ和CQ结合起来,这个实现方案协议是比较开放的,因此每家都可以自由发挥,作为FPGA厂家,Xilinx的实现如下图:


    我会在下一章集中介绍Xilinx使用FPGA对于NVMe Over Fabric实现的加速功能,先在这个留个伏笔。多谢捧场。

    对于这个协议,基本上算是一个比较简单的框架,目前从协议制定参与方的来源来讲,可以看到RDMA的厂家和NVMe的厂家最积极。至于最终用户是否积极参与,这个要看大家实现方案的速度了,这里为自己的公司做个宣传,FPGA最擅长的领域就是在ASIC厂家没有准备好的情况下帮你出奇兵。

参考:

www.nvme.org

分类目录 闪存.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。