美文网首页
GCC AIMD细节

GCC AIMD细节

作者: ClaireYuan_e78c | 来源:发表于2019-05-29 10:36 被阅读0次

    1、增加带宽

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

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

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

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


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

    公式:nearMaxBpsPerSecond=max(\frac{avgPktSize*8}{responseTime}*1000 , 4000)

    其中,

    avgPktSize=\frac{avgPerFrameSize}{packetsPerFrame}, responseTime = (rtt+100)*2

    更进一步,

     avgPerFrameSize = \frac{currentBitrate}{frameRate*8}, packetsPerFrame= \lceil \frac{avgPerFrameSize}{1200}\rceil

    注意:

    nearMaxBpsPerSecond的单位是bpsavgPktSizeavgPerFrameSize的单位为bytes,responseTime的单位为ms

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

    rtt默认值是200ms

    举例:

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

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

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

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


    乘性增的计算公式 multiplicative

    multiplicativeIncreaseBps =min( currentBitrate*(alpha-1.0),       1000)

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

    alpha = alpha^{timeSinceLastUpadate}

    timeScienceLastUpdate = min( \frac{nowMs-lastMs}{1000} , 1.0), 单位是秒

    所谓的乘性增也是slow start,因为timeScienceLastUpdate最大取值为1,所以alpha放大因子的取值范围[1, 1.08],也就推导出multiplicativeIncreaseBps的取值范围为[1000, 1.08*currentBitrate]


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

    timeToRecoverDecreaseSeconds=\frac{lastDecrease}{increaseRateBpsPerSecond}

    lastDecrease为0,timeToRecoverDecreaseSeconds默认返回3秒;

    2、降低带宽

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

    newBitrate=estimatedBitrate*beta

    beat=0.85

    如果newBitrate > currentBitratelinkCapacity有估计值,则newBitrate=linkCapacity*beta


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

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

    相关文章

      网友评论

          本文标题:GCC AIMD细节

          本文链接:https://www.haomeiwen.com/subject/vbsuwqtx.html