前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >局域网SDN硬核技术内幕 25 展望未来——RDMA(下)

局域网SDN硬核技术内幕 25 展望未来——RDMA(下)

作者头像
用户8289326
发布2022-07-27 10:32:58
8710
发布2022-07-27 10:32:58
举报
文章被收录于专栏:帅云霓的技术小屋

先回顾一下昨天与前天的内容。

海量的数据存储需求与以AI/大数据为代表的计算需求,推动多核、多处理器、服务器集群的普及,使得大规模的分布式计算与存储业务迅速增长。为了避免跨节点通信的时延及CPU占用成为大规模分布式计算与存储的性能瓶颈,工程师们发明了RDMA技术。

RDMA技术一开始只能在InfiniBand(IB)网络上运行,为了降低RDMA技术的CAPEX和OPEX,从而节约TCO,工程师们将RDMA技术移植到了以太网上,叫做RoCE。RoCE v2是基于UDP的,理论上可以穿越路由器或三层交换机互联互通。

那么,是所有的以太网产品都能支持RoCE吗?

让我们来对比RDMA和TCP的重传机制。

众所周知,TCP的设计,是假设IP和链路层不可避免丢失数据包的,并将丢包作为降低发送速率的负反馈机制,并且,引入SACK等复杂的机制,实现丢包的重传。而RDMA并非如此。

RDMA在丢包时,会通过一种成为go-back-0的机制进行重传。这种机制的实现正如其字面意思那样,一旦发生丢包,会从头开始传输该次会话的数据。显然,这种极端的重传机制下,网络发生极微小的丢包也会大大降低RDMA的工作性能,甚至使得吞吐性能接近于0。

举一个极端的例子:主机A通过RDMA读取主机B上的内存,数据块大小为16MB,中间以太网的丢包率为1/4000,也就是千分之0.25。

在这种情况下,两台主机的传输速率几乎为0。这是为什么呢?

16MB的数据,会被拆分为16384个数据包发送。只有每个数据包都被对方成功接收,16MB数据才算发送成功。如果每个数据包的丢包概率为0.025%,总的发送成功概率是(1-0.025%) ^ 16384 = 0.0166。

打开系统内核底层的诊断信息,我们可以看到,网卡一直在发送,但它就像西西弗斯徒劳地推石头一样,并没有任何实质进展。

因此,我们需要避免以太网的丢包。

网络的丢包一般有三个原因:

  1. 物理层传输误码。在现代基于光纤的短距以太网中,此种情况已经几乎可以忽略了。
  2. 转发设备性能不足。但基于ASIC的以太网交换机均具备无阻塞的交换网络(Switch Fabric)和线速转发能力的包处理流水线,硬件处理性能不是问题。
  3. 拥塞丢包。如果2个万兆接口线速输入的数据包,都只从1个万兆接口输出,必然造成50%的数据包无法输出而被丢失。

显而易见地,以太网交换网络中,几乎所有的丢包,属于第三种情况。

那么,我们如何避免以太网交换网络产生丢包呢?

我们知道,在以太网交换机ASIC的内部,有着一个区域,叫packet buffer (包缓存),不同款型从1.5MB到64MB不等。对于没有超出缓存临时存储能力的拥塞数据包,可以通过流量整形等方式,利用缓存临时存储,再均匀地发送给下游。但如果上游持续发送超出出方向接口能力的数据流,再大的缓存都无法避免丢包。

因此,我们需要在以太网交换机上引入一种机制,在缓存即将消耗殆尽时,通知上游减慢发送,从而避免丢包的产生。

这种机制,叫做无损以太网。

无损以太网需要实现三个特性:

首先,是PFC(Priority-Based Flow Control),基于优先级的流控。它在802.1qbb中定义。

大家复习一下802.1p中,以太网的3bit优先级字段。它为以太网定义了8个优先级。同样,在数据中心级别以太网交换机中,每个端口具有8个队列,如下图所示:

这种机制可以为不同类型的数据流分配不同的缓存资源,为不同优先级的队列设定不同的拥塞门限。当拥塞发生,指定队列的缓存使用量到达门限,交换机的ASIC会通过Pause帧通知上一跳设备暂停发送本优先级报文,从而延缓拥塞的恶化。

但是,上一跳设备暂停发送特定优先级报文,会导致该设备为了缓存该优先级报文,加快消耗自身的包缓存资源。因此,为了彻底解决拥塞问题,我们还需要配合另一个特性:ECN。

ECN(Explicit Congestion Notification)实现的是明确的拥塞通知。当交换机发现端口出现拥塞,该端口的缓存队列增长超过门限值时,会在向下游发送的数据包中打上拥塞标记。在RFC 3168的规约中,这个标记是利用IP数据包中的ECN Field字段实现的。

我们发现了什么?

  1. RoCE v1由于并非IP数据包,它是不可能实现ECN的!
  2. 接受报文的主机查看ECN Field字段以后如何通知发送报文的主机呢?

问题2引出了第三个关键特性——RCM。

我们知道,传统TCP的流控机制是基于丢包的。当网络传输不过来的时候,或接收方主机处理不过来的时候,会产生TCP数据包丢失。发送端发现TCP丢包的时候,会将发送窗口减半,从而降低发送速率。

但,这种机制在RDMA中是行不通的。

因此,我们引入了RCM(RoCEv2 Congestion Management)机制,在收到ECN Field为3的数据包时,会通过CNP(Congestion Notification Packet)通知发送端。发送端收到此数据包时,暂时降低发送速率。经过一个预先设定的时间窗后再恢复发送速率。

有了PFC,ECN以及RCM,RoCE就可以愉快地工作了!——吗?

然而,现实总是不如想象的美好——

网友见面时发现小姐姐实际上是乔碧萝的时候,还有立即跑路的选择。但RoCE网络并没有像预想中那样零丢包的时候,我们应该如何迅速排查故障呢?

请看下回分解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档