公元2016年6月8日,伴随着众多粉丝的期待,这部耗资1.6亿美元,改编自《魔兽争霸:人类与兽人》游戏,拥有众多英雄人物史诗般的IMAX 3D电影在中国大陆上映。《魔兽》电影展现了两个各自安详的世界艾泽拉斯与德拉诺本在黑暗之门的作用下,两个世界联系在了一起,而文明的碰撞和冲击带来了新的秩序。
两天后,存储界的黑暗之门也正式开启:当地时间6月9日,NVM Express公司宣布发布NVM Express over Fabrics协议。对于众多的Fabric厂商和存储厂商来说,这必然是一次崭新的较量。
计算、存储、网络是现代企业IT硬件基础架构的核心。基于Flash和新一代PCM固态存储的SSD正在极大的改变企业存储的格局。可以说NVMe就是针对新型的Nonvolatile memory而量身定制的。对于今天的应用来说,基于NVMe协议的SSD可以提供对性能、延迟、IO协议栈开销的完美优化。
而对于计算和网络来说,如何能够适应这种存储上的变化,则是在NVMe协议逐渐走向成熟后需要解决的一个核心问题。一个简单的例子就是今天随便一个SSD高达几十万IOPS的随机读写性能对于今天的单机应用来说简直是过于浪费了。同时,固态存储也带来了客观上高密存储的可能性。今天的基于2.5英寸 U.2接口的NVMe SSD可以轻易做到10TB以上的容量。如果一个服务器接入8个这样的SSD,可以实现80TB的存储容量。
解决这样问题的关键,则是通过共享机制,并将存储容量池化在多个计算节点间共享使用。显然,这与存储的虚拟化和云化以及软件定义存储的方向是吻合的。从更广泛的意义上来说,公有云和私有云正式通过了高度的共享和灵活的配置来实现成本节约,可靠性提升和便利管理。
从下面的Wikibon ServerSAN Research Project报告结果来看,基于DAS和传统的SAN,NAS的市场正在被超大规模企业云和企业Server SAN存储方式逐渐取代。而决定这种替换的速度,则是来源于新技术的可行性以及企业对于采纳这些新技术的接受程度。
NVMe over Fabrics把NVMe协议在单系统时代提供的高性能、低延迟和低协议负担的优势进一步发挥到了NVMe存储系统互连结构中。在这种结构里,基于NVMe over Fabrics的主机可以通过互连结构访问到任何一个数据中心的存储节点,而这种访问是具有同样高性能、低延迟和低协议负担的优势。
更加难能可贵的是,NVMe over Fabrics协议是构造在其他的传输层协议基础之上的,因此可以使用原来的传输层协议配合NVMe over Fabrics的协议实现这些优势,并不需要摒弃数据中心已经建设好的硬件环境。
在NVMe over Fabrics协议诞生之前,基于SCSI的众多互联协议已经在考虑如何改善系统性能并降低CPU的负担了。iSCSI协议提供了基于IP以太网的SCSI互联协议,它仅仅依赖传统的IP网络,提供了可共享的存储方式。
由于iSCSI依赖于TCP协议,并且TCP协议本身代价较大,因此它的性能在通常的配置下并不好。为了优化iSCSI的性能,扩展了iSCSI Extensions for RDMA (iSER)。iSER是面向各种RDMA传输层协议的存储协议,由于RDMA效率很高,iSER相比于iSCSI协议来说具有非常好的性能、极低的延迟和CPU使用率。
但是由于iSER仍然是基于SCSI这个存储协议进行扩展的,因此在协议栈的组织上仍然受限于SCSI协议的限制,例如队列的数量、深度等。在性能达到几十万IOPS的时候仍然会有较大的协议开销。基于上述原因和出于对未来NVM存储功能要求的需要,NVMe over Fabrics协议应运而生。
NVMe over Fabrics协议定义了使用各种通用的传输层协议来实现NVMe功能的方式。在协议中所指的传输层包括了RDMA,Fiber Channel,PCIe Fabrics等实现方式。依据具体的传输层不同,又有不同的传输层绑定协议去具体规范每一种互联网络所具体需要实现的传输转换层实现。例如,INCITS 540 Fibre Channel – Non-Volatile Memory Express (FC-NVMe)规定了对于FiberChannel这种媒体所支持NVMe over Fabrics所必需实现的接口方式。
由于NVMe over Fabrics协议的这种灵活性,它可以非常方便地生长在各个主流的传输层协议中。不过由于不同的互联协议本身的特点不同,因此基于各种协议的NVMe over Fabrics的具体实现活跃都是不同的。一些协议本身的协议开销较大,另一些需要专用的硬件网络设备,客观上限制了NVMe over Fabrics协议在其中的推广。下表列出了一些典型的协议的优缺点。
虽然有着众多可以选择的互联方式,这些互联方式按照接口类型可分成三类:内存型接口,消息型接口和消息内存混合型接口。相应的互联类型和例子参见下图。
在这些众多的传输层协议中,重点介绍一下RDMA。RDMA是一项古老的技术。它通过互联网络把数据直接传入某台计算机的一块存储区域,不需用到多少计算机的处理功能。
普通网卡集成了支持硬件校验和的功能,并对软件进行了改进,从而减少了发送数据的复制量,但无法减少接收数据的复制量,而这部分复制量要占用处理器的大量计算周期。为充分发挥万兆位以太网的性能优势,必须消除主机CPU中不必要的频繁数据传输,减少系统间的信息延迟。
从下面的图中看出,RDMA通过网络把数据直接传入计算机的存储区,降低了CPU的处理工作量。当一个应用执行RDMA读或写请求时,不执行任何数据复制。在不需要任何内核内存参与的条件下,RDMA请求从运行在用户空间中的应用中发送到本地NIC(网卡),然后经过网络传送到远程NIC。
RDMA对于NVMe over Fabrics协议的便利性体现在下面几个方面:
提供了低延迟、低抖动和低CPU使用率的传输层协议;
最大限度利用硬件加速,避免软件协议栈的开销;
依赖于开放互联联盟组织维护的Verbs和代码库,RDMA定义了丰富的可异步访问的接口机制,这对于提高IO性能是至关重要的。
RDMA依据底层的不同,可进一步分成InfiniBand,RoCE和iWarp。它们的区别主要是底层实现协议的不同。其中InfiniBand需要依赖于专用的InfiniBand网络,因此可以提供非常好的服务质量,而RoCE和iWarp则可以基于以太网络,并使用专用的RDMA NIC和Switch来实现高服务质量。
RoCE的两个版本中,v2依赖于UDP/IP协议提供了在局域网中灵活的路由和拥塞控制功能;iWarp则是基于TCP协议提供了更加灵活的网络互联方式。
在各种RDMA中,定义了硬件操作的基本原语。在软件层面,需要执行RDMA操作的命令按照硬件制定的方式组织成命令请求项,并添加到位于内存中的工作队列中。
硬件再依次从这些队列中取出命令开始执行;命令的执行结果会记录到一个完成队列中,这个完成队列也是处于内存中的,因此可以为软件层面感知到并进行后续处理。
由于RDMA底层实现可以使用任意一中接口方式实现详尽的功能,在每种协议背后又有众多的厂商支持,为了统一应用接口,便于软件开发人员理解和使用RDMA,每种RDMA协议定义了Verbs用于异步操作实现RDMA的语义。Verbs是一种比API更加底层的编程方式,根据使用方式的不同,可分为两类:
控制路径Verbs,用于管理RDMA的资源,通常需要上下文切换。例如Create,Destroy,Modify,Query,Work with events;
数据路径Verbs,用于使用Handle来发送、接收数据的操作,不需要上下文切换。例如Post Send,Post Receive,Poll CQ,Request for completion event;
对于RDMA至关重要的远端内存空间,在RDMA协议中是通过内存区域(MR)来进行描述。定义内存区域实际上就是把这个虚拟内存锁定到物理内存中,并告诉NIC对应的关系。这样,依据MR的Key,NIC硬件可以不依赖硬件去操作数据在本地内存和远端的MR之间进行传输。
从上面关于RDMA的介绍来看,RDMA设计初衷就是为了高性能、低延迟访问远端节点的,并且它的语义非常类似本地DMA的过程,因此很自然就可以将RDMA作为NVMe协议的载体,实现基于网络的NVMe协议。
但是,毕竟基于网络的传输模型与本地的PCIe传输模型还有种种差异,因此将NVMe协议拓展到互联层面需要解决一系列问题。因此,综合RDMA,FC等等各种不同传输层协议的特点,NVM Express Inc.提出了NVMe over Fabrics协议实现了一个完整的网络高效存储协议。
需要注意的是,NVMe over Fabrics协议的基础是NVMe Base specification,目前特指的版本是NVM Express revision 1.2.1。在下篇文章中将对NVMe over Fabrics要解决的问题及协议规范下IO的传输过程等话题进行详细介绍。
作者:路向峰,现任Memblaze公司CTO,文章最先发布于公众号晶格思维(crystalwit)。该系列文章将从NVMe over Fabrics的诞生背景及技术细节入手,向读者全面解析当下存储领域这一热门话题。
推荐阅读:
温馨提示:
请识别二维码关注公众号,点击原文链接获取更多RDMA和NVMe相关技术资料汇总。