超大规模下的以太网RDMA的局限与展望
RDMA · 231 字
https://mp.weixin.qq.com/s/DOdUcmcA7dft2sZkBgTWoQ
RoCE的不足
RoCE(RDMA over converged Ethernet)就是允许通过以太网网络实现RDMA功能的技术,它同时具备RDMA的高效和以太网的生态优势,其诸多特性在多种计算场景中发挥了巨大作用。
PFC 需要大量缓冲来实现无损传输
PFC即优先流控制,接收方通过监控缓冲区空间,一旦缓冲空间低于与带宽-延迟乘积(BDP = BW*RTT)相关的某个阈值,向发送端发送一个PAUSE帧。
覆盖PAUSE消息传输延迟所需的BDP缓冲空间通常被称为“余裕缓冲”(headroom buffer),类似于用于信用机制流量控制的缓冲空间,如InfiniBand或Fibre Channel中使用的流量控制机制。 同时,这部分“余裕缓冲”,在不冒丢包风险的情况下无法用于其他用途。
受害流、拥塞树、PFC风暴和死锁
PFC 会暂停整个流量类别以及其中的所有流量。这会导致受害流的出现。即,未发生拥塞的流可能会受到其他拥塞流的影响。这种现象也被称为队首阻塞(Head of Line Blocking)。
由于下游端口的任何拥塞都会填满上游的缓冲区,除非端点拥塞控制协议做出反应,PFC 事件可以快速形成一个“拥塞树”,这种拥塞树会顺着受害流在网络中反向扩展。拥塞树是无损网络中的常见问题,有时也被称为 PFC 风暴。
Go-back-N 重传
RoCE的重传逻辑要求所有数据包必须按顺序到达数据流中,这一位置某一数据包丢失时,会要求重传其以及之后的所有数据包。这即是Go-back-N 重传方案。
拥塞控制与其他流量的共存
目前不支持智能协议栈
系统层面的问题
高延迟会导致缓冲区占用增加、能耗上升,并使拥塞控制效率降低。特别是对于那些传输速度超过单个往返时间(RTT)的消息,依赖接收端反馈的拥塞控制机制变得无效,导致小消息引发的不良 incast 问题变得更加严重或频繁。
此外,RDMA固有的语义复杂性和安全性问题也应引起关注。暴露进程本地的虚拟地址会引发安全隐患。
RoCE改进建议
- 改进流控机制,针对PFC机制。可以改用更细粒度的控制方法,如基于流的拥塞控制、动态调整优先级等
- 拥塞管理与路由改进,针对拥塞树和PFC风暴。
- 增强重传机制,针对Go-back-N。可以采用选择性重传或者支持乱序传输的机制。
技术分享:如何设计一个高性能的RDMA系统
https://www.bigmath.com/article_64d3545dec02330b0a7d0307.html
RDMA高效的核心原理
- 零拷贝技术:直接访问远端已经注册好的内存区域,避免了传统Socket技术多次在内存中拷贝数据的问题;
- 内核旁路:IO流程绕过内存,程序不用陷入内核态,避免了系统调用和上下文切换的开销;
- CPU卸载:在远端节点CPU不参与通信的情况下读写内存。
通用性RDMA设计策略
减少CPU的MIMO次数
CPU通过MMIO向NIC发送消息来启动网络操作(这个过程即是Doorbell机制)。这个消息可以是(1)包含新的工作任务(WQE)或者是(2)通过使用最后一个WQE的地址之类的信息来得到新的WQE信息。
- Doorbell批处理:针对一个程序向一个QP发布多个WQE,可以使用一个Doorbell MIMO来进行处理,但NIC需要付出一个或多个DMA读取相应的WQE。
- WQE收缩:对于使用64字节的MIMO写组合传输WQE时,尽量使WQE信息是64的倍数。
减少NIC的DMA次数
一个CPU core启用多个NIC处理单元(PU)
利用NIC的并行性进行高性能设计。当应用程序处理逻辑简单的事务或者消息处理时间很短的情况下,性能更强的CPU core压倒功能较弱的PU时,CPU的性能被PU的性能限制,造成CPU性能的浪费。在这种情况下,每个CPU核可以使用多个QP来提高CPU效率,这个优化被成为多队列优化。