TCP_BBR 算法笔记

6460阅读 0评论2017-03-15 frankzfz
分类:LINUX

  1. Tcp_bbr注册了一个拥塞算法的回调函数cong_control,不再关心TCP原先的各种拥塞状态,直接在拥塞算法中进行自己的状态转换,进行带宽判断和发送。

2.  在bbr的拥塞算法中有四个状态,BBR_STARTUP  BBR_DRAIN  BBR_PROBE_BW  BBR_PROBE_RTT,其中BBR_STARTUP是初始化的状态,这是一个快速填满带宽的过程,BBR_DRAIN  状态表明发生了拥塞,需要出让一些带宽出来,BBR_PROBE_BW是一个稳定的状态,也就是一个相对匀速状态,

static const int bbr_pacing_gain[] = {

        BBR_UNIT * 5 / 4,       /* probe for more available bw 为了探测更多的带宽 */

        BBR_UNIT * 3 / 4,       /* drain queue and/or yield bw to other floiws出让一些带宽给其他的流*/

        BBR_UNIT, BBR_UNIT, BBR_UNIT,   /* cruise at 1.0*bw to utilize pipe, */

        BBR_UNIT, BBR_UNIT, BBR_UNIT    /* without creating excess queue... */

};

这个数组中有8个元素,表示的是发送速率的增益系数,

    PROBE_RTT表示连续一段时间(min_rtt_win_sec窗口内 默认10)采集到的RTT均比系统已保存的最小RTT(上个min_rtt_win_sec窗口内的最小RTT)更大,这说明发生了拥塞,原先最小RTT曾经达到过,那么它就是一个可以达到的值,在10秒的周期里没有达到,那肯定是发生了什么事件阻止该周期内的RTT达到曾经的最小RTT。这个事件一定是拥塞!

一个长连接处于的状态应该是PROBE_BW 

在进入到PROBE_RTT状态后,如果在10秒中内填满了带宽,那么就会进入PROBE_BW状态,否则进入BBR_STARTUP状态,重新开始填满管道


  3.  bbr 算法最终会稳定在BBR_PROBE_BW状态,在这个状态中会使用到bbr_pacing_gain数组来调整发送速率的增益系数,如下图所示,bbr 发现带宽富余的最短时间就是6RTT,为什么是6个?这是有数组bbr_pacing_gain决定的,数组的最后六个元素BBR_UNIT, BBR_UNIT, BBR_UNIT,   /* cruise at 1.0*bw to utilize pipe, */

BBR_UNIT, BBR_UNIT, BBR_UNIT    /* without creating excess queue... */
4.  BBR算法对RTT变大的反应,假设RTT突然变大,可能并不是真的发生了拥塞,只是链路的波动,BBR算法并不对其进行反应,照样进行匀速的发送,但是这里有个时间窗口的限制,10秒中,如果在一个时间窗口内持续没有采集到更小的RTT,那么就会将当前的RTT赋值给最小RTT,说明发生了拥塞,如果只是徒增的RTT,并不会影响BBR的发送速率。
5. 使用新的内核
   对于centos6.0

  rpm --import  

  rpm -Uvh
  yum -y --enablerepo=elrepo-kernel install kernel-ml
sed -i 's:default=.*:default=0:g' /etc/grub.conf

 对于 CentOS 7

rpm --import

rpm -Uvh

yum --enablerepo=elrepo-kernel install kernel-ml –y

      egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

grub2-set-default 0  
针对centos6.0/7.0进行一键安装:
wget -O- | bash  



上一篇:LVS 内核实现分析(3)
下一篇:使用SPEC文件编译内核rpm包