QOS队列缓存对时延和抖动的影响

发布时间:2017-11-24 15:15:55

队列缓存对时延和抖动的影响

队列缓存对时延和抖动的影响

队列缓存

路由器转发平面的流量管理器TMTraffic Manager)上有一些高速缓存,用于报文的缓冲和转发,缓存由所有端口共享,各端口竞争使用。为了避免有的端口长时间抢不到缓存而出现断流,路由器给每个端口分配了一块最小可用缓存,并且分配到端口的各个队列上,保证每个队列均有缓存可用。

队列缓存对时延的影响

TM收到报文时,将报文放入缓存,网络不拥塞时,报文能被及时转发,不会在缓存中产生堆积。这种情况下报文在缓存中的时间为μs级,延迟时间可以忽略不计。

当网络拥塞时,报文在缓存中产生堆积,被延迟处理,延迟时间会大幅增加。从报文进入缓存到报文被调度出去的时间间隔称为缓存时延(也称为队列时延)。

缓存时延的大小主要取决于队列的缓存长度以及该队列获得的输出带宽,可以使用如下公式计算缓存时延的最大值:

缓存时延最大值 = 队列缓存长度÷队列输出带宽

队列缓存长度单位是Byte;队列输出带宽即队列整形速率,单位是bit/s,因此上述公式可表达为:

缓存时延最大值 = 队列缓存长度×8÷队列整形速率

从上述公式可以看出,缓存越大,缓存时延越大。

队列缓存对抖动的影响

队列及拥塞管理章节中介绍过,单个队列的报文采用FIFO原则入队和出队。如果采用尾丢弃策略,当队列缓存被占满时,新到来的报文都会被丢弃。

对于使用TCP协议传输的业务,如果网络拥塞,队列缓存因被占满而连续丢弃新到的报文,导致发送端连续重传报文。结果是,发往队列的报文迅速增加,网络更加拥塞,重传的报文也因此会被丢弃而不能获取ACK。此时,发送端感知到网络出现拥塞,进入拥塞状态,调小滑动窗口为初始时的一半,导致流量急剧下降。之后,发送端进入慢启动状态,调大滑动窗口,试探性增加流量,直到再次出现队列缓存被占满而丢包,引发TCP重传。如此反复,就导致流量抖动,如1

1 TCP流量抖动示意图

对于采用尾丢弃策略的队列,在网络拥塞程度相同时,队列越短,丢包数量越多,发送端集中重传的报文越多,因此抖动越严重。

由上述可推断出,如果采用WRED丢弃策略随机丢弃报文,则可避免TCP集中重传,在一定程度上平滑抖动。

队列缓存的设置

华为路由器允许在配置WRED时修改队列缓存长度(使用queue-depth命令)。

队列不能设置过短。如果某队列过短,缓存空间过小,流量即使速率不大也容纳不下,容易造成丢包,从而给使用TCP协议传输的业务带来抖动。

队列也不能设置过长。如果队列太长,时延过大。尤其对于TCP应用,通信两端会预测网络拥塞情况,在发送完一个报文后,启动超时定期器等待对方应答,如果在定时器超时前没有等到应答,发送方会重发报文。如果报文在网络中被缓存的时间过长,不丢弃与丢弃没有区别。

队列缓存对时延的影响中介绍过:

缓存时延最大值 = 队列缓存长度×8÷队列整形速率

此公式可推断出:

队列缓存长度(Byte) =队列整形速率(bit/s)×业务能容忍的最大时延(s)÷8

低优先级业务的时延通常要求≤100ms,高优先级业务的时延要求≤10ms。结合上述公式,推荐高优先级队列(CS7CS6EF)的长度设置为10ms×队列整形速率;低优先级队列的长度设置为100ms×队列整形速率。

QOS队列缓存对时延和抖动的影响

相关推荐