从linux内核源码着手分析bbr

总结:bbr在20%丢包以内表现很好

设丢包率为  ,BltBW为  ,很显然有效传输率为  ,BBR在ProbeBW状态的1.25倍速的up probe探测,若要抵消丢包,维持带宽  ,则必须保证:

 解得  的值为0.2,也就是20%,正中上图。如果我们把固定的增益系数1.25抽象成一个可以调节的参数,那么会得到一个在该增益系数下的丢包率崖点:

 丢包率超过该值,有效带宽将会以  的速度快速衰减。

probe bw阶段的gain为1.25 

pacing = 瓶颈带宽 * gain 

pacing 每间隔5ms执行一次。我理解为,

while (true) {

for (int i = 0; i < pacing; i++) {send(ms);}

usleep(5000);

}

1 首先看看初始化窗口size

初始化的时候是10个mss,要不然就是通过min rtt和探测到的bw计算出来的。bw 为带宽横截面积,gain为增益系数

2 探测RTT

 上面代码是探测数据回调,如果探测到的最新RTT小于之前记录的,就更新一下,并且更新下min rtt得到的时间戳。

这个函数从哪里调用过来的?

.cong_control = bbr_main->bbr_update_model->bbr_update_min_rtt(sk, rs);

 

3 具体RTT探测过程

先是清除一下probe_rtt_done_stamp 这个变量,清除之后,表示要开始RTT探测了。如果判断为0,就进入RTT探测阶段,这里探测过程为200ms。

bbr->probe_rtt_done_stamp = tcp_jiffies32 + msecs_to_jiffies(bbr_probe_rtt_mode_ms); // PROBE RTT状态保持200ms

4 检查是否探测完成,检查的是时间是否过期

 5 更新瓶颈带宽

elapsed 这里指的就是时长,发送delivered包量花的时间。

6 通过BW瓶颈带宽,计算得到pacing过程

7 接下来看bbr状态机切换过程

(1)Startup->drain模式

 

drain -> probe bw

probe bw->probe rtt 这个是通过10s一次检测的,上面讲解过了。

8 最后分析一下full_bw_reached 状态是怎么达到的?

可以理解为,保持了3次坚持到的bw值达到预测的值了。就重新进入Probe bw状态,再次probe bw瓶颈带宽。

备注:还有一些细节没有完全看明白,欢迎交流。 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值