共计 3037 个字符,预计需要花费 8 分钟才能阅读完成。
魏国武 QingStor 资深研发工程师
近 10 年企业级软件开发教训,专一于大规模分布式存储研发,善于集群性能调优、高可用钻研及容灾。
为什么须要 RDMA
当今是云计算、大数据的时代,企业业务持续增长须要存储系统的 IO 性能也持续增长。传统的 TCP/IP 技术在数据包处理过程中,要通过操作系统及其他软件层,数据在零碎内存、处理器缓存和网络控制器缓存之间来回进行复制,给服务器的 CPU 和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的重大 ” 不匹配性 ”,更加剧了网络提早效应。为了升高数据中心外部网络提早,进步带宽,RDMA 技术应运而生。RDMA 容许用户态的应用程序间接读取和写入近程内存,防止了数据拷贝和上下文切换;并将网络协议栈从软件实现 offload 到网卡硬件,实现了高吞吐量、超低时延和低 CPU 开销的成果。
以后 RDMA 在以太网上的传输协定是 RoCEv2,RoCEv2 是基于无连贯协定的 UDP 协定,相比面向连贯的 TCP 协定,UDP 协定更加疾速、占用 CPU 资源更少,但其传输是不牢靠的,一旦呈现丢包会导致 RDMA 的传输效率升高,这是由 RDMA 的 Go-back-N 重传机制决定的。RDMA 接管方网卡发现丢包时,会抛弃后续接管到的数据包,发送方须要重发之后的所有数据包,这导致性能大幅降落。所以要想 RDMA 施展出其性能,须要为其搭建一套不丢包的无损网络环境。
差异化流量分类
构建无损网络,首先须要对网络流量进行分类,而后针对不同类别流量采纳具体流控策略,实现准确管制,防止相互影响。流量分类有两种不同的分类办法:传输层(Layer 2)和网络层(Layer 3)。Layer2 通过 vlan header(802.1q)里的 PCP(802.1p)位进行分类,对应 CoS(Class of Service);Layer3 通过 IP header 里的 DSCP 进行分类,对应 DSCP。
Layer 2 流量分类
Layer2 层流量分类根据的是 vlan tag 中的 3 位 PCP bit,总共有 8 个类别。3 个 bit 是 Header 中第 3 个 byte 的前三位,如下图。在应用 Layer 2 流量分类时,主机端收回的包须要带有 vlan tag。因而要对网卡配置 vlan,并且设置优先级。因为 L2 层 PFC 须要依附 vlan,因而包通过三层交换机时可能存在 tag 生效等问题。
图 -1
Layer 3 流量分类
Layer3 应用 IP 包头中的 TOS 前 6 位(DSCP),反对 64 种不同的流量分类形式,TOS 的后两位用作 Explicit Congestion Notification(ECN)Field,ECN 是一种端到端的流控形式,前面会有介绍。
图 -2
抉择 Layer2 还是 Layer3 层流控
在交换机反对 DSCP 的条件下,倡议应用 L3 层的流控形式。从后面的介绍能够看到,L3 层的管制形式可跨多层交换机,DSCP 值在端到端的传输过程中不会发生变化。RoCE 应用 UDP 报文进行数据传输,倡议 RoCE 的流控应用基于 DSCP 的形式。
构建无损网络
基于 DSCP 或 PCP 的 PFC 流控机制
IEEE 802.1Qbb(Priority-based Flow Control,基于优先级的流量管制)简称 PFC,是 IEEE 数据中心桥接(Data Center Bridge)协定族中的一个技术,是流量管制的增强版。
咱们先看一下 IEEE 802.3X(Flow Control)流控的机制:当接收者没有能力解决接管到的报文时,为了避免报文被抛弃,接收者须要告诉报文的发送者临时进行发送。IEEE 802.3X 协定存在一个毛病:一旦链路被暂停,发送方就不能再发送任何数据包,如果是因为某些优先级较低的数据流引发的暂停,后果却让该链路上其余更高优先级的数据流也一起被暂停了,这是得失相当的。
PFC 在根底流控 IEEE 802.3X 根底上进行扩大,容许在一条以太网链路上创立 8 个虚构通道,并为每条虚构通道指定相应优先级,容许独自暂停和重启其中任意一条虚构通道,同时容许其它虚构通道的流量无中断通过。PFC 将流控的粒度从物理端口细化到 8 个虚构通道,别离对应 Smart NIC 硬件上的 8 个硬件发送队列,如下图。
图 -3
在二层网络中,PFC 应用 vlan 中的 PCP 位来对数据流进行辨别;在三层网络中,PFC 既能够应用 PCP,也能够应用 DSCP,使得不同数据流能够享受到独立的流控制。当下数据中心因多采纳三层网络,且 DSCP 值在端到端的传输过程中不会发生变化,故举荐应用 DSCP。
RDMA 无损网络中利用 PFC 流控机制,实现了交换机端口缓存溢出前暂停对端流量,阻止了丢包景象产生,但因为须要一级一级反压,效率较低,而且存在不偏心问题和 Head-of-Line 梗塞问题。此外,PFC 是通过上游网络设备对上游设施的管制形式达到不丢包的目标,但最无效的流控应该是管制产生数据的源端主机的发送速度,使得主机往网络中注入数据速度放缓,这是解决问题的基本办法。
基于三层网络的拥塞治理(ECN 与 DCQCN)
DCQCN 是基于交换机和网卡上的 ECN 技术来实现 Rocev2 的一种综合流控技术。使能 ECN(Explicit Congestion Notification 显式拥塞告诉),替换机会在检测到拥塞时对网络数据包打标记,在 IP 数据包头部嵌入一个拥塞指示器,能够告诉客户端升高数据包发送频率,是一种端到端的拥塞治理计划。该性能能够用于 RoCEv2 的拥塞管制。
ECN 应用 IP 头部的两个 bit 来示意,这两个 bit 别离叫做 ECT(ECN-capable Transport)位和 CE(Congestion Experienced)位。这两个 bit 是 IP 头部的 DSCP 域中的第 6/7 位,见图 2。ECN 值为 01 或 10 示意数据发送端使能 ECN;00 示意未应用 ECN;11 示意产生拥塞。
ECN 值 | 含意 |
---|---|
0 | 未应用或不反对 ECN |
1 | 发送端使能 ECN |
10 | 发送端使能 ECN |
11 | 产生拥塞 |
ECN 的交互过程
- 发送端发送的 IP 报文标记反对 ECN(10);
- 交换机在队列拥塞状况下收到该报文,将 ECN 字段批改为 11 并收回,网络中其余交换机透传;
- 接收端收到 ECN 为 11 的报文发现拥塞,失常解决该报文;
- 接收端产生拥塞通告,每 ms 级发送一个 CNP(Congestion Notification Packets)报文,ECN 字段为 01,要求报文不能被网络抛弃。接收端对多个被 ECN 标记为同一个 QP 的数据包发送一个单个 CNP 即可;
- 交换机收到 CNP 报文后失常转发该报文;
- 发送端收到 ECN 标记为 01 的 CNP 报文解析后对相应的流(对应启用 ECN 的 QP)利用速率限度算法。
须要留神的是,CNP 作为拥塞管制报文,从发送端到接收端通过的每一台设施、每一条链路都会有肯定的提早,会最终加大发送端接管到 CNP 的工夫,若发送端不能及时降速,依然可能造成丢包。倡议同时配置 ECN 和 PFC,通过调整两者的 buffer 水线,让 ECN 快于 PFC 触发,使发送端升高发送速率。若 ECN 未及时触发,须要触发 PFC 使上游交换机暂停发包,以防止 buffer 溢出导致丢包。
总结
咱们在三层网络以 DSCP 形式对网络流量分类实现了对 RDMA 流量的准确管制,通过配置 PFC 和 ECN 构建无损网络解决了丢包问题,从而保障了 RDMA 网络高吞吐量、超低时延和低 CPU 开销的落地。
更多文章
存储巨匠班
对象存储手把手教五 | 数据存取与加密
gg: 像写 Golang 一样生成代码
QingStor 招聘存储测试 / 运维 / 研发工程师
本文由博客一文多发平台 OpenWrite 公布!