为什么需要NVMe/TCP?

科技领域的创新从来都没有停止步伐,存储技术作为数字时代发展的基石,近几年来更是有了颠覆性的突破,以Flash闪存为代表的新的存储介质在性能和延迟方面比原来的机械硬盘HDD有了数量级的提升。为了充分发挥出这些高性能硬件的优点,与之相对应的相关协议也需要有颠覆性的变化。早期,各种私有协议SCSI Express, NVMe等协议百花齐放,经过大浪淘沙和全球各大企业的一起努力,最终形成统一标准的协议: NVMe。 在传统存储系统领域,为传统单核CPU和单队列HDD机械硬盘而设计的SCSI over 各种Fabric的协议(iSCSI等)也难以发挥出闪存的优势,顺应市场和技术的需要,NVMe标准组织定义了NVMe over Fabric协议,在”Fabric” 这个大概念下,over TCP作为最后也是最新的一个成员,被业内寄予厚望,我们今天来探讨一下为什么需要她。

Over TCP 的块存储协议,最广为人知,并被普遍使用的是iSCSI协议,iSCSI的历史还要追溯到1990年代的Small Computer System Interface (SCSI) 协议的出现,SCSI主要用来做块存储硬件设备和服务器之间的接口。最早的SCSI是共享总线设计,那么随着带宽需要越来约高,传输距离也要求越来越远,串行的SCSI传输协议就被开发出来,其中包括Fibre Channel (FC), Serial Attached SCSI (SAS), SCSI over TCP/IP (iSCSI), 那么得益于TCP/IP的广泛使用,那么iSCSI也成为最为广泛使用的网络块存储协议。不过iSCSI当年设计的时候主要考虑到后端的存储硬件时机械硬盘(HDD),那么随着现在闪存盘被发明并被广泛使用,iSCSI在很多存储系统中也变成了性能的瓶颈,对协议进行升级换代也刻不容缓。

随着NVMe协议被发明出来解决了对Flash的优化使用,over各种各样网络的协议(IB, FC, RoCE)也逐步被细分市场接受,而对市场上最广泛存在的TCP网络的支持,由Lightbits主导发明,成为NVMe over Fabric大家庭的最后一个,也是最新的一个成员,至此,NVMe对市场上网络的支持可以说有了全集,对各种不同应用环境有了完整的支持。
那么为什么iSCSI协议不能充分发挥出Flash闪存的性能呢,其主要原因还在于队列模型,iSCSI是一个单存储队列机制,这对需要高并发(多队列,队列深度)才能发挥出性能的闪存来说是巨大的瓶颈。最新的Linux Kernel的blk-mq模块也被开发出来以充分发挥出NVMe硬盘的性能,该模块如下图所示:

下面我们再来对比一下在相同的硬件–NVMe盘, CPU, 和网络的情况下,使用不同的协议带来的性能差异。

在队列深度为1的情况下4KB RW70/30的性能对比,我们可以看到,随着线程数的增加,iSCSI的提升非常小,而NVMe/TCP的性能可以随着线程数增加而线性增长,能够充分使用高并发带来的优势,从而能够充分发挥出现代闪存盘的性能。

最后我们总结一下,使用NVMe over TCP的必要性主要来自于两点:
1. 随着NVMe盘的广泛使用,用新的协议充分发挥出其性能优势是提高存储系统价值和效率的关键。
2. 作为最被广泛使用的TCP网络,新的存储协议与之适配有着巨大的市场价值,这部分市场空白急需被填补。

两点的交叉点就是NVMe over TCP协议,目前随着2018年底协议发布到今天,各大Linux产商的最新发布版本里也都对NVMe over TCP做了原生支持,应用生态也越来越成熟,市场也越来越多的用户逐步把iSCSI切换到新的NVMe over TCP存储系统。随着NVMe协议的进一步完整,完善,存储系统也将迎来一波新的发展,为整个高科技行业的发展奠定坚实的基础。

About the Writer: