RoCE笔记

摘要版

什么是无损(lossless)网络

是RDMA的基础。核心:零丢包、低时延、高吞吐(低延迟和高吞吐之间有些冲突)。有的工业用网络也有零丢包的特点,但不适用于海量算力/数据要求。在技术层面,特指没有因拥塞而丢包的情况的网络。比如5000个交换机同时给一个交换机发数据,不会丢包。

InfiniBand 和 RoCE 的关联和区别

时下比较常用的网络方案是 InfiniBand (下简称IB)方案和 RoCEv2 方案。这两个是并列的。

IB 使用了私有的协议栈、专用硬件,逐跳的严格流控机制,很容易的实现了二层 无损网络,这使得IB的第四层设计可以非常简单高效。但是一个专有的产品,技术较为封闭,成本高。

RoCE全称为 RDMA over Converged Ethernet,是能在 Ethernet 上进行 RDMA 的集群网络通信协议。而原本的以太网没有 IB 那样的无损技术。所以在此讨论 RoCE 更多的是研究无损网络,即,怎么把现在大规模的 Ethernet 改造成无损网络。

RoCE 和 IB 在上层(即对接 RDMA 的 API 部分)方面是一模一样的,只是在下面的内存地址稍有不同。

发明这个东西的全部目的就是想让 RDMA 运行在一个类似 IB 的网络上,为此做了很多努力。结果是性能稍差,而价格实在美丽(无需在数据中心部署 Ethernet 和 IB 两套网络),可以使用普通的以太网交换机,但是需要支持RoCE的网卡。

RDMA & RoCE 概念

RDMA 是 IB 协议的一部分。 它在 IB 中的位置类似 TCP/IP 在传统网络协议栈的位置。

Mellanox 提供的产品就是将 RDMA 协议栈offload到硬件之中,降低了 CPU 占用率。

TCP/IP socket 的发送接收过程是我们耳熟能详的。而RDMA通过设计了WR,WE,WEQ,SQ,RQ等基本元素,辅以能支持从不连续物理内存中读取数据的网卡,实现了zero-copy与内核旁路。

RDMA Verbs API

  • RDMA send/recv
  • RDMA write/read
    • client 怎么知道 server 的内存信息?——同步
    • 操作完成后还需一次同步
    • 这个同步需要应用程序来处理

RoCE 的起源:超算应用IB很多,性能也好。但现有数据中心部署的还是 Ethernet 。那么把 RDMA 部署到 Ethernet 上,就是 RoCE 了。—— Ethernet 的基础设施+ RDMA 的能力

两代 RoCE 的报文格式

  • RoCE v1
    • 协议层:基于以太网链路层(L2),使用以太类型(EtherType)0x8915 标识,直接封装InfiniBand传输层报文。
    • 报文结构:以太网帧头 + InfiniBand网络层(Global Routing Header, GRH) + 数据负载。无IP头部,仅支持二层网络通信,无法跨子网路由。
    • 适用场景:同一广播域内的低延迟通信
  • RoCE v2
    • 协议层:基于UDP/IP协议栈(L3/L4),使用UDP目的端口4791,支持IPv4/IPv6。
    • 报文结构:以太网帧头 + IP头部(IPv4/IPv6) + UDP头部 + InfiniBand基本传输头(BTH) + 数据负载。通过IP路由能力实现跨子网通信。
    • 关键改进
      • 可路由性:支持三层网络,扩展了应用范围(如数据中心跨机架通信) 
      • QoS支持:利用IP头的DSCP字段进行流量优先级标记,结合ECN(显式拥塞通知)实现拥塞控制。
    • 可以使用普通的以太网交换机,但是需要支持RoCE的网卡。

RoCEv2物理网络设施

  • RoCE 网卡、RoCE 交换机、连接件(传统以太网的光纤和光模块都可以用)、RoCEv2流控机制

流控/拥塞控制机制

(流控和拥塞控制在用词上有些区别:流控是端口间,拥塞是全局。)

下一个重要的问题是怎么让现有 Ethernet 提供无损网络的服务。因为如果底层不是无损网络,RDMA没有意义。

  1. ECN(Explicit Congestion Notification)显式拥塞通知
    • 学过《计算机网络》的都知道,这是 IP 协议中古老的东西:
    • 一旦某个交换机觉得自己快要拥塞时,就把接下来经它手的数据包的某个bit打上ECN标记。但仍旧正常传送,不产生丢弃。等到收方收到了数据包,再回发给发方时,这时发方真正得知路径上有拥塞情况,需要减慢发送速度。
  2. PFC(Priority-based Flow Control)
    • 在没有DCQCN时,使用的就是PFC
    • 通过让直接上游暂停发送数据 来避免交换机buffer溢出
    • 直接告诉上游(交换机 或 网卡)端口,立即暂停发送任何数据!非常的粗暴。
    • PFC是交换机端口级别的,不区分具体的流(flow,即连接),一旦暂停就会暂停端口上所有的连接。这种粒度显然太粗了,会导致拥塞扩散,进而导显著的致性能下降。虽然PFC可以区分交换机队列(交换机的每个端口有8个队列),但也于事无补,因为不可能给每个链接都是用一个单独的队列。

显然需要一个flow级别的拥塞控制算法。

  1. DCQCN 算法(数据中心量化拥塞通知)—— 是 ECN 和 PFC 的组合
    • 这是一个为RoCE v2量身打造、可以推动RDMA应用于数据中心的算法
      • 有效的打造无损网络
      • 足够简单能实现在网卡上(而非OS)
    • 端到端的拥塞控制算法(回忆什么是点到点)
    • 论文pdf(2015)

DCQCN的具体做法

  • DCQCN中有三个角色,分别是:
    • RP(reaction point): 即发送方网卡
    • CP(congestion point): 即交换机
    • NP(notification point): 即接收方网卡
  • 后两个的行为与之前ECN描述的差不多。重头戏在RP身上:分为降速过程,升速过程,更新alpha三个部分。

阅读更多

推荐视频(b站,从易到难):
BV1q7411A77W 给宝宝看的,一句话总结:RoCE就是将RDMA的特点用于以太网。
BV1WokRYrEZw 短,说了RDMA、IB、RoCE的关系:RDMA是抽象的技术,要想落地,得靠软硬件实现,软件就是RDMA verbs(一种替代tcp/ip的协议规范),在硬件部分,就出现了两种协议,分别是IB和RoCE。
BV18Y4y1z72L 圆桌会,更偏向对于RoCE行业难点、未来趋势的个人理解
BV1GPaseFEwD 英伟达网络技术公开课,技术多点

推荐文章:
RDMA拥塞控制经典论文DCQCN – 知乎