前言
随着互联网的不断发展,数据的规模爆发式增长,根据《2021-2025年中国大数据行业竞争分析及发展前景预测报告》研究表明,中国数据增量年均增速超过 30%,2018年中国新增数据量为 7.6 ZB,成为世界第一数据生产国。预计2025年将达到 48.6 ZB。
为了满足日益增长的存储需求,数据存储技术从介质、架构、协议、模式方面都存在巨大转变。由原本的机械硬盘存储、易失型内存演变为了全闪存储、非易失性内存。架构从集中式存储演变为了软件定义存储、超融合架构。协议从 AHCI、SCSI 协议演变为了 NVMe 协议。
NVMe 和 NVMe Over Fabric 的出现,打破了传统SCSI协议对性能的限制,多队列模型能更好的发挥高性能存储介质的性能。在如今的存储网络当中,NVMe 及 NVME Over Fabric 已经成为高性能存储架构的标杆。
RDMA
为了解决数据中心内爆炸式增长的数据存储和读取效率问题、应用业务对延迟的要求日益增高,对数据中心网络的要求是:更低的时延、更高的带宽。为了解决此问题,RDMA(Remote Direct Memory Access) 技术应运而生。 在传统的TCP/IP 中,从网卡收到数据包,到应用层接收,需要经过网卡ring buffer ——>内核空间——>用户空间,带来大量CPU、内存的开销,且增加了时延。RDMA 技术可以实现 kernel bypass,在网卡当中就完成数据包的解析,直接将数据包传输至应用层,不需要额外的 CPU 开销,降低了时延。
因为包的解析都下沉到了网卡中,所以 RDMA 特性需要网卡的支持。
目前RDMA主流实现方式有以下三种
- Infiniband
- RoCE (基于 UDP )
- iWRAP (基于 TCP )
RDMA 起初只是在 InfiniBand 上实现,由于 Infiniband 在设计之初从硬件层面保证了数据包不丢,所以 RDMA 重传机制设计的非常简单:go-back-N 重传。简单来说就是当有一个数据包丢失时,后续所有的数据包都需要重传。
相对来说,在 TCP 协议上则只需要将丢失的包重传即可,所以在 RDMA 网络当中丢包,对传输性能有非常大的影响。 Infiniband 天然就保证了不丢包,iWRAP 以及 RoCE 是基于以太网实现的,而以太网是一个尽力而为的网络,iWRAP 使用了 TCP 协议保证无丢包,相对来说时延会略高。而 RoCE(v2) 则使用了 UDP,延迟会比较低,但是对于网络有更高的要求,需要底层网络来保证无损。
在Mellanox官网的测试结果当中,RoCE的时延基本只有iWRAP的1/5。
RoCE的实现
无损网络
在上文的介绍中,明确了 RDMA 如果产生丢包,对性能会有很大的影响。那么如何做到以太网中没有丢包?第一个能想到的就是将所有交换机当中的buffer都加大。假如buffer够大,碰到速率不匹配时,会将包先放在缓存中。 但是包放在缓存中会导致时延上升,缓存过大会导致时延很高,本身使用RDMA主要就是为了保证低时延,只能采用小buffer。在这种前提下,能够实现无损网络的方式为PFC以及ECN。
- PFC
PFC 全称 Priority-based Flow Control 。顾名思议,它是 Flow Control的升级版本。Flow Control是基于端口做的检测,当网络出现拥塞时,会将整个端口的流量都停止掉,也就是说可能会由于一些不重要的数据流,影响到非常重要的数据流。这显然不是我们想看到的结果。
PFC会将网络流量分为8个优先级,可以针对不同的优先级设置流控的策略。在队列中的 buffer 消耗达到水位线时,会通过发送 Pause 帧通知上游设备暂停发包,防止缓存溢出丢包。如下图,队列7的 buffer 使用达到水位线,则本端交换机会向上游交换机发送 Pause 帧,同时不影响其它队列的正常发送。
ECN
ECN:Explicit Congestion Notification ,为显示拥塞通知。ECN 是报文在网络设备传输过程中,发生拥塞并触发 ECN 水位线时,会使用IP报文头的ECN 字段标记数据包,表明该报文遇到网络拥塞。当接收端接收到带 ECN 的报文时,则会马上向源端发送一个 CNP 报文。CNP 消息里包含了导致拥塞的 Flow 信息。源端服务器收到后,通过降低相应流发送速率,缓解网络设备拥塞,从而避免发生丢包。
- CNP报文在传输回源端时,也有可能发生拥塞,导致源端收到的不及时。所以可以让CNP报文走单独的PFC队列,保证优先转发
ECN 不是必须配置的(但是建议配置),ECN能够进一步减缓拥塞。从充分发挥网络高性能转发的角度,我们需要通过调整 ECN 和 PFC 的 buffer 水位线,让 ECN 快于 PFC 触发,即网络还是持续全速进行数据转发,让服务器主动降低发包速率。如果还不能解决问题,再通过 PFC 让上游交换机暂停报文发送,虽然整网吞吐性能降低,但是不会产生丢包。 交换机
想实现无损网络就得让网络设备支持 PFC/ECN 功能。当然,并不是所有的交换机都支持这些功能。目前各大产商都有支持此功能(DCB)的交换机。
无损网络配置完成后,可以制造一些拥塞场景进行测试,比如使用 RDMA 二打一流量进行测试,假如性能损失严重,则说明无损网络配置存在问题。部分交换机也可以在命令行提供丢包信息查看。
NVMe-oF
NVMe是一个逻辑设备接口规范,与 SCSI 和 SATA 协议相比,NVMe 标准将访问时间缩短了几个数量级。
NVMe Over Fabric (简称NVMe-oF)基于 NVMe 技术发展而来。NVMe 适用于服务器内部或直接连接存储设备。NVMe-oF使用基于消息的模型通过网络在主机和目标存储设备之间发送请求和响应,简单来说,NVMe-oF 可以将存储设备通过网络传输到另一个节点。
相比之前存在的iSCSI、FC存储协议,NVMe-oF 在性能、时延、并行度、可扩展性上都存在巨大优势 。
NVMe-oF 可以在 TCP/RDMA 上实现,基于 RDMA 的实现中,由于RDMA 低延迟、低抖动和低 CPU 使用率的特性,性能和时延表现都会会优于基于 TCP 的实现。综上所述,NVMe over RDMA 总体会更好一些。
落地实现及实际性能
了解了RoCE的实现方式以及 NVMe-oF 这款基于 RDMA 的应用后,就可以开始进行测试了!
首先构建一个简单的环境测试一下基于 RoCE 环境的 NVMe-oF 的性能,搭建了一个环境如下图所示。两台服务器各使用一张支持 RDMA 的100GB网卡,连接至支持 DCB 功能的交换机,存储节点插10块 P4610 NVMe SSD(确保存储节点性能足够优秀)。
对环境进行简单的配置以支持RDMA
- 在服务器上开启 ECN 功能、 PFC 队列。并设置流量的 TOS 值( TOS 值是IP 报头的一个字段,为了区分流量是进入哪个PFC队列)。基于当前环境,只需要一个队列。
- 在交换机上配置 ECN 功能、PFC 功能。参数需要与服务器侧适配。对于水位线配置可先采取各产商建议值。
配置完无损网络后,需要配置 NVMe-oF 协议,将存储节点的盘输送到计算节点上,配置完成后,使用 FIO 工具,对输送上来的块设备性能进行测试。
基于此环境,性能如下
由于是 100GB 的网卡,吞吐理论最佳在 12GB 左右,可以看到顺序读写的吞吐已经接近极限值。随机读写也达到了 100w 左右,并且延迟也处于较低的水平。 由于性能基本已经达到网卡的极限,现在采用scale-out方式再新增几个节点。 将架构改成2台应用节点,3台存储节点,为每台节点插上两块100GB RDMA网卡。 同时优化PFC配置,让ECN回复的CNP报文单独走到一个队列,并使用严格优先级保证最优先转发。
基于此环境,测试性能结果如下可以看到远端应用节点性能也已经达到了网卡的极限值,基于目前的测试,在传输的过程当中,性能基本没有损耗。
那么与InfiniBand性能对比测试结果如何呢?
基于当前环境进行一个对比测试通过测试发现,RoCE的性能略低于IB。
测试完了FIO,基于数据库表现对RoCE与InfiniBand做一个简单的对比测试。基于上述环境搭建Oracle RAC,全部用HammerDB对数据库进行压测。
基于当前环境,测试RoCE与InfiniBand环境下数据库性能,结果为RoCE与InfiniBand性能持平。
总体来说,NVMe-oF 架构下IB 略优于 RoCE ,数据库场景下 IB 与 RoCE 持平。
选择
从配置上说,InfiniBand 的使用较为简单,RoCE 的使用方式较难,但成本相对较低。并且由于 RoCE 是基于以太网的,在对外以及和传统网络的兼容性上有极大的优势。具体的选择还需要根据业务场景。
总结
本文简单的描述了基于以太网 RDMA 的实现方式,并使用 FIO 工具对NVMe-oF 进行了简单的测试,横向对比了 Infiniband 性能。通过实验,对NVMe-oF 以及 RDMA 的性能有了一些了解,相比传统存储架构,NVMe-oF 性能有了极大的提升。在底层存储性能越来越高的情况下,NVMe-oF 或许是越来越不可或缺的一环。RoCE 是目前大环境下一个不错的选择。
参考资料
六年间全球数据总量爆发式增长 中国数据增量年均增速超过30%:
https://www.chinairn.com/hyzx/20210527/100320817.shtml
下一代数据存储技术研究报告(2021年)
浅析RDMA网络下MMU水线设置 浅析RDMA网络下MMU水线设置:
https://www.ruijie.com.cn/fa/xw-hlw/61714/
详解:什么是NVMe over Fabrics?:
https://3d83611d.wiz06.com/wapp/pages/view/share/s/0ZwS4t1uXQPY2SmgZY2xRrOB3ZDb9q1AZkkG2KdeoX1lWHX8