Adaptive-RED队列

RED通过平均队列长度的增长,增加报文的随机丢弃(或标记)概率,来实现主动队列管理(AQM)。当平均队列长度avg由设置的最小阈值(minth)向最大阈值(maxth)增长时,报文的丢弃概率由零增长到最大概率值maxp。RED的一个主要目的就是使用平均队列长度(容许突发流量)和拥塞预先通知(减低平均队列长度)来达到高吞吐和较低的平均队列时延。

但是,RED的一个缺陷是,平均队列长度随着拥塞程度和RED参数的设置而变化。当链路轻度拥塞,或者maxp设置的较大时,平均队列长度接近minth。反之,当链路严重拥塞,或者maxp设置的较小时,平均队列长度达到maxth,甚至超过maxth。因此,RED的平均时延在很大程度上收到网络情况和参数设置的影响。如果要达到一个指定的时延,就需要根据网络情况动态的调整RED的参数设置。

另外一点,RED队列的吞吐也受到网络情况和参数设置的影响。特别的,当平均队列长度超过maxth之后(丢弃所有接收到的报文),吞吐将急剧的下降。

针对以上情况,Adaptive-RED在保留RED的基本结构的基础上,通过动态的调整maxp,来保证平均队列长度位于minth和maxth之间。此外,Adaptive-RED还将自动的设置RED的其它几个参数,之后将会看到。

1 Adaptive-RED算法

关于maxp值的动态调整由以下几个要点组成:

a)maxp的调整不仅是为了将平均队列长度保持在minth和maxth之间,而且,将其维持在minth和maxth的中间的目标区间(如下伪代码中变量target范围)。
b)maxp的调整幅度尽量小,调整间隔长,至少大于一个RTT周期。
c)maxp的可调整区间限定在[0.01,0.5](即:[1%,50%])。
d)maxp的调整使用AIMD方式(Additive-Increase Multiplicative Decrease)。

adaptive-RED算法如下:

Every _interval_ seconds:
    if (avg > target and maxp <= 0.5)
        increase maxp:
        maxp <- maxp + α;
    else if (avg < target and maxp >= 0.01)
        decrease maxp:
        maxp <- maxp*β;

Variables:
avg:    average queue size

Fixed parameters:
interval:    time; 0.5 seconds
target:	   target for avq;
        [minth + 0.4*(maxth-minth), minth + 0.6*(maxth-minth)]

α:    increment; min(0.01, maxp/4)
β:    decrease factor; 0.9

以上maxp的缓慢低频调整,可容许RED在maxp的调整间隙内,根据平均队列长度的变化调整报文标记概率。maxp的缓慢调整的代价是在拥塞情况突变时,maxp需要经过一段时间才能达到新值,通常为10或者20秒。为保证此期间内Adaptive RED的性能不至于减低太大,以上将maxp的取值范围限定在:[0.01,0.5]。但是,此段时间内,平均队列长度可能偏离target区间,并且时延将受到影响。

2 maxp范围

设定maxp的上限值为0.5,有两个理由。首先,在报文标记概率超过50%之后,没有必要在应用Adaptive RED;另外,如果报文标记概率由0到maxp,平均队列长度将由minth增长到maxth;之后,当报文标记概率由maxth到1时,平均队列长度将由maxth增长到2maxth,所以,将maxp设定为0.5,报文标记概率正好由0到1时,平均队列长度由minth增长到2maxth。

maxp上限值0.5,意味着报文标记概率超过25%之后,平均队列长度将超过target中间值,当报文标记概率达到100%时,平均队列长度将为target4的倍数值。假如maxth=kminth,那么目标队列长度target的值为:(k+1/2)minth,报文标记概率到达100%时,队列长度为2maxth,平均队列长度接近2kminth,比目标队列长度值将近大4倍(差2*minth到4倍)。

maxp的下限值0.01主要为的是限制maxp的范围,对于报文标记概率非常小的情况,maxp设置为0.01时,RED自身运行良好,并且,如果实际的平均队列长度小于target队列长度的话,也是好事。

3 AIMD参数α和β

maxp由其定义的最小值到最大值:[0.01, 0.50],至少要经过(0.49/α)时长,对于默认情况下的调整间隔:0.5秒,以及α等于maxp/4的条件下,相当于要经过24.5秒钟的时长。反之,maxp的值由最大值到最小值:[0.50, 0.01],至少要经过(log0.02/logβ)时长,对于默认的β值0.9的情况,相当于20.1秒钟。假设网络的拥塞状态发生突变,有可能最大有25秒钟平均队列长度超出目标区间target。

另外,对于推荐的α和β值,需要确保在正常情况下,maxp的一次调整不会致使平均队列长度avg由高于target值,降低为低于target值;并且,也不能致使avg由低于target值,增加为高于target值。做一个简单的假设,当maxp调整时,报文标记概率p保持不变,平均队列长度根据新的maxp进行调整。如果p < maxp,当maxp增长α后,avg的值预期将由:

m i n t h + p m a x p ( m a x t h − m i n t h ) min_{th}+\frac{p}{max_{p}}\left ( max_{th}-min_{th} \right ) minth+maxpp(maxthminth)

调整为:

m i n t h + p m a x p + α ( m a x t h − m i n t h ) min_{th}+\frac{p}{max_{p}+\alpha }\left ( max_{th}-min_{th} \right ) minth+maxp+αp(maxthminth)

这将导致avg减小以下值:

α ( m a x p + α ) p m a x p ( m a x t h − m i n t h ) \frac{\alpha }{\left ( max_{p}+\alpha \right )}\frac{p}{max_{p}}\left ( max_{th}-min_{th} \right ) (maxp+α)αmaxpp(maxthminth)

以上公式经过简化,得出其值小于0.2(maxth-minth),因此如果要防止avg在一次调整中由target区间以上变动到target以下,α/(maxp+α)应小于0.2,或者α<0.25maxp,默认的α这符合这一要求。

类似的,看一下β值的选择是否会导致avg在maxp的一次调整中由target区间以下变动到target以上,根据以上对α的分析,得出:

p ( 1 − β ) m a x p β ( m a x t h − m i n t h ) < 0.2 ( m a x t h − m i n t h ) \frac{p\left ( 1-\beta \right )}{max_{p}\beta }\left ( max_{th}-min_{th} \right )<0.2\left ( max_{th}-min_{th} \right ) maxpβp(1β)(maxthminth)<0.2(maxthminth)

要求(1-β)/β < 0.2,或者β > 0.83,默认的β值0.9负荷要求。

4 RED参数maxth和wq

Adaptive-RED实现了maxp参数的动态调整,以下看一下对maxth和wq参数的确定。按照建议maxth应设置为3倍的minth的值,这种情况下,目标avg范围设置在2倍的minth左右,所以这两个值都与minth有直接关系。

在RED算法中wq值关系着可接受的短时队列长度,以及avg算法对实际队列长度的相应时间。按照RED算法中的介绍,队列长度由一个值变更到另一个值,avg要达到新值的63%,需要-1/ln(1-wq)数量的报文到达。这里称-1/ln(1-wq)为平均队列长度的时间常数,虽然此常数以报文到达数量所表示。

NS模拟器中wq的默认值为0.002,这意味着时间常数为500个报文。但是,对于1G的链路,500个平均长度为500字节的报文只占用RTT很小的部分(对于100ms的RTT,仅占用2ms(1/50*100ms))。可见,高速连接应设置较小的wq值,以保证时间常数与RTT相当,而不是RTT的分值。以下将wq设置为链路带宽的函数。wq的设置使得avg的时间常数为1秒钟,即对于100ms的RTT链路,相当于10个RTT的时长。

ω q = 1 − e x p ( − 1 / C ) \omega _{q}=1-exp\left ( -1/C \right ) ωq=1exp(1/C)

以上,C为链路的容量,单位为每秒报文数量(根据默认报文长度计算)。

5 时延参数

时延参数与Adaptive-RED的目标avg密切相关,ARED将avg维持在minth的2倍值,所以给定目标avg,也就确定了minth的值,可进一步确定maxth的值。目标avg的设置为网络的吞吐与时延两者间的一个平衡,与网络中的突发流量也有一定关联。

根据RED的相关算法,Jacobson将minth作为链路带宽的函数进行设置,对于低速和中速链路,通常设置minth为5个报文。但是,对于高速链路,即使是设置minth为10个报文,相对于BDP(Bandwidth Delay Product)也是很小一部分,将造成严重的性能下降。

一个可行的办法是将目标avg设置为端到端RTT的一个分值,以下公式给出相应的minth的值:

m i n t h = d e l a y t a r g e t ∗ C 2 min_{th}=\frac{delay_{target}*C}{2} minth=2delaytargetC

其中,delay_target为目标平均时延,C为链路容量,单位是每秒报文数量。通常情况下,将minth的值限定在5个报文以上:

m i n t h = M a x [ 5 , d e l a y t a r g e t ∗ C 2 ] min_{th}=Max\left [ 5, \frac{delay_{target}*C}{2}\right ] minth=Max[5,2delaytargetC]

根据以上公式,假定目标时延为5ms,对于10Mbps链路,minth的最小值为12.5个报文;对于100Mbps链路,minth为125个报文。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页