Sigcomm2017 re-architecting datacenter networks and stacks for low latency and high performance 论文笔记

文章目录

  • 基本方案提出
  • incast问题的解决
  • 接收端驱动的Pacing机制
  • 总结

这是Sigcomm2017年有关于接收端驱动的文章,使用一种名为NDP的机制重新架构数据中心网络和栈,以实现低延迟和高性能。

基本方案提出

文章的主要目标是

  • 低延迟:即快速启动,很短的交换机队列;
  • 接受方的优先级:接收方需要了解在这个瞬间哪个流是更加重要的,
  • 高性能:搞吞吐量

接下来描述如何具体实现以上三个目标:
首先明确一个概念,Clos拓扑中提供了足够的带宽为每条流以线速发送报文。如图所示,这两个条流以线速发送报文是完全不会出现拥塞等问题的。
Sigcomm2017 re-architecting datacenter networks and stacks for low latency and high performance 论文笔记_第1张图片
但是当出现多条不同链路到达同一目的地址的时候,问题就出现了。首先是链路容量没有被完全利用上,有很多链路出现了空闲。然后是流的碰撞会造成损失,也就是丢包。
Sigcomm2017 re-architecting datacenter networks and stacks for low latency and high performance 论文笔记_第2张图片
为了解决这个问题,文章提出了这么一个方案:依然用线速开始发送数据包,在转发数据包的时候将它们分散到目的地之间的每一条不同的路径上去。如图所示,这样就解决了链路容量没有被完全利用上的问题。
Sigcomm2017 re-architecting datacenter networks and stacks for low latency and high performance 论文笔记_第3张图片
但是这么做还是不能解决incast的问题,当流的目的地相同的时候,仍然会有溢出丢包的现象出现。
Sigcomm2017 re-architecting datacenter networks and stacks for low latency and high performance 论文笔记_第4张图片

incast问题的解决

所以在这里,文章开始找解决这个问题的办法,看到这个溢出光谱图。
在这里插入图片描述
首先丢包对于性能来说肯定是一件不好的事情。虽然重传的代价不大,但是由于本方案采取了每个包多路径的方式,导致了想要知道哪里发生了丢包其实是一个很困难的事情。这毫无疑问会造成延时。

而ECN会有更少的丢包,但是ECN需要更加大的队列来减少incast所导致的丢包。毫无疑问这也会导致延时的增长。

无损网络之下虽然没有丢包,但是PFC机制会让其它不相关的流受到影响。

所以,文章在ECN与无损之间找到了一个中间地带,剪切负载(Packet Trimming),被剪切的报文会留下一个报头继续转发到接收端。接收端是可以很清楚地知道是什么被发送了。
当队列溢出时,负载将会在到达的数据包中被剪切。剪切的报头会被优先转发,这样接收端就可以尽快知道溢出已经发生了。

在这里插入图片描述
这里是一个论文中给出的剪切重传的实例:当处于 t t r i m t_{trim} ttrim时,几乎同时到来了九个数据包。而NDP中只最多只允许有8个数据包同时存在于缓冲队列,所以packet9被剪切了。它的header继续转发,而且由于优先队列的关系,于时间 t h e a d e r t_{header} theader,header到了接收端。接收端接收到header之后生成了NACK报文转发到发送端。于时间 t r t x t_{rtx} trtx,发送端重新生成了packet9,并且在 t e n q u e u e t_{enqueue} tenqueue重新入队并且被正常转发了。
Sigcomm2017 re-architecting datacenter networks and stacks for low latency and high performance 论文笔记_第5张图片

接收端驱动的Pacing机制

仅仅有剪切重传机制依然会出现问题。持续的线速发送端流在接近发送端的附近可能会造成大量的triming,这无疑会降低效率导致延迟增加。
为了解决这个问题,在一个RTT之后,发送方将会停止发送报文。从那个时候开始协议转变为接收方驱动,接收方以pacing的方式发送自定义的PULL包,控制控制发送方的发送速率。

包到达的速率与接收器的链路速度相匹配。
具体操作是接收方每接收到一个报文或者header,它都会生成一个Pull packet到pull 队列之中去。当接收方缓冲区开始溢出,pull queue就开始建立。

Pull包的发送速率是我们希望的进入包的速率,也就是说在第一个RTT之后,包会以线速开始进入。

在发送方,只有第一个RTT之内会用线速发送,之后转变为接收方驱动,只有在接收到pull包之后才会传输报文。这样做的话在一个RTT之后就不会再次发生trimming了。

总结

提出了一种新的数据中心网络结构,包括改进的交换机排队算法和分组多路径转发。实现以下目标:

  • 对于短流能够有更好的性能
  • 能够利用95%以上的网络容量
  • 近乎完美的延迟和公平的incast

你可能感兴趣的:(队列,交换机,算法,网络)