目录
BBR 源码文件的描述
* A BBR flow starts in STARTUP, and ramps up its sending rate quickly.
* When it estimates the pipe is full, it enters DRAIN to drain the queue.
* In steady state a BBR flow only uses PROBE_BW and PROBE_RTT.
* A long-lived BBR flow spends the vast majority of its time remaining
* (repeatedly) in PROBE_BW, fully probing and utilizing the pipe's bandwidth
* in a fair manner, with a small, bounded queue. *If* a flow has been
* continuously sending for the entire min_rtt window, and hasn't seen an RTT
* sample that matches or decreases its min_rtt estimate for 10 seconds, then
* it briefly enters PROBE_RTT to cut inflight to a minimum value to re-probe
* the path's two-way propagation delay (min_rtt). When exiting PROBE_RTT, if
* we estimated that we reached the full bw of the pipe then we enter PROBE_BW;
* otherwise we enter STARTUP to try to fill the pipe.
四个阶段理想状态图
BBR全状态图 :
PROBE_BW状态细节:
STARTUP :TCP连接启动后进入的阶段,主要目的是带宽探测,要考虑收敛性,快速的收敛到链路的最大带宽。该状态退出的条件是当前已经采集到了链路的最大带宽。
DRAIN:在STARTUP阶段最大链路带宽的采集是粗暴的,会导致很多数据报文缓存在链路的buffer中,链路的最大带宽不会因为中间链路数据缓存了而增大,所以需要排空这些缓存的数据。该状态的退出条件infilgh的报文数量刚好等于max bw对应的cwnd。
PROBE_BW:带宽的利用和上探阶段,一方面保证被探测到的带宽被充分利用,另外还实时上探感知链路带宽的变化。
PROBE_RTT:多流公平性考虑引入的超级机制,在PROBE_BW状态持续很长时间后,需要惩罚他,释放出部分带宽给其他流使用。
STARTUP进入和退出条件
1. TCP连接初始化启动,默认进入STARTUP阶段;
2. TCP连接在PROBE_RTT状态退出时,如果当前没有采集到full bw,进入STARTUP状态
3. 在STARTUP阶段采集到full bw后,退出STARTU,进入DRAIN状态
DRAIN进入和退出条件
1. 在STARTUP阶段采集到full bw后,退出STARTU,进入DRAIN状态
2. 在DRAIN状态,当前inflight数量小于等于max bw换算的target cwnd时,退出DRAIN,进入PROBE_BW状态。
PROBE_BW进入和退出条件
1. 在DRAIN状态,当前inflight数量小于等于max bw换算的target cwnd时,退出DRAIN,进入PROBE_BW状态。
2. TCP连接在PROBE_RTT状态退出时,如果采集到full bw,进入PROBE_BW状态
3. 在PROBE_BW状态太长时间,从没有采集到更小rtt起,持续10s后进入PROBE_RTT状态
PROBE_RTT进入和退出条件
1. 在PROBE_BW状态太长时间,从没有采集到更小rtt起,持续10s后进入PROBE_RTT状态
2. 在PROBE_RTT状态持续200ms后,退出PROBE_RTT状态,进入STARTUP或者PROBE_BW状态。
PROBE_BW内部状态分析
跟进PROBE_BW状态的pacing 系数,可以分为3中状态:
1. 系数大于1, 带宽上探测状态,简称为PROBE_UP
2. 系数小于1,带宽上探后drain,简称为PROBE_DOWN
3. 系数等于1,带宽充分利用状态,简称为PROBE_USE
PROBE_UP状态进入和退出
1. 刚进PROBE_BW时的第一个小状态,随机进入
2. PROBE_BW状态时内部小状态轮询依次进入
3. 退出条件,当前PROBE_UP持续了min_rtt_us时间,并且发生了丢包或者inflight大于max bw换算的target cwnd。
PROBE_DOWN状态进入和退出
1. 刚进PROBE_BW时的第一个小状态,随机进入
2. PROBE_BW状态时内部小状态轮询依次进入
3. 退出条件,当前PROBE_UP持续了min_rtt_us时间,或者inflight小于等于max bw换算的target cwnd。
PROBE_USE状态进入和退出
1. 刚进PROBE_BW时的第一个小状态,随机进入
2. PROBE_BW状态时内部小状态轮询依次进入
3. 在PROBE_USE状态持续了min_rtt_us时间,直接退出
后续
机制的合理性和优化策略。