文章目录
Introduction
这篇文章是香港科技大学在2020年的发表在sigcomm的一篇文章。这篇文章的主要工作就是为数据中心中的主动式传输协议设计了一个组件,解决了主动式传输第一个RTT无法合理利用的问题。
Background
近年来数据中心的链路速度在不断增快,在2020年已经可以达到200Gbps。
更高的链路速度意味着更高的BDP,更加复杂的环境以及流的完成速度也会更快。
同时,更高的链路速度也意味着拥塞越有可能发生。现在的解决办法通常是使用一些反应式的协议,类似于TCP,DCTCP,TIMELY。这些协议仅仅只在拥塞发生以后做出反应。
反应式的协议存在很多问题,包括有过长的交换机队列,incast问题下的严重丢包以及非常慢的收敛速度。而这些问题在更高的链路速度下会变得更加糟糕。
主动式的拥塞控制(PCC)相比于反应式的拥塞控制有着接近于0的队列长度,0的丢包以及更快的收敛速度。
与反应式的解决方案不同,主动型的解决方案会根据网络资源的可用性来主动安排网络传输。像现在这里展示的三种接收端驱动就是很典型的主动式拥塞控制协议,通过接收端发送credit来分配链路资源。
但是所有的这些PCC解决方案都有一个问题,那就是每当有新流到达时都需要一个额外的RTT来准备调度。作者认为在高速网络中一个额外的RTT是一个非常昂贵的代价。
在这个实验结果中可以看到,随着链路速率的增加,在第一个rtt就完成的流比例在不断增大。100Gbps的情况下,有60%-80%的流是可以在第一个RTT之内就完成的。这让第一个RTT变得更加重要。
对于这个问题,现有的主动式协议有两种应对方式。
第一种是消极地应对,让每条流都付出一个RTT的代价。比如说在17年的expreepass中,当有新流到达时,发送方会首先发送一个credit request,接收方接收到credit request之后开始回应credit,发送方收到credit之后才开始发包,而此时以及是第二个RTT了。
结果表明相比于理想情况下,1-100kb的流在100Gbps的情况下,80%的小流需要一个额外的RTT。
第二种应对方式就是在第一个RTT内盲目地进行发包,用这种方式来消除第一个RTT。Homa就是这么做的。当有unscheduled包到达时,Homa会用线速将它们发出去。但是这么做会导致队列堆积,进而导致缓存区溢出,数据包丢失。虽然确实解决额外RTT的问题,但是出现了尾部延时的问题。由于ramdon burst存在,增加了一千倍的尾部延时。
所以这里就很自然地提出了一个问题:能否在保留PCC的优势的前提下解决额外RTT呢?
这篇论文给出的答案是:Aeolus。
Aeolus Overview
aeolus主要包括三个部分,速率控制,选择丢包与丢包复原。
Rate Control
aeolus采取了最小的在速率控制,所有的流在第一个RTT之内都会用线速开始发送,把这些用线速发送的包称为unschedule packets。而第一个RTT之后的包都会通过credit来调整发送速率,把它们叫做schedule packets,计划内的包。这样做的目的是为了最大程度地利用空余带宽。
Selective Dropping
为了保留PCC的优秀性能,aeolus在交换机上采取了选择丢包机制。当带宽用完的时候,unscheduled packets会被有选择地丢弃,而scheduled packets不会受到影响。
具体地说:unsheduled packets 和scheduled packets被标记为不同类型,在交换机队列上配置有丢包阈值,一旦达到这个阈值,unsheduled packets 到达时就会被丢弃掉,而sheduled packets不受影响。
队列是空的时候,unsheduled packets可以用线速通过,利用上了空闲带宽,这样也就没有了一个额外的RTT延时。
当网络链路被完全使用的时候,也就是队列长度达到阈值时,unsheduled packets 到达时就会被丢弃掉,而sheduled packets不受影响。这样的话PCC的优秀性能得以保存,包括低延迟,零丢包与快速收敛。
这个功能的具体实现是通过ECN的方式而不是优先级队列。关于这一点论文中做了详细的比对论证,这里就不展开讲了。
Loss Recovery
通过选择丢弃机制,可以更好保护计划内的包不因为拥塞的原因而丢包。
同时,论文为计划外的包设计了更快的丢包检测。首先,为每一个计划外的包都搭配一个ACK包。此外论文还设计了一种味部损失探测机制,当最后一个计划外的包发送完之后,发送方会发送一个探测包,probe到接收方。接受方接受收到这个探测包之后会回复一个probe ACK packets。当发送方收到这个probeACK时,就会立刻推测出所有的被丢掉的计划外的包。
然后第二步是重新传输所有的被丢掉的包,通过PCC的方式来保证这些包能够传输成功。
Conclusion
总的来说,Aelous通过选择性丢包的方式解决了PCC第一个RTT无法利用的问题,没有使用优先级队列(也就是FIFO),同时还保留了PCC优秀的性能。