DRILL(Sigcomm'17)阅读笔记

题目: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的思想能否应用于广域网?

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Green Lv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值