Flor: An Open High Performance RDMA Framework Over Heterogeneous RNICs——论文泛读

OSDI 2023 Paper 论文阅读笔记整理

问题

数据中心应用程序越来越多地将RDMA应用于超低延迟和低CPU开销。然而,不同供应商或同一供应商的不同代具有RDMA功能的NIC(RNIC)不能很好地合作。

挑战

  • 带宽不平衡:在16个50Gbps CX-4和CX-5 NIC的混合部署中,观察到严重的带宽不平衡,在全网格流量模式下,CX-4 NIC的平均吞吐量降至28Gbps。不同的拥塞控制算法进一步放大带宽不平衡:Mellanox RNIC为具有相同目的IP的数据包设置相同的拥塞控制速率,Intel E810 RNIC基于具有相同五元组的流来实施拥塞控制,Broadcom RNIC[7]实现了DCTCP[2,6]实施拥塞控制,Intel E810 RNIC实现了基于窗口的DCQCN变体[19]。

  • PFC风暴:RDMA需要基于优先级的流控制(PFC)来维持无损网络结构。多样化的设备增加了生成PFC暂停帧的风险,这些帧会传播到整个网络,并导致网络停止转发流量。在新部署的设备上,PFC配置的参数调整非常耗时[25,57],通常需要数周或数月的时间。在生产网络的长期运行过程中,在主机端和交换机上都有多个PFC暂停帧生成源,交换机和RNIC的实现错误是PFC风暴的一个重要根本原因[11,14]。

本文观察发现,尽管异构RNIC的数据路径功能遵循相同的RoCEv2规范,但它们的控制路径功能是特定于供应商和版本的。RDMA数据路径,包括内存语义,需要快速、高性能的数据包处理。相反,拥塞控制算法和可靠的重传机制的控制路径是基于RTT的操作,相对较慢,但需要保证效率。这启发我们将拥塞控制和可靠性模块加载到软件平面来重新思考硬件和软件之间的功能划分,同时通过在高速硬件中遵循标准RoCEv2规范[3-5]来加强数据路径传输。

现有方法局现性

本文方法

本文提出了Flor,一个开放的框架,通过软硬件协同设计将RDMA传输的数据路径和控制路径分离。

  • 数据路径功能,例如数据包处理和大容量存储器传输语义,保留在硬件上。数据路径遵循RDMA原语,无需对硬件进行任何修改即可保持高性能。Flor通过硬件/软件协同设计加强了可靠连接(RC)传输,以克服基于硬件的低效率GoBack-N重传[14]。利用不可靠连接(UC)传输[4]支持数据中心无序需求[42,46],因为它支持RDMA操作之间的无序消息传递,而不需要任何硬件更改。采用不可靠数据报(UD)作为关键元素,以实现RoCEv2的选择性重传[36],并以无序的方式向应用程序传递消息[42]。

  • 控制路径包括负载感知动态分块模块、RDMA语义兼容可靠性模块、拥塞控制模块。负载感知动态分块模块在性能和软件控制粒度之间进行平衡,提出了利用UC处理无序交付的软件选择性重传方案。Flor实现了类似于Swift[26]的基于RTT的拥塞控制算法,在99%和99.9%RTT上将先前工作[28]的RTT测量精度提高了10倍。通过将这些功能加载到主机或可编程设备[40](例如,IPU核心[18]、DPU核心[51]、CPU、GPU[1]),软件开发人员可以灵活地在异构RNIC中定制和推广这些功能。Flor还可以采用新兴的拥塞控制方案[26,30]和传输协议的优化(例如Swift、HPCC),而不是等待数月或数年的硬件升级。

通过Intel E180、Mellanox CX4、CX-5、Broadcom RNIC在测试环境和生产集群中实施并评估了Flor。实验表明,Flor在许多场景中实现了与vanilla RDMA相当的性能,包括1/4096丢包、6000:1 incast、大规模跨pod通信。当CX-4和CX-5 RNIC一起部署时,Flor将它们的性能差距从24.3%缩小到1.3%。

实验

实验环境:

数据集:类似Map Reduce的应用程序、分布式块存储服务

实验对比:吞吐量、CPU利用率、运行时间、延迟、停顿数量

实验参数:RPC大小、跨pod场景、节点数量

总结

针对异构RNIC场景,如何避免异构带来的PFC依赖性、异构RNIC的互连性、硬件绑定的拥塞控制方案。本文提出了Flor,通过软硬件协同设计将RDMA传输的数据路径和控制路径分离。通过软硬件协同设计加强了可靠连接(RC)传输,以克服基于硬件的低效率GoBack-N重传。利用不可靠连接(UC)传输支持无序需求。采用不可靠数据报(UD),实现RoCEv2的选择性重传[36]。负载感知动态分块模块在性能和软件控制粒度之间进行平衡。实现了类似于Swift的基于RTT的拥塞控制算法,将RTT测量精度提高了10倍。还可以采用新兴的拥塞控制方案和传输协议的优化,而不是等待数月或数年的硬件升级。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 16:02:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 16:02:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 16:02:02       87 阅读
  4. Python语言-面向对象

    2024-03-29 16:02:02       96 阅读

热门阅读

  1. 非root用户安装git lfs(git大文件)命令记录

    2024-03-29 16:02:02       42 阅读
  2. PDF按行&页读取文字

    2024-03-29 16:02:02       39 阅读
  3. 算法题1两数之和

    2024-03-29 16:02:02       36 阅读
  4. Windows运维_Windows下配置Apache-Haus(Apache2.4)

    2024-03-29 16:02:02       28 阅读
  5. 如何分配FPGA管脚

    2024-03-29 16:02:02       38 阅读
  6. vue3 绑定form弹窗的方式

    2024-03-29 16:02:02       38 阅读
  7. angular 组件传值交互

    2024-03-29 16:02:02       39 阅读
  8. Python进行DevOps实践

    2024-03-29 16:02:02       41 阅读
  9. Calendar日历类

    2024-03-29 16:02:02       36 阅读
  10. Python教程:一文掌握Python多线程(很详细)

    2024-03-29 16:02:02       33 阅读