RDMA之路由算法介绍 (6)

1、自适应路由算法和非自适应路由算法之间的区别

自适应路由算法 非自适应路由算法
自适应算法涉及用于交换和更新路由器表数据的路由器。 非自适应算法涉及网络管理员手动将路由路径输入路由器。
该算法根据网络条件创建路由表。 而此算法创建一个静态表,以确定何时发送数据包以及哪个节点。
该算法用于动态路由。 而此算法由静态路由使用。
在自适应路由算法中,路由决策是根据网络流量和拓扑结构做出的。 而在非自适应路由算法中,路由决策不是根据网络流量和拓扑做出的。
就复杂性而言,与非自适应路由算法相比,自适应路由算法更为复杂。 而非自适应路由算法在复杂性方面很简单。
在自适应路由算法中,路由决策不是静态表。 而在非自适应路由算法中,路由决策是静态表。
自适应路由算法分为分布式、集中式和隔离式。 而非自适应路由算法分为随机游走和泛洪。
与非自适应路由算法相比,自适应路由算法的使用更多。 而非自适应路由算法的使用相对较少。
动态协议用于更新路由表并确定源计算机和目标计算机之间的最佳路由。 执行手动设置是为了在源计算机和目标计算机之间建立最佳路径。
它主要用于-开放、复杂的网络拓扑 它主要用于-简单、封闭的网络拓扑
目的: 增强网络性能 防止数据包传送失败 帮助控制拥堵 目的: 它可以对数据包路径进行细粒度控制。 适用于负载稳定的可靠网络

2、智算网络中不同负载均衡技术对比

数据中心网络或智算网络的拓扑结构相对规整(如Spine-Leaf架构),所以在选路方面相对简单。但由于数据中心网络的服务器之间往往都存在多条等价并行路径(比如在Fat tree网络中可能存在多达几十条),因此,如何在多条并行路径之间进行负载均衡路由,是数据中心网络路由设计的关键。

传统负载均衡用的比较多的是等价成本多路径(ECMP),ECMP下一跳的路径是通过对数据包字段进行哈希计算并对可用路径数取模来选择的,来自一个流的数据包总是映射到同一路径,因此,这些数据包将按发送顺序交付,也就是通常的基于流的负载均衡(Flow-based)。然而,研究表明,在流量高度倾斜时,ECMP无法平均分配负载到不同的路径,如大象流场景。特别是对于当前HPC和AI场景,普遍使用RDMA并且是大带宽场景,这个时候传统ECMP很容易导致链路Hash不均,进而导致某一个链路拥塞。在AI/ML的应用中,GPU或其他类型的AI/ML计算单元之间他们有着非常简单的通讯关系(流的数量非常少),并且由于他们有着极高的计算能力,导致一对通讯单元间的数据吞吐极高(单个流很大,所需的网络带宽极大),这就导致在这样的应用中存在极端的负载分担不均衡,而且这种不均衡一旦引发网络丢包,就会对整体AI/ML的任务完成时间带来显著的负面影响。

网络中的拥塞整体一般有两种,一种是在端侧的拥塞,常见于多打一的Incast场景,这种情况通常用各种拥塞控制算法来使对应的发送端减速来解决。

另一种是矩阵拥塞,即网络因为Hash不均导致的拥塞。这里重点讨论矩阵拥塞的解决方案。

解决矩阵拥塞主要有以下几种方式:

  • 胖树架构设计:增加汇聚链路带宽,典型的就是采用Fat tree网络架构设计,从输入到输出1:1的收敛比设计;
  • VoQ(Virtual Output Queueing)技术:是一种网络拥塞管理技术,用于防止HoL阻塞的技术,在传统的输入缓冲区排队方案中,数据包先进入输入缓冲区,然后根据目的端口的可用性从中选择出队。然而,当多个数据包的目的端口相同时,输入缓冲区排队会导致阻塞和拥塞。VoQ技术通过为每个输出端口创建虚拟的输出队列,将输入数据包直接放入对应的虚拟输出队列中。这样,在数据包进入路由器或交换机时就可以直接选择适当的虚拟输出队列,而无需等待目的端口的可用性。因此,VoQ技术可以避免输入缓冲区排队可能引起的阻塞和拥塞问题,提高网络的吞吐量和性能;
  • 负载均衡(Load balance),不同的负载均衡路由策略会对端到端的吞吐率造成很大的影响。流量Load balance按照粒度不同,可以分为以下几种方式:基于流(Flow based)、基于包(Packet based)、基于流片(Flowlet)、基于信元(Cell based)

3、现有主流负载均衡技术

现有主流负载均衡技术大体分为四种:

  • 逐流的 ECMP 负载均衡(flow based)
  • 逐包负载均衡(packet based)
  • 基于子流(Flowlet)的负载均衡。
  • 基于信元(Cell based)

3.1 逐流负载均衡(Flow based)

传统的 ECMP 路由通常采用逐流负载分担机制,其核心是基于数据包的特征字段(例如 IP 五元组等信息)作为计算因子去进行哈希运算,根据哈希值选择转发链路。

1、不同的流由于特征字段不同,会生成不同的哈希值,从而分散到不同的链路完成转发,在整网实现一定的负载均衡;

2、具有相同特征字段的流,经过哈希运算后会分配到同一条转发路径,由此保证了同一条数据流会按序依次到达对端。

随着云计算的发展和智算业务兴起,逐流负载均衡的缺陷愈加凸显。

  • 首先,逐流的负载均衡无法解决流大小不均的问题,当大小流平等、粗放地进行负载均衡的精细度有限,带宽利用率也有所损耗;
  • 其次,它是一种静态的负载均衡机制,无法实时感知链路的负载情况。当网络出现大象流,静态负载均衡机制依旧会按照既定的路由算法去选路,容易进一步加剧拥塞,造成丢包;
  • 尤其是智算集合通信场景下,该机制还极易在 Clos 组网的 Leaf 上行链路出现哈希极化现象,造成网络拥塞。

3.2 逐包负载均衡(Packet based)

逐包的负载均衡技术则是将数据包均匀地负载到各条链路上,又被形象地称为"数据包喷洒"(Packet Spray)

逐包负载均衡通常提供 Random 和 Round Robin 两种算法,Random 算法将数据包随机分散到各条链路上;Round Robin 算法能够将数据包逐一等量的分散到各条链路,理论上均衡度最好。

随机包喷洒(Random Packet Spraying,RPS)是一种基于包级别的负载均衡策略。当交换机发现有多条等价路径指向同一目的地址时,RPS会将数据包以单个包为单位分散到这些路径上。与ECMP不同,RPS以数据包为单位进行操作,将同一流中的不同数据包转发到不同的等价路径上。

RPS的优点在于简单易实施,通过细粒度的负载均衡,可以在多条并行路径之间实现较为均衡的路由选择,提升端到端的网络吞吐率,可以将并行链路利用率提高到90%以上。

缺点在于可能会造成同一个流的包乱序问题,所以这种方式必须要很好解决乱序问题。例如英伟达的解决方案中,就使用BlueField-3 DPU通过DDP(直接数据放置)处理无序数据,从而形成端到端的完整解决方案。

但由于实际组网中不同链路的负载情况和转发时延不一样,逐包负载均衡无法保证报文依照原有时序到达接收端,故其整体性能依赖于端侧的缓存容量和乱序重组能力。

3.3 基于子流(Flowlet)的负载均衡

不同于传统负载均衡的逐流负载分担或逐包负载分担,基于子流的负载均衡不光是对数据流进行分割以实现更精细均匀的负载分担,而且保持了报文到达的时序性

Flowlet本质是利用TCP的流突发特性,根据设置一定间隔将流分割为一个个Burst子流,然后每次切换都是在这个间隔中间,从而避免乱序。但是这个方式也有局限性:首先,Flowlet无法应对短连接场景,试想如果一个Flow一共就一个Burst,那Flowlet必然无法产生效果;其次,Flowlet是针对TCP的特性设计的,而RDMA流量并不符合相关特征,因此,在上层应用为RoCE流量时,Flowlet基本没有效果,这也是在AI/ML等场景中不使用Flowlet的原因。

Flowlet的实现原理如下:对于TCP Flow,通常假设Packet是平滑发送的,然而实际不管是实际抓包还是从具体实现上看,都会发现TCP Packet的发送其实是Burst的发送的,如下图:

一般而言,英文中的***"-let"***后缀代表"微小"的意思,一个Flowlet代表的就是一条小流。如下图所示:

在宏观的观感上,可以把一条flow看成是多个flowlet组成的,负载均衡现在就是基于flowlet来进行了,好吧,又引入了一个中间层,它既不是packet,也不是flow,而是大于packet小于flow的flowlet,那么到底如何定量去切分Flowlet呢?已知两条链路的延迟分别为D1,D2,设一个数α,当α满足下面的条件:α >|D1−D2|,一条Flow便可以通过α来切割为不同的Flowlet。

3.4 基于信元(Cell based)

在基于信元交换的网络级负载均衡机制下,接收端设备接收到报文后,会将报文拆分成的若干信元,信元会基于目的端发送的调度信令选择空闲的链路进行转发,到的目的后,信元被重新拼装成报文发出设备。在这样的机制下,不同于流转发,一个固定的流仅能利用单条路径,信元交换是动态的基于微观负载实时调整的均衡利用。

信元交换的粒度比基于包的负载均衡还要细,理论上,带宽利用率可以更高。信元交换本身并不是一项崭新的技术,在目前广泛应用的框式设备中,线卡芯片与网板芯片之间的流量交换普遍都采用了信元交换的技术,以实现机框内无阻塞交换。不过信元交换以前主要应用在框式设备系统内部,往往都是各个交换机设备厂商自定义的信元格式和调度机制,不具备跨厂商互通的能力,此项技术可以进一步扩展,应用到整个网络上。2019年AT&T向OCP提交了基于商用芯片的盒式路由器规范,提出了DDC(Disaggregated Distributed Chassis)的概念,DDC使用的核心技术也是信元交换的方案。

AI/ML网络支撑的业务其特征是流数量少,单条流的带宽大,同时流量不均匀,经常出现多打一或者多打多的情况(All-to-All和All-Reduce)。所以极易出现流量负载不均、链路利用率低、频繁的流量拥塞导致的丢包等问题,无法充分释放算力。信元交换将报文切片成Cells(对比Packet based的负载均衡方案,粒度更小),并根据可达信息采用轮询机制发送,流量负载会较为均衡的分配到每一条链路,实现带宽的充分利用,这样可以解决中大小流的问题,仍然存在相当多的缺陷:

  • 静态时延增加;DDC的大缓存能力将报文缓存,势必增加硬件转发静态时延。同时信元交换,对报文的切片、封装和重组,同样增加网络转发时延。通过测试数据比较,DDC较传统ETH网转发时延增大1.4倍。显然不适应AI计算网络的需求。
  • 硬件依赖特定芯片实现,封闭、专用;
  • 大缓存设计增加网络成本;

3.5 总结

基于上述分析可以看出以上几种负载均衡方案,各有优劣,从实际部署的角度看,负载均衡的粒度从小到大的顺序是Cell based、Packet based、Flowlet、Flow based对应的带宽利用率则是从高到低,但是由于Cell based自身的限制,实际在智算领域基本没有应用。

当前高性能计算、分布式存储、人工智能等应用均采用RoCEv2协议来降低CPU的处理和时延,提升应用的性能。然而,由于RDMA的提出之初是承载在无损的InfiniBand网络中,RoCEv2协议缺乏完善的丢包保护机制,对于网络丢包异常敏感。尽管可以使用PFC、ECN等流量控制和拥塞控制技术尽量实现无损网络特性,但还是很难应对大象流/老鼠流分布不均的影响,而网络负载均衡是一个绕不开的点。

在这方面,各厂家也在做各种努力尝试。

比如在英伟达的RoCE解决方案中,可以针对RDMA流和TCP流采用不同的策略,如TCP使用Flowlet,RDMA(RoCE)采用逐包的负载均衡策略。Spectrum可以通过网络侧交换机和端侧DPU的紧耦合联动,做到实时动态监控ECMP各个链路的物理带宽和端口出口拥塞情况,来做到基于每个报文的动态负载分担。

Spectrum-4交换机负责选择每个数据包基于最低拥塞端口,均匀分配数据传输。当同一流的不同数据包通过网络的不同路径传输时,它们可能以无序的方式到达目的地。BlueField-3 DPU通过DDP处理无序数据,避免了数据报文缓存和重组的困扰, 通过上述方案,在超大规模系统和高负载场景下相对传统RoCE方案性能提升明显。再比如,华为的智能无损网络,通过ACC(Automatic ECN)动态调整每个交换机的标记阈值,以分布式方式工作,并结合离线和在线训练以适应动态流量模式,ACC在线速率下实现了老鼠流和大象流的低流完成时间,优先调度小流的报文,从而保障小流的转发时延,提升整体吞吐性能。

相关推荐
楼兰公子2 小时前
# RK3588 Linux 驱动开发完整学习指南RK3588_Linux_Driver_Development.md
linux·驱动开发
光电笑映2 小时前
Linux 文件 IO:从概念到系统调用
linux·运维·服务器
奶油话梅糖3 小时前
Codex CLI 安装适配国产信创环境实践:统信 UOS、麒麟、openEuler、Anolis 的落地思路
运维·网络
wuxinyan1233 小时前
工业级大模型学习之路018:LangChain零基础入门教程(第一篇):LangChain架构与生态介绍
人工智能·python·学习·langchain
@蔓蔓喜欢你3 小时前
前端测试完全指南:从单元测试到E2E测试
人工智能·ai
Angel3 小时前
Dify系列课程 - 4.Dify实战(本地部署-源码下载与部署)
ai·dify·dify实战·dify实战指南·dify docker 部署·ai实战 应用
@insist1233 小时前
信息安全工程师-网站安全顶层认知:威胁、需求与防护体系框架
网络·安全·web安全
qcx233 小时前
【AI Daily】每日Arxiv论文研读Top5 | 2026-05-19(周2)
人工智能·llm·agi·arxiv
hudawei9963 小时前
RK R87 Pro AI键盘,AI功能设置与连接教程
人工智能·计算机外设·使用说明·rk r87 ai键盘