Implementation of Algorithms

BBR

C++ 实现
reproduce BBR
BBR Plus 安装方法
切换内核版本,因为bbr的版本会有启动时的bug
google cloud 所需要使用的文件 /etc/default/grub.d/50-cloudimg-settings.cfg
BBR plus 魔改前的最后一个版本,用于比对
dog520对于BBR的一些分析理解
多个BBR竞争的收敛速度
漫谈TCP BBR的收敛动力学(convergence dynamics)
如果一个算法的某处说明没有数学支撑,那肯定是不能令人放心的,BBR的收敛性模型从来都是模糊的,不如AIMD那样直接,但还是有一些有意思的动力学过程在里面的。 在Neal Cardwell的github里藏着一篇关于BBR收敛动力学的文档 BBR bandwidth-based convergence : https://github.com/google/bbr/commit/c38ae279b67fe1e9b485903daa3f808f7c6e44d4 这篇文档的结论是: 该结论对应的截图如下: 以下是Neal的推导过程: 看完了这个推导,我在BBR的convergence region坐标里画了一个具体的收敛过程。 我自中学就喜欢各种几何,所以一有实际问题,我总喜欢把它们摆在一个坐标系里比划,我对在坐标系里解决问题的方法情有独钟,这也算是我的一种方法论。 首先我来解释一下convergence region坐标系各个元素的含义: 总带宽为1的约束下,设A,B两条流初始带宽分别为和 1 − a 1-a a ,则该状态在convergence region坐标系的坐标为,如果它们分别up probe一次,则它们将获得不同的带宽,于是便可以得到A,B两条流各自的带宽增量表达式。 注意,坐标系中各个点的坐标通过解析几何的各种方法很容易计算,比如直线求交点。 用GeoGebra画出二者的图像: 下面是A,B两条流在ProbeBW状态的收敛过程(先不管ProbeRTT状态): 不断收敛的BltBW坐标在convergence region坐标系中攀爬的典型过程如下: 这个ProbeBW状态下收敛过程的核心正是那个时间窗口内的max-filter函数,它可以让一条流继续使用已经被抢占的带宽继续up probe,这个正是Neal推导的那个带宽与加速比的负相关性得以运作的核心: max BltBW是即时采集到的,但max BltBW的衰减是缓慢进行的,利用时间差来进行up probe的收敛。 如果没有上述不对称的过程,假设BltBW的感知是即时的,当使用即时的BltBW去进行up probe的时候,事实上是不会收敛的: 这明显是一个MAMD(Multiplicative Increase and Multiplicative Decrease)过程,inflight按照乘性系数伸缩,收敛点永远在同一条直线上。 所以说,不能离开max-filter函数。这就是 Note that even after flow A probes, flow B's estimated bandwidth would be a function of B's max-filtered bandwidth samples, which would still include at least one round-trip of the rate "b".
BBR遇到wifi弱网

COPA & Cubic

Generic CC 通过C++ 实现的Copa, Cubic,TCP AIMD 算法,可以通过python binding来用python调用
切换不同的kernel算法
'iperf3 -s -i 0.01 --logfile ./logs/trash/2022-04-26-02-49-06_bbr_2hosts_delay=100ms_loss=0_bw=100_duration=10_start_delay=0/hr1_iperf.log -V -J -C bbr ‘