GCC AIMD细节

1、增加带宽

增加带宽的原理是在当前带宽的基础上缓慢增加少量带宽,分为加性增和乘性增,具体见下。增加带宽的上限是,乘放大因子。

加性增和乘性增,哪个增量值更大一些?

加性增是在输入AIMD模块的预估带宽值接近有效的链路带宽时采用的带宽增量算法。它增加带宽的方法是:一个rtt时间内增加一个avgPacket,所以rtt越小,单位时间内的带宽增量越大;加性增有最大值限制,单位时间内最大增加4kbps。

乘性增是当预估带宽值太大使得当前链路带宽失效时的计算方法,它把单位时间内的带宽增量直接放到当前带宽的0~8%,与无关。乘性增有最小值限制,单位时间内最少增加1kbps。


如何计算?该值的含义是当前连接的发送带宽已经快要逼近网络的最大带宽时,如何缓慢增加一个合理的值,使其不要增加太大而发生排队。计算方法是根据当前带宽值计算一个平均大小的RTP包在一个rtt时间内的带宽。

公式:

其中,

, 

更进一步,

 , 

注意:

的单位是,和的单位为bytes,的单位为ms

表示一个视频帧可分为几个RTP包,向上取整。

默认值是。


举例:

帧率30fps,带宽90kbps,rtt=200ms, 如果要缓慢增加带宽,则GetNearMaxIncreaseRateBpsPerSecond返回值是5kbps,表示在1秒内最大增加5kb数据。

帧率30fps,带宽60kbps,rtt=100ms,如果要缓慢增加带宽,则GetNearMaxIncreaseRateBpsPerSecond返回值是5kbps,表示在1秒内最大增加5kb数据。

结论:增加的数据大小取决于当前的带宽和rtt值。(很明显,看公式)

这个公式可以理解为在一个时间只增加一个,根据这个算出单位时间内应增加的数据大小。 



乘性增的计算公式 multiplicative

其中,是放大因子,初始值是,的计算公式:

, 单位是秒

所谓的乘性增也是slow start,因为最大取值为1,所以放大因子的取值范围,也就推导出的取值范围为



当带宽下降时,恢复到原先带宽的恢复时间:

当为0,默认返回3秒;


2、降低带宽

在当前估计带宽(sample)的基础上降低:

如果且有估计值,则



最终计算的带宽限制范围为:

如果是增加带宽,则在当前带宽基础上增加。

你可能感兴趣的:(GCC AIMD细节)