为了部落:NVMe over Fabric诞生记

计算、存储、网络是现代企业IT硬件基础架构的核心。基于Flash和新一代PCM固态存储的SSD正在极大的改变企业存储的格局。可以说NVMe就是针对新型的Non volatile memory而量身定制的。对于今天的应用来说,基于NVMe协议的SSD可以提供对性能、延迟、IO协议栈开销的完美优化。而对于计算和网络来说,如何能够适应这种存储上的变化,则是在NVMe协议逐渐走向成熟后需要解决的一个核心问题。

一个简单的例子就是今天随便一个SSD高达几十万IOPS的随机读写性能对于今天的单机应用来说简直是过于浪费了。同时,固态存储也带来了客观上高密存储的可能性。今天的基于2.5# U.2接口的NVMe SSD可以轻易做到10TB以上的容量。如果一个服务器接入8个这样的SSD,可以实现80TB的存储容量。

解决这样问题的关键,则是通过共享机制,并将存储容量池化在多个计算节点间共享使用。显然,这与存储的虚拟化和云化以及软件定义存储的方向是吻合的。从更广泛的意义上来说,公有云和私有云正式通过了高度的共享和灵活的配置来实现成本节约,可靠性提升和便利管理。

从下面的Wikibon Server SAN 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协议在其中的推广。下表列出了一些典型的协议的优缺点。

虽然有着众多可以选择的互联方式,这些互联方式按照接口类型可分成三类:内存型接口,消息型接口和消息内存混合型接口。相应的互联类型和例子参见下图。

本文作者路向峰现任Memblaze公司CTO,文章最先发布于公众号晶格思维(crystalwit)。该系列文章将从NVMe over Fabrics的诞生背景及技术细节入手,向读者全面解析当下存储领域这一热门话题。文章后续部分将陆续发布于本公众号,读者亦可扫描下面二维码关注晶格思维公众号阅读原文。