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

又是一篇论文阅读笔记,读的是SIGCOMM2021年的关于无损网络中的拥塞控制

1、什么是无损网络

关于无损网络,简单一句话来说,就是没有丢包的网络,传统的网络是可以出现丢包的,丢包之后就进行重传,而无损网络是避免丢包的情况,关于无损网络也提出了很多技术,比如RDMA等。

无损网络有两个关键的技术:ECNPFC

ECN   是当网络中出现拥塞的时候,中间设备会给数据包打上ECN的标签,当接收方收到数据包后发现有这个标签,就会给发送方发送一个CNP,发送方收到后会调整流量的发送速率待一定时间后或者是再次收到可以发送更多数据包的信号。

PFC   即priority flow control,能够逐跳提供基于流优先级的流量控制。当数据包在发送的时候,会根据优先级映射进入相应的发送队列,一个设备中可能有多个优先级队列。当某一个优先级的队列出现超过阀值的情况,就会给上游设备发送一个PAUSE信号,上游设备收到信号后会停止该优先级队列的数据包的发送,等到一段时间后或者是收到可以发送数据包的信号时再恢复发送。对该优先级队列的处理并不会影响其他优先级的流量的发送接收,因此PFC使得不同类型的流量相互独立,互不影响。

 上面简单介绍了无损网络后开始总结SIGCOMM2021的这篇论文

 2、论文关注点、动机和意义

现有的无损网络的拥塞检测一般都是由交换机完成的,而拥塞控制(速率控制)是由端点完成的。由DCB任务组开发的拥塞管理包括两个重要组件:负责拥塞检测的拥塞点(CP)和负责速率控制的反应点(RP)。类似地,InfiniBand规范规定了InfiniBand网络中的拥塞控制框架,交换机检测拥塞,通道适配器(CA)执行注入节流。

作者认为,现有的拥塞检测机制是不完全正确(有不足)的。理由如下:

        无损网络依赖于逐跳的流量控制来保证在正常操作下的实现零丢包。对于逐跳的流量控制,当某个中间设备拥塞的时候会给上游发送一个PAUSE信号,上游收到信号就会停止向下游发送数据包,那么上游的数据包也可能会出现队列长度(queue length)大于阀值的情况,则对于该设备很可能会被误判为是拥塞的节点等。所以,虽然可以实现零丢包,但是这可能会导致队列累积或者是暂停端口的实际输入速率的影响。

本文贡献:

① 深入了解逐跳流量控制对无损网络中拥塞检测的影响,并定义三元状态。

② 开发了一种新的拥塞检测机制TCD,该机制利用开关发送模式和队列长度演化特性来检测三元状态之间的转换。试验台和大量仿真表明,TCD能够准确地检测拥塞端口,识别拥塞流和未确定流。

③ 将TCD与现有的拥塞控制相结合,包括DCQCN、TIMELY和IB CC。

3、TCD方法原理

TCD的三个状态:

文中提出了一种三元拥塞检测(TCD  Ternary Congestion Detection)方法,将中间设备的端口分为三种状态:拥塞(1)、非拥塞(0)和不确定(/)。TCD会向端点通知是拥塞流(即通过拥塞端口的流)还是不确定流(通过不确定端口的流) ,本文认为:正确的了解端口的状态是非常重要的,有助于我们更好的进行拥塞控制,提高无损网路的性能。

拥塞:   拥塞端口即发生了拥塞的端口,但是它的拥塞原因是队列累积,而不是因为收到PAUSE后暂停发送数据包而引起的,其端口一直保持ON(打开)的状态

非拥塞:  非拥塞状态即端口没有发生队列长度超过阀值的情况,并且端口一直是保持ON的状态

不确定:  不确定是指端口会在ON和OFF之间切换的状态,当收到下游的PAUSE信号的时候,该端口会从ON变为OFF,从而停止向下游发送数据,等收到可发送的信号或隔了一段时间后再从OFF状态变成ON状态,然后继续发送数据包,并且当从OFF状态收到信号转为ON时是以线速度发送数据的。 

状态之间的转换:

关于端口在这个状态之间切换,具体如下:

在①和②中,主要的转换条件就是queue length(队列长度),端口是一直保持为ON的。

对于③和⑥,当其端口由ON转变为OFF,就说明端口进入了Undetermined不确定状态。

对于④和⑤,当端口从ON-OFF样式转为ON并且保持为ON的时间超过max\left ( Ton \right )时则说明已经离开了Undetermined状态,至于是到Non-congestion还是congestion要根据queue length 或者是队列的增减来判断,当队列长度减少或者是队列的长度小于阀值(此时可能队列并没有减少,甚至可能增加,但只要比阀值小就可以)则认为是转为了Non-congestion,若队列长度没有减少并且长度大于阀值,则认为是进入了拥塞状态。

为了检测queue length ,交换机可以在每个周期T内检查一下队列大小。

以上便是三个状态之间的转换。

TCD实现的关键 :

从上面也可以看出,状态之间最难判断的就是离开Undetermined状态时,也可以很明确,关键就是max\left ( Ton \right )的数值,所以实际上TCD实现的关键就是计算出正确的max\left ( Ton \right )。对于max\left ( Ton \right )的计算文中给出了不同情况下的计算方式。 

 4、实验

文中对两种无损网路都进行了测试,分别是Converged Enhanced Ethernet (CEE) 和 InfiniBand。

对于CEE来说:使用DCQCN的方法,当队列大小超过限定阀值时,就打上ECN的标记,有一比特ECN标记表示存在拥塞。CEE使用PFC的方式保证无丢包。

对InfiniBand而言:交换机可以识别两种情况(a)若输出端口的队列超过阈值,并且有可用的credit来发送数据包,则这是root cause(拥塞的根本原因,也即代表是拥塞情况);(b) 如果输出端口的队列超过所选阈值,并且数据包由于credit不足而延迟,那么它就是victim(也就是因为其他原因被迫导致队列长度过长的,包括pause或者是credit返回说不能发,也即对应的Undetermined状态)。当是root cause时,就判断是拥塞的,FECN位标记数据包。对于CA,一个比特FECN标记表示存在拥塞。InfiniBand使用CBFC(credit-based flow control)的方式保证无丢包。

在PFC中,当队列长度大于 Xoff 时就向上游发送PAUSE信号,而当队列长度小于Xon时再向上游发送一个RESUME信号,代表可以重新发送数据。上游的出端口仅在没有被暂停时才可以发送数据。

在CBFC中,有一个调整块寄存器(ABR)来记录收到的块大小,下游周期性的给上游发送FCCL,FCCL包括了ABR和分配到的缓冲区大小,上游交换机保存了一个记录总发送数的寄存器(FCTBS),通过FCTBS和FCCL,可以计算出此时可以发送的数量(credit),上游只能在有可用的credit时才可以发送数据。

本质来说,PFC和CBFC方式都是为了避免缓冲区溢出,从而实现无损网络。

实验按照如下方式部署进行,对于判断在Congestion 状态下的数据包会打上CE的标签,而在Undetermined状态下的则是会打上CE的标签。 对于CE标签,终端检测到的时候并不会降低其发送速率,从而避免了因为错误判断链路上的拥塞情况导致的吞吐量下降等。如果是CE标签则是会降低发送数据的速率,避免拥塞加剧或者是丢包等。

对于这个网络部署图,所有的链路都是40Gbps,有4微秒的延迟,A0~A·4是大小为64KB的突发流量,持续3ms,S1向R1发送一个长流F1,速度40Gbps,在单拥塞点和多拥塞点场景下分别进行了实验。其中,P3是一个拥塞状态,由于P3是拥塞端口,P2成为了不确定状态,因为它其端口在ON和OFF之间切换,也很容易被误判为是拥塞点,实际上并不是。

实验结果图如下:(多拥塞节点场景下的发送速率的测试图)

另外,关于CEE和InfiniBand中的Undetermined状态的具体情况如下图可以看到:

5、部分实验结果

通过在不同的流场景下结合不同的无损网络和拥塞控制方法,得到实验结果如下:

 在不同的算法和负载流量下,TCD整体表现出了相对比较好的性能提升,但是对于TIMELY + TCD和TIMELY本身来说,其FCT在某些流量大小下表现的差异不大。

6、总结

本文的一个主要贡献就是提出了TCD方法,并提出了一种新的端口状态,Undetermined State,TCD可以准确的检测出拥塞端口,并识别 是congestion flow还是Undetermined flow,对于不同的这些流有不一样的处理方式(打上不一样的标签,CE或UE),终端在收到数据后可以知道此时是否有拥塞的情况来相应的调整数据包的发送速率等,现有的拥塞算法和TCD结合能够获得更好的性能,证实准确的拥塞检测对于拥塞控制有重要意义。

对于这个总结如果大家有觉得不对的或者是建议欢迎提出~可以一起讨论!

猜你喜欢

转载自blog.csdn.net/weixin_44260459/article/details/120800856
今日推荐