iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA
Posted 刘爱贵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA相关的知识,希望对你有一定的参考价值。
iSCSI
iSCSI(Internet Small Computer System Interface)是一种将流行的SCSI协议扩展到TCP/IP网络,从而创建了基于IP的存储局域网SAN的块存储协议,它也是大道云行FASS全闪软件定义存储内置支持的块存储协议之一。
iSCSI具有非常坚实的基础:SCSI、TCP和IP,因此在过去20年内得到了极广泛的应用,现在很多操作系统以及Hypervisor都具有内置的支持。Linux Kernel 3.1版本在其内核态的Linux SCSI Target(一般称为LinuxIO,缩写为LIO)加入了iSCSI Target的支持。
作为一种纯软件的解决方案,iSCSI具有非常低的成本,它不需要改动已有的系统,包括硬件及软件,同时对iSCSI存储网络的管理实际上就是对于IP/以太网络的管理。当然,在需求性能的情况下,iSCSI也可以使用硬件实现方案或者硬件加速方案。
iSER
iSER(iSCSI Extensions for RDMA)是iSCSI协议的进化,它利用了RDMA(Remote Direct Memory Access,远程内存直接访问)的优势提升iSCSI协议的性能,它也是大道云行FASS全闪软件定义存储内置支持的块存储协议之一。
iSER可以高效地将iSCSI命令转换为RDMA事务,而RDMA具有三个广为人知的优势:
#01:Zero copy/零复制,使用传统网络协议栈需要进行多次数据复制,而使用RDMA,数据可以直接发送到网卡,或者从网卡直接接收,降低内存带宽占用。
#02:Kernel bypass/内核旁路,传统的内核态网络协议栈需要进行多次切换进出操作系统内核,带来大量上下文切换开销,RDMA可以在用户态进行数据传输,开销大为降低。
#03:No CPU involvement/无CPU参与,硬件实现网络传输堆栈,除了不需要软件实现占用CPU周期之外,还避免了对CPU内部Cache的争用。
因此,与iSCSI相比,iSER可以达到很高的性能同时具有很低的延迟,实际上iSER可以认为是一种硬件方案,它需要支持RDMA的以太网卡:iWARP或者RoCE,其中iWARP基于TCP/IP协议,而RoCE基于UDP/IP协议,由于四层传输协议TCP和UDP的不同,使用两种不同方案的iSER客户端和服务器端无法协同工作。
此外,对于iSER RoCE而言,它还具有RoCE网络带来的额外要求:无损以太网络,包括PFC、ECN在内的特性以及相应的管理能力。相对而言,iSER iWARP只需要对应的网卡就可以简单运行在所有的标准以太网络上。
Linux Kernel 3.10版本在内核态Linux SCSI Target中加入iSER Target的支持。
NVMe over TCP
NVMe over TCP(缩写为NVMe/TCP)是大道云行FASS软件1.5.0版本加入的新协议,它是NVMe over Fabrics(缩写为NVMe-oF)众多实现方案之一。与iSCSI有些类似,它将NVMe-oF能力扩展到TCP协议栈上,同样其也是一种纯软件的方案。与iSCSI很不一样的是,它基于全新NVMe架构,而iSCSI基于强大但古老的SCSI架构,它们具有显著的差别:
区别点
在硬件规范上,NVMe设备可以支持最多64k(65,535)个硬件队列对(每对队列包括发送队列和完成队列),每个队列对深度可以达到最大64k(65,535)。相对地,SCSI终端设备的队列数量为1,队列深度为256,SCSI发起端的规格因人而异,一般为单个队列,深度为1k(1000)左右,多队列的硬件实现极少。
在软件上,NVMe原生协议栈设计为每一个硬件队列对映射到一个CPU核心,不同的队列之间没有锁,不需要同步。SCSI协议实现因操作系统而异,但一般地,较早期的SCSI协议仅具备一个软件队列,并且在这个队列上具有一个大锁,这限制了SCSI协议的性能。
NVMe/TCP和iSCSI分别继承了这两者的优点和缺点
在NVMe/TCP中,每一个硬件队列对都被映射到一个TCP流上,并(尽力)分配到一个独立的CPU核心上,运用多核心处理器增强了总体性能,而较早期的iSCSI一般采用的是单进程、单TCP流的设计,只能运用一个CPU核心——直到Linux Kernel 3.17之前。
NVMe/TCP于2018年出现,Linux Kernel 5.0版本(以及Kernel 4.21版本)对NVMe/TCP进行了支持。大道云行FASS全闪软件定义存储使用了独特的用户态高性能NVMe/TCP Target。
值得一提的是,Linux Kernel进化对NVMe/NVMe-oF/SCSI/iSCSI的性能提升:
Linux Kernel 3.13中引入了blk-mq(Linux Multi-Queue Block IO Queueing Mechanism),Linux块存储从此真正进入了多队列时代,NVMe架构也因此获益,但SCSI架构还得继续等待。
Linux Kernel 3.17中引入了scsi-mq(多队列的SCSI层),其实它被设计为也可以支持老的blk-sq(单队列的块设备层),但需要使用blk-mq才能实现多队列,直到此时,iSCSI/SCSI才得到一个显著的提升。
Linux Kernel 5.0中blk-mq变成默认选项,这一点对现实的影响可能非常显著,因为在此之前,用户需要进行设置才能够发挥设备的最佳性能。
NVMe over RDMA
于2011年发布1.0版本的NVMe(Non-Volatile Memory Express)本来是一种专为高速直联闪存存储设计的协议,如前面所述,可以支持64k的队列数量和64k的队列深度,在2016年推出的NVMe-oF规范将NVMe扩展为一种存储网络,最开始为RDMA传输协议设计,后来加入了FC(Fibre Channel)协议。
NVMe over RDMA(可以缩写为NVMe/RDMA,但一般使用NVMe-oF术语时默认的就是NVMe/RDMA)将高性能的NVMe架构与高性能的RDMA相结合,得到的是一种极高性能的存储网络。
NVMe/RDMA与NVMe/TCP的关系就类似于iSER与iSCSI的关系,NVMe/RDMA与iSER类似,属于一种硬件方案,特别的一点是,NVMe/RDMA还包括了对InfiniBand的支持(InfiniBand上运行的SCSI称为SRP)。NVMe/RDMA的运用条件与iSER也比较类似:需要支持RDMA的网卡.
同时,对于NVMe/InfiniBand和NVMe/RoCE而言,还需要支持InfiniBand的网络,或者具备PFC和ECN的无损以太网络,而NVMe/iWARP只需要普通的以太网络就可以运行。
Linux Kernel 4.8版本对NVMe-oF提供了支持,大道云行FASS全闪软件定义存储使用了独特的用户态高性能NVMe/RDMA Target,具有零复制和内核旁路的特点。
总结
iSCSI、iSER、NVMe/TCP、NVMe/RDMA,它们分属SCSI和NVMe两种体系架构,并各自提供了纯软件或者基于RDMA硬件的设计。
在使用RDMA硬件加速的情况下,iSER和NVMe/RDMA都能提供很高的性能,而纯软件的方案iSCSI和NVMe/TCP其性能相对硬件版本略低但无须付出任何硬件成本。
SCSI架构(iSCSI/iSER),与NVMe架构(NVMe-oF,包括TCP和RDMA)对比,NVMe架构具有着根本性的优势:每一个IO所需要的指令数量以及上下文切换数量都更低,不管是对客户端和服务器端都更为高效,从而会具有更优异的性能表现,但iSCSI独有的一个好处是可以支持较老的操作系统内核,用户不需要任何修改即可使用。
大道云行FASS全闪软件定义存储同时提供了上述四种块存储协议的支持,可以给用户提供非常灵活的性能/成本选项。
以上是关于iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA的主要内容,如果未能解决你的问题,请参考以下文章
iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA