frankzfz

我只负责认真

  • 博客访问: 2870863
  • 博文数量: 251
  • 博客积分: 5347
  • 博客等级: 大校
  • 技术积分: 13520
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-30 10:13
  • 认证徽章:
文章分类
文章存档

2017年(9)

2016年(7)

2015年(14)

2014年(23)

2012年(9)

2011年(23)

2010年(160)

2009年(6)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
TCP_BBR 算法笔记 2017-03-15 09:56:35

分类: 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 https://www.elrepo.org/RPM-GPG-KEY-elrepo.org  

  rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm 
  yum -y --enablerepo=elrepo-kernel install kernel-ml
sed -i 's:default=.*:default=0:g' /etc/grub.conf

 对于 CentOS 7

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

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- http://soft.wellphp.com/scripts/install_bbr_centos.sh | bash  



阅读(1202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册