题目:DRILL: Micro Load Balancing for Low-latency Dada Center Networks

原文: https://dl.acm.org/citation.cfm?id=3098839

主题:数据中心分布式负载均衡


目录

摘要

1 简介

2 背景

3 设计&算法

3.1 设计概览

3.2 对称拓扑中的DRILL

3.2.1 交换机硬件

3.2.2 DRILL(d, m)调度策略

3.2.3 选择和内存的陷阱

3.2.4 DRILL能够确保稳定性

3.3 数据包重排序

3.4 处理非对称拓扑

3.4.1 控制平面

3.4.2 数据平面

3.4.3 处理异构设备(heterogeneous devices)

4 评估

5 相关工作

6 结论


摘要

前的设计潮流是将DCN网络功能从核心向边缘迁移。

DRILL:毫秒级/单包处理/交换机级/基于本地队列占用率/随机算法

1 简介

目前负载均衡算法:集中控制器/边缘/终端

CONGA/MicroTE/Mahout/Hedera:非局部的拥塞信息是必须的

弊端:控制循环(control loop)比大部分拥塞事件本身的时间长

与ECMP的不同:能够感知负载,且包与包之间的转发决策相互独立

2 背景

DCN多采用Clos网络结构,大多部署ECMP作为负载均衡算法。

ECMP的好处在于不会引起包的重排序。但缺点在于性能不佳,且当流产生哈希碰撞时会引发拥塞。

Clos网络中,ECMP在小流的场景下是接近最优的。——Prosto

许多优化ECMP的方案着眼于细化负载均衡的粒度。

近期趋势:将网络功能移出fabric(交换矩阵?),放至中心控制器、网络边缘甚至是终端主机。

Presto:细化粒度,但不感知负载;CONGA:细化粒度同时引入全局负载信息。二者粒度均比包大,是为了避免乱序。

现有方案不能有效解决microburst(亚毫秒级的拥塞,源自丢包)。即使是最快的方案也会有几十毫秒至几秒延迟的控制回路(CONGA:RTT级)。

尽管平均链路利用率低(1%到20-30%),但流量的高度突发性使得缓冲区溢出的持续时间非常短暂,因此高丢包率的情况较为频繁。

Facebook DCN:最大队列占用率和平均队列占用率之间存在几个数量级的差异。

DRILL设计目标:

1.microburst是DRILL提升性能的主要切入点;

2.仅利用本地信息做出负载均衡决策,减轻交换机负担,以保持简单性和可扩展性。

3 设计&算法

3.1 设计概览

理想模型:fluid-model,ESF(Equal Split Fluid)提供了一种无视流量需求的精确最优负载均衡方案

对称路径:如果我们考虑任何两台主机,它们在二者之间所有最短路径的对应的跳数上将具有相同的流量(以及各个流量的混合)

目标:实现近似ESF的方案

ECMP:在长时间范围内近似ESF,但在短时间范围内偏差很大

问题:

a) 负载均衡的粒度太粗

b) 均匀的伪随机分配不考虑负载,会导致碰撞

Presto:细化粒度,端主机源路由,优化了问题a

更进一步:对每个数据包进行均匀-伪随机分配,虽然这因增加端主机CPU负载以及引发乱序而不被考虑,但对问题a更有效

不过,问题b也同样重要

DRILL:接近最优的ESF近似方案

1) 为实现对ESF的精确模拟,DRILL选取单个数据包作为基本单元,由于这也是交换机处理数据的基本单元,所以避免了Presto对于单包增加端主机CPU负载的担忧

2) DRILL的流量转发策略并非均匀随机,而是根据出口队列长度选取端口

【问题:为什么DRILL要用单包作为负载均衡的粒度?

猜想:1.逼近EFS模型;2.交换机处理以单个数据包为单位,使用单包作为粒度不会增加性能开销,使用flowlet或flowcell反而可能增加报文处理过程】

DRILL面临的挑战:

1) 包的重排列

DRILL的实际表现很好,即便在很重的负载之下,重排序的发生概率也很低,几乎不对TCP吞吐量产生影响;DRILL引入了一些端主机的机制来恢复包的顺序。

2) 非对称拓扑

DRILL的将每个交换机上的路径分解为最小数量的组,从而使每组内的路径是对称的(组间不对称)。在此情况下,DRILL先将流按照ECMP的方式分配到各组,再在组内使用DRILL进行负载均衡。

3.2 对称拓扑中的DRILL

任务:尽可能接近ESF

3.2.1 交换机硬件

简单交换机:一个中心引擎

高性能交换机:多个转发引擎

超高性能交换机:每个接口卡配置多个引擎

一些交换机可以获取队列长度(us级)

队列长度可以代表负载情况,但并不精确,因为读取队列长度的时候可能有些包正在入队

3.2.2 DRILL(d, m)调度策略

power of two choice:Balanced Allocations

算法:在N个输出端口中随机选择d个端口,在d个中选取1个当前队列长度最短的端口,与上次具有最短队列长度的m个端口的队列长度进行比较,选取队列最短的1个端口转发包

算法复杂度:O(d+m)

实验结果:DRILL(2, 1)性能最优

3.2.3 选择和内存的陷阱

实验:与ECMP、单包随机、轮转调度进行比较

流量模型:Inside the Social Network's (Datacenter) Network, SIGCOMM 2015

(缩放到达间隔时间以模拟不同程度的网络负载)

目标:最小化队列长度(第4节会引入流完成时间、吞吐量等度量)

在100s的实验中,每10us测量队列长度标准差STDV(包括leaf的上行链路和spine的下行链路)

结论:

1 少量选择及内存能够大幅度提高性能

80%负载:

30%负载:

可以看出,(1)在负载较重时DRILL的提升更为明显;(2)负载较重时,对于单转发引擎,选择越多,STDV越低

【问题:为什么不选择DRILL(2, 2)?

·猜想:可能是处于节省内存的考虑,作者认为DRILL(2, 1)的性能已经足够好,即时有些选择在某些情形下比它更好,也提升不明显】

2 过多选择及内存会降低性能

同步影响(synchronization effect):多个转发引擎同时选择同一套输出端口

【问题:转发引擎的数量对结果有什么影响?

猜想:转发引擎可以理解为线程,与硬件没有直接的对应关系,只是为了满足并行处理的需求】

【想法:可以看出这个算法对于每个转发引擎是独立运行的,d是每个引擎独立选取的,m是也是每个引擎独有的】

【想法:d是随机选择的,当d过大时,不同转发引擎选择的端口重复性较高;m同理】

3.2.4 DRILL能够确保稳定性

稳定性:所有队列的预期长度不会没有限制地增长

假设:服务率总和不小于到达率总和【注意:这里并没有假设是对称拓扑】

证明1:纯随机抽样不稳定

【想法:这里的证明思路是:假设某个端口具有比其他端口高很多的服务速率,理应获得更多的流量分配,但只凭借随机选择的话(即DRILL(d, 0)),并不是所有引擎都能选到这个端口。没选到这个端口的引擎将流量转至服务速率相对较低的其他端口,可能导致其到达速率超过其服务速率,从而导致系统不稳定。因此,需要引入内存m,确保所有引擎都有机会选到这个端口。】

证明2:带有内存的随机抽样是稳定的

其证明在DRILL 2017年的一篇技术报告中,细节未知

【问题:不太明白为什么它证明那个公式之后就能证明稳定性了】

3.3 数据包重排序

数据包的乱序可能会触发TCP的冗余ACK机制,也会增加CPU负担。为了避免乱序,ECMP、CONGA、Presto都采用了更为粗粒度的流量单元。

DRILL认为,排序时延是DCN中最主要的网络延迟,因此也是引起数据包乱序的根源。

DRILL能够把队列长度标准差均衡得足够小,因此各数据包的排队时延几乎一致,所以乱序的频率很低。

实验证明,DRILL的乱序并没有对TCP的性能产生严重影响。

为了完全避免乱序以满足某些应用需求,也可以利用最近的技术,通过添加终端夹层(shim layer)来建立防止乱序的网络栈。

3.4 处理非对称拓扑

非对称拓扑下的两个问题:

1) bandwidth inefficiency

负载均衡器会将可用路径中的单个流量分开,这可能会浪费带宽,因为它们与TCP的控制环路相互作用(见CONGA)

若某链路失效,按照DRILL的原有分配策略,会造成某些链路的带宽闲置。

一些本地负载均衡策略同样会面临该问题。例如Presto,Presto的解决方式是静态加权调度(类似WCMP)。但改变权重并不能解决该问题,因为最优的权重值取决于各链路的实际负载大小。

2) excessive packet reordering

非对称拓扑下,某些链路会比另一些更为拥塞,因此链路之间的时延不同,会产生包的乱序。

解决

消除算法对于非对称拓扑的等速率依赖

3.4.1 控制平面

控制平面识别对称路径组,并将这些组移交到数据平面以便在每个组内进行微负载平衡。

精确定义对称

链路对称:链路l1、l2被同一组源-目的对穿过,则l1与l2对称,记作l1~l2

路径对称:路径P、Q分别包含链路p1,...,pn和q1,...,qm,若P与Q所包含的跳数相同(n=m),且对应链路均为对称链路(pi~qi),则P与Q对称,记作P~Q

*并非所有失效都会引起不对称,例如某host失效,spine-leaf的所有链路均移除到该主机的路径,依然对称

将非对称拓扑分解为对称拓扑组的步骤:

Step 1: Building a Quiver

Quiver:一个带有标签边的有向图,其中边允许有相同的结束顶点和标签

1)每个交换机是一个顶点

2)计算所有叶节点对之间的最短路径。对于每条位于从src到dst的最短路径p上的、从交换机a到b的链路,为其添加一个标签为(src,dst)的有向边【想法:标签相同则链路对称】

计算链接的所有标签可以在多项式时间内完成,复杂度:O(|L|²V²),其中|L|表示叶节点数量,V表示顶点数

Step 2: Decomposing the network into symmetric components

  • 构建Quiver之后,每个源交换机将其到达dst的最短路径集合分解成components:只包含彼此对称的路径最大子集

  • 计算p.score与p.cap,复杂度为O(d),d为p的长度。

  • *快速路径对称检验:对a与b间的边作哈希匹配得到其链路score,路径的score为其所有链路score的列表。若两个路径的score相同,则两个路径对称。

  • 计算之后,DRILL将对称路径分配给对应的component,并为每个component分配一个权值,权值取决于其包含的链路总容量。复杂度为O(|P|d),|P|表示集合中的路径数,d表示最大路径长度。

集合之间的路径分解是独立的,因此可以并行执行。

3.4.2 数据平面

Step 1: Flow classification

类似于ECMP,按照五元组将流散列到不同的component上

Step 2: Intra-component micro load balancing

在每个component内,执行DRILL(d ,m)

3.4.3 处理异构设备(heterogeneous devices)

容量因子(capacity factor)cf():

对于src与dst之间穿过(a, b)的最短路径p,cf(a, b, p) = capacity(src, a) / capacity(a, b),它表示src→dst流量在a向b建立队列时的速率(前提是从src到dst只有p一条路径)。

【问题:如何获取链路带宽?】

4 评估

在80%的负载下,DRILL的FCT相对于Presto、CONGA、ECMP分别有1.3、1.4、1.6倍的缩短。

DRILL性能提升的原因::1.细粒度&负载感知;2.适用于高突发的流量模式(如incast、链路失效)

DRILL在incast场景下性能提升明显,相对于CONGA和Presto,其第99.99%的FCT时间缩短了2.1倍和2.6倍

-性能评估方法

  • 指标:FCT、吞吐量

  • 对比:CONGA、Presto、ECMP

  • 方式:仿真

  • 工具:OMNET++,INET框架(提供标准以太网交换机及主机网络栈)

  • 通过Network Simulation Cradle库,从Linux 2.6中移植实际的TCP实现

  • DRILL(2, 1)单引擎交换机

  • 不同大小的2-3级Clos网络

-对称Clos中,DRILL降低了平均/尾延迟

流量:使用来自实际DCN流量的trace-driven workload来计算流大小、流入间隔时间和流量模式

拓扑:4脊节点,16叶节点,每个叶节点下有20个主机。主机-叶间链路带宽为10Gbps,叶-脊间链路带宽为40Gbps

仿真不同程度的负载:缩放流的间隔时间

发现:负载均衡粒度是决定效率的关键因素。重负载下,DRILL的性能提升更明显。

实验还部署了一个以流作为基本粒度(只为流的第一个包执行DRILL,之后流的所有包都从该端口出)的DRILL模型,其尾延迟稍高于CONGA和Presto。

[探究排队时间的来源]

Hop1:叶到脊;Hop2:脊到叶;Hop3:叶到主机

10%负载:排队主要发生在Hop3。此处负载均衡算法几乎不起作用,相对于ECMP的提升有限

50%&80%负载:Hop3的时延几乎一致,Hop2的时延可以忽略,因此主要差异体现在Hop1上。在此,DRILL、Presto、CONGA对ECMP的排队时间分别有2.3、1.7、1.6倍的提升。

如今数据中心(ECMP)利用率接近25%时容易出现严重的拥塞及丢包,因此一般将负载保持在25%左右以控制延迟

DRILL在保持尾延迟不增加(99.99%th FCT)的情况下,能提供1.4、1.3、1.2倍于ECMP、CONGA、Presto的利用率

-DRILL的横向/纵向扩展

  • 横向扩展

使用数量更多但容量更低的交换机:16个脊节点,16个叶节点,每个叶节点下有20个主机。所有链路带宽为10Gbps(与前一个实验提供了相同的核心容量)

在此情形下,各种负载均衡算法的性能均有所下降,因为队列消耗的速度变慢了。但DRILL依旧比其他算法有着显著优势。

负载较重时,DRILL的提升更为明显。如80%负载下,DRILLL相对于E、C、P降低了2.1、1.6、1.4倍的平均延迟。

实验表明,负载和链路速度相同、规模和超额认购比率(oversubscription ratios)不同的网络没有显着的性能差异。

下图:两个带宽均为10Gbps、负载80%的网络,一个有20脊、16叶、20主机(over-subsection ration为1:1),另一个有12脊、16叶、20主机(over-subsection ration为5:3)

  • 纵向扩展

对多于两层Clos拓扑(如VL2和Fat-tree)进行了测试。DRILL在这类网络中也能有效地降低FCT。

VL2:16个ToR交换机通过8个聚合交换机和4个中间交换机以及1Gbps链路与20个主机相连,核心链路带宽为10Gbps,链路负载为80%。

实验还测试了每台交换机中转发引擎数量的影响,并发现它对DRILL(2,1)的FCT的影响可以忽略不计

-DRILL具有最低的数据包重排序率

ECMP和CONGA不会引起重排序,因此不作比较。

指标:TCP冗余ACK的数量【问题:但是冗余ACK可能是丢包,可能是包错误,也可能是乱序,怎么确定原因呢?】

对比:Presto、单包随机(PR)、单包轮转(RR)

观察:1) 80%负载下,DRILL只有0.4%的流触发了冗余ACK,相对于PR、RR、Presto减少了8、7.3、3.3倍;且DRILL只有0.02%的流触发了3次以上的冗余ACK

2) 相对于PR和RR,Presto乱序的流数量更少,但触发3次ACK的流的数量更多。原因:flowcell若将流包括在内,则流不会乱序;否则,若一个流的多个flowcell乱序,则会引起多个数据包乱序,则会触发大量冗余ACK。

3) 低负载下,所有机制触发冗余ACK的概率都很低

4) DRILL的包重排序率很低,因此加不加shim层的性能表现都相当

结论:DRILL的负载感知对于负载均衡很重要

端主机一般会做性能优化,如使用GRO合并数据包(顺序,合并阈值64KB),减少对于每个包的数据开销。因此乱序会增加端主机的CPU开销。

DRILL对于GRO的性能影响是可忽略不计的,在80%的负载下,DRILL只增加了0.5%的批数量。

-DRILL处理链路失效

实验中的链路失效情形:1) 单条叶-脊链路失效;2) 10条随机叶-脊链路失效

观察:1) 处理单条链路失效时,DRILL和Presto最为有效;2) 处理多条链路失效时,DRILL和CONGA最为有效(因为CONGA能够将负载转移到拓扑中容量较多的部分,而DRILL打破了非对称路径间的速率依赖)。

DRILL基于OSPF获取拓扑变动,因此会受到OSPF收敛的时间影响。实验表明,这部分时间可以忽略不计(0.6%的提升)

-DRILL在具有非一致性设备的非对称拓扑中非常高效

拓扑:16脊,16叶,每叶48主机,叶与相邻的两个脊(i mod 16,(i+1) mod 16)间分别有两条链路,与其余的脊间只有一条链路

观察:DRILL和CONGA性能最优

-DRILL减小了incast场景下的尾延迟

incast主要发生在最后一跳(叶到主机),因此相关研究主要关注主机端的buffer溢出问题

DRILL的实验表明,incast流量同样会在其他层产生buffer溢出,负载均衡机制可以对此进行缓解

拓扑同实验一,背景流量即前文所述的流量模型

观察:在incast情形下,DRILL显著地降低了尾延迟

原因:incast流量在Hop1引发了microburst

-综合流量负载

流量:

1) Stride(8):主机 i 向主机 i+8 (mod n) 发送流量;

2) Shuffle:每个主机向其余所有主机以随机顺序发送流量

观察:

1) DRILL大大降低了尾延迟,并提高了大象流的吞吐率

2) 各算法对ECMP的Shuffle的提升不大,因为其主要瓶颈在最后一跳

-硬件和可部署性考虑

DRILL的Verilog实现不到400行代码,其硬件所需大小占交换机芯片大小的不到1%

其他两个组件:

1) 非对称拓扑计算:可在中心控制器中实现,或在本地控制软件(若路由算法提供拓扑信息)实现

2) shim层:非必需,Presto证明了它的易用性

5 相关工作

最近的研究主要从两个方面提高ECMP的性能:1) 缺乏全局拥塞信息;2) 大流的哈希碰撞

  • Planck:快速网络测量体系结构,实现毫秒级的拥塞流的重路由

  • Fastpass:由一个集中的仲裁器来规定每个数据包何时以及通过哪条路径传输

  • Hedera/MircoTE/Mahout:重新路由大流量,以补偿ECMP将其散布到相同路径上的低效率

  • Presto:Presto认为在对称拓扑中,若流均为小流,则ECMP是一种近似最优的负载均衡算法。因此Presto将flow划分为flowcell,便于在所有路径上传送,而且不需要负载感知。Presto还有一个应对链路失效的集中式控制器

  • CONGA:混合方法,将flow分解为flowlet,并使用网络内拥塞反馈机制以估计负载并发送flowlet

  • DRILL受到“power of two choices”的启发,也有相关工作研究了使用内存保存过去的选择的影响,但以往的模型都是单一仲裁者,而DRILL的多仲裁者机制可以有不同的行为

6 结论

不同于以往负载均衡方法的宏观视角,本文探索了一种微负载均衡方法,使得网络可以基于每个交换机的本地流量信息做出微秒级决策,并解决了硬件可行性、数据包乱序、不对称性等挑战。实验表明DRILL优于目前最先进的Clos网络负载均衡方法,尤其是在高负载和incast场景下。DRILL通过将非对称网络分解为对称部分来适应非对称性。

未来工作:研究微负载均衡在其他拓扑下的应用,以及具有多种转发引擎的交换机的延迟队列信息的影响。


【IDEAS】

1.对于非对称拓扑,能否通过计算(动态)算出精确的流量分配比例?

  • NP问题,数学不可解,但机器学习可以逼近

  • Presto已经做了

2.DRILL的思想能否应用于广域网?

DRILL(Sigcomm'17)阅读笔记相关推荐

  1. SIGCOMM‘2021 Congestion Detection in Lossless Networks 阅读笔记

    又是一篇论文阅读笔记,读的是SIGCOMM2021年的关于无损网络中的拥塞控制 1.什么是无损网络 关于无损网络,简单一句话来说,就是没有丢包的网络,传统的网络是可以出现丢包的,丢包之后就进行重传,而 ...

  2. SIGCOMM论文Mobile access bandwidth in practice measurement, analysis, and implications阅读笔记

    Mobile access bandwidth in practice: measurement, analysis, and implications阅读笔记 这篇论文选自SIGCOMM2022 概 ...

  3. T5: Text-to-Text Transfer Transformer 阅读笔记

    作者:徐啸 知乎专栏:自然语言处理学习之旅 https://zhuanlan.zhihu.com/p/89719631 写在前面 谷歌用一篇诚意满满(财大气粗)的基于实验的综述,试图帮助研究者们「拨开 ...

  4. S3C2410 bootloader ----VIVI阅读笔记 (转)下

    1 static inline void mem_mapping_linear(void) 2 { 3      unsigned long pageoffset, sectionNumber; 4  ...

  5. sed 手册阅读笔记转

    原文链接sed 手册阅读笔记摘要sed 手册本身不太适合初学者,我在看的过程中加了一些 自己的注释和一些例子,帮助理解,如有偏差或错误,请指出,多谢.目录1. sed的工作原理 2. sed中如何选择 ...

  6. DnCNN论文阅读笔记【MATLAB】

    DnCNN论文阅读笔记 论文信息: 论文代码:https://github.com/cszn/DnCNN Abstract 提出网络:DnCNNs 关键技术: Residual learning an ...

  7. Learning Multiview 3D point Cloud Registration论文阅读笔记

    Learning multiview 3D point cloud registration Abstract 提出了一种全新的,端到端的,可学习的多视角三维点云配准算法. 多视角配准往往需要两个阶段 ...

  8. FCGF论文阅读笔记

    FCGF论文阅读笔记 0. Abstract 从三维点云或者扫描帧中提取出几何特征是许多任务例如配准,场景重建等的第一步.现有的领先的方法都是将low-level的特征作为输入,或者在有限的感受野上提 ...

  9. 2019 sample-free(样本不平衡)目标检测论文阅读笔记

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自知乎,已获作者同意转载,请勿二次转载 (原文地址:https://zhuanlan.zhihu.com/p/100052168) 背景 < ...

  10. 【计算机视觉】运动目标检测算法文献阅读笔记

    先前在博客中对常见的运动目标检测算法有写过一篇总结,详情请参考:http://blog.csdn.NET/kezunhai/article/details/8830787.本文是在校期间写的部分阅读笔 ...

最新文章

  1. c语言主程序子程序流程图,c语言超经典矩阵式键盘的接法,流程图和扫描程序
  2. LeetCode Factorial Trailing Zeroes(计算阶乘结果尾部有几个0)
  3. end_form_tag 已经在rails2.x中去掉了
  4. 用c语言编辑房间长和宽求面积_房间地砖规格怎么选?
  5. HttpServlet的doGet()和doPost()方法
  6. 【转SQL】truncate:清空表中数据
  7. SAP Spartacus路由参数的默认配置
  8. redis复制_Redis复制
  9. 2个vector如何合成一个_面试中如何做到不卑不亢,牢记2个要点
  10. python2.7个3.7之间传输文件_关于将python2.7转换为python3.7的说明,python27,python37,散记...
  11. dede搜索页面上某些标签无法使用
  12. ios开发中的字符串常量如何处理
  13. 编辑距离Edit distance
  14. java求两个时间相差月_java计算两个时间相差几个月
  15. skype api java版 打电话
  16. 这是不是你想要的h5手机端弹窗
  17. can收发器TJA1043
  18. 双硬盘win10下安装ubuntu的方法
  19. 【光学】基于矩阵法和等效界面法分析光学薄
  20. 解决电脑安装mathtype后microsoft office 2016的.ppt文件打不开问题

热门文章

  1. [单片机框架] [kv_sys] 实现一个简易KV键值系统(最终版)
  2. SPSS Statistics下载
  3. openpyxl详解
  4. 程序员等级图鉴,大牛头发有点少
  5. 汇编语言的符号拓展指令CBW、CWD、CDQ、CWDE、CDQE
  6. mysql加锁分析 何登成_何登成的技术博客 ? MySQL 加锁处理分析
  7. 博士研究生入学第一年就完成了毕业所需的发表论文要求是怎样的体验?
  8. AGC012B Splatter Painting
  9. __construct 与 __destruct 区别
  10. 控制工程/机器人SLAM/机器视觉/避障导航/求职笔记