NVMExpress, Inc. 最近宣布把NVMe over TCP (NVMe/ TCP)添加到NVMe传输系列中。NVMe/TCP的加入是VNMe一个非常重要的发展。
作者2019年的首次网络直播是对新规范的重要优势和特点的深入探索。如果错过了直播,可通过以链接观看(https://www.brighttalk.com/webcast/12367/348656)
在网络直播期间,作者收到了很多来自观众的许多引人入胜的问题,由于当时无法全部回答。在这篇博客中,作者计划回答了所有未解决的NVMe / TCP问题。
1、当NVMe 1.4规范最终确定时,是否应该期待NVMe / TCP的官方文档?
NVMe/TCP是NVMe-oF的一种传输绑定协议实现,因此我们应该期望已批准的技术提议TP 8000被集成到NVMe-oF 1.1发布的规范文档中。虽然NVMe董事会尚未公布正式时间表,但我们预计将在今年晚些时候发布。
2、主机端需要什么(硬件,固件,软件,驱动程序等)来支持TCP上的NVMe?
NVMe/TCP软件不需要任何特殊的硬件/固件即可运行,尽管不同类别的CPU和网络适配器可以从更好的性能中受益。当然,为了运行NVMe/TCP,需要安装NVMe/TCP主机软件(Host)和NVM子系统软件。这些软件可与Linux Kernel(v5.0)和SPDK(v.19.01)以及商业NVMe/TCP目标设备(Target Device)一起使用。
3、一个主机在运行时可以拥有的命名空间数量是否有任何限制?主机端需要什么资源(CPU核心,内存,端口)?
NVMe/TCP不对NVMe架构的基本功能施加任何限制,因为它是NVMe-oF传输层的协议绑定。因此,NVMe/TCP可以支持的命名空间数量没有限制。从传输的角度来看,命名空间是一个纯粹的逻辑概念,没有分配任何主机资源。
4、对于直接连接的NVMe SSD来说,NVMe/TCP会增加延迟吗?
仅通过NVMe/TCP可能不会直接增加NVMe的时延,特定的控制器实现可能通过特殊的升级规避时延。
5、哪个操作系统内核支持NVMe/TCP?
Linux Kernel版本5.0和以上版本支持NVMe/TCP。
6、在基于数据平面的网络堆栈(如DPDK)上运行NVMe /TCP时,是否会存在显著的性能差异?
如果运行控制器的平台具有足够的功能,在通用Linux网络堆栈之上运行NVMe/TCP预计不会出现根本性的差异。但是,如果控制器没有足够的CPU专用于运行Linux网络堆栈。例如,如果它有一些其他操作需要CPU处理,那么基于DPDK的解决方案可能会因效率提高而获得更好的性能。
7、是否建议使用Data Center TCP来运行NVMe/TCP工作负载?
一般来说,Data Center TCP有可能比其他TCP具有更好的拥塞控制算法。通常,无论NVMe/TCP如何,它在网络流量控制上都是有优势的。问题是,如果在DC网络和现代TCP/IP堆栈中发生模式拥塞,他们是否有其他机制来有效地处理拥塞?
8、NVMe/TCP有多个R2T吗?这些与FCP中的缓冲区相比如何?
理论上,控制器可以将多个轻量R2T PDU发送到主机以获取特定命令。但是,主机有最大值(MAXR2T)限制。R2T PDU具有与FC中的FCPBBC等效的信用机制,但是它在NVMe命令级别而不是FC端口级别上运行。
9、如何管理流量,是仅使用R2T和标准TCP拥塞窗口吗?
是的,端到端流流控制由TCP/IP处理,NVMe传输级流控制通过R2T信用机制进行管理。
10、在SQ中,多个未完成请求是否受到PDU排序约束?
没有约束,对应于不同NVMe命令的PDU没有定义排序规则。
11、在NVMe/TCP中,如何管理修补和升级?是非破坏性的吗?
在大型环境中如何使用NVMe/TCP的回滚流程?建议咨询供应商询问具体解决方案,NVMe/TCP协议本身没有强制要求或禁止此类操作要求。
12、是否有可用的NVMe/TCP开源项目实现?
有的,Linux和SPDK都包含NVMe/TCP的目标实现。
13、iSCSI中是否存在等效的NVMe/TCP实现?
iSCSI中没有NVMe/TCP的等效实现,但有许多等效概念。NVMe/TCP和iSCSI在某种意义上是等效的,即iSCSI是通过TCP/IP运行的SCSI传输,而NVMe/TCP是通过TCP/IP运行的NVMe传输。
14、在性能(带宽,IOPS,延迟等)上,NVMe/TCP如何与NVMe/FC进行比较?
笔者尚未测试任何NVMe/FC产品或开源实现,也未看见过任何类似NVMe/FC性能基准测试,但是,相比接连接的NVMe,NVMe/TCP如何与NVMe/FC两者都会有相对较小的下降。
15、目前有NVMe/RoCE与NVME/TCP的CPU利用率数据吗?
没有官方数据,但是,NVMe/TCP软件需要比NVMe/RDMA更多的CPU资源,因为NVMe/RDMA会卸载部分传输协议到硬件中。此外,这还取决于工作负载和网络适配器实现的无状态卸载的效果。
16、相比NVMe/RDMA,使用NVMe/TCP有哪些优缺点?是否存在性能差异?
NVMe/TCP只是一种传输绑定,可提供商用硬件优势和良好的可扩展性,无需修改网络基础架构即可支持RDMA(例如,使以太网无损)。NVMe/RDMA可以具有较低延迟,较低的CPU利用率(具体取决于实现和无状态卸载效果)。在决定投资时,应该综合权衡性能差异,成本,规模等因素。
17、NVMe/TCP与NVMe/RDMA相比有何不同?可否在同一个以太网100Gb/s网络上组合这两种流量?
首先,NVMe/TCP与NVMe/RDMA不同,因为它是在TCP/IP上运行NVMe-oF封装数据;而NVMe/RDMA是通过RoCE(InfiniBand over UDP)或iWARP(TCP与DDP和MPA)运行NVMe-oF封装和数据。
当然,NVMe/TCP和NVMe/RDMA都通过以太网运行,因此它们可以在相同的以太网100Gb/s网络上运行。
18、在数据中心/私有云内,跨地理分布式数据中心/私有云以太网交换机上,NVMe PDU最大可容忍延迟是多少?
NVMe/TCP没有指定的最大延迟,实际上,网络延迟不是问题,NVMe Keep Alive Timeout默认值为两分钟。
总结:NVMe/TCP传输绑定规范目前已公开下载,TCP是添加到现有NVMe传输系列中的新传输协议(除了PCIe、RDMA和FC)。NVMe/TCP定义了NVMe队列,NVMe-oF封装和IETF传输控制协议(TCP)上的数据传输的映射。NVMe/TCP传输提供可选的增强功能,如内联数据完整性(DIGEST)和在线传输层安全性(TLS)等。
NVMe/TCP令人兴奋的是它可以在NVMe-oF主机和NVMe-oF控制器设备之间实现高效的端到端NVMe操作,这些设备通只需过任何标准IP网络互连,具有出色的性能和延迟特性。这使得大规模数据中心能够利用其现有的以太网基础设施,多层交换机拓扑和传统的以太网网络适配器。
在软件方面,NVMe/TCP主机和控制器设备驱动程序也可在Linux内核和SPDK环境中直接采用,这两种NVMe/TCP实现均旨在无缝将其插入其现有的NVMe和NVMe-oF软件堆栈。