BBR拥塞控制RTT不公平性测试

 通过对BBR拥塞控制的仿真,使我坚信,能够设计一个比BBR拥塞控制还要好的协议,是一件极其困难的事情。
 之前,我在ns3仿真中验证了RTT的公平性特性[1]。使用的拓补很简单,在一个point2point channel中运行了三个数据流。
 但是正如[2]中所言,BBR在在相同rtt的组内维持很好的公平性,但是RTT较大的组却可以获得较大的吞吐量。这个就是RTT的不公平性,传统的AIMD的拥塞控制算法确实利于RTT小的数据流,BBR算法正好于此相反。

Flows with equal RTT converge to a fair share within their group, however, groups with higher RTT claim a bigger share overall.

 论文[3]指出,BBR的存在RTT不公平性现象,即在同一个瓶颈链路中,rtt大的BBR流可以获得大部分带宽,rtt小的BBR流获取的带宽较少,甚至被饿死。这个小缺点可能恶意利用,这个问题使得rtt较小的数据流采用BBR算法,可能并没有达到吞吐量提升的效果。这个特性可以被恶意利用,正如[3]中所述:

BBR’s bias towards long RTTs can be easily manipulated by strategic receivers, who can steal bandwidth by artificially inflating its RTT.

 问题的原因并不太容易解释,[3,4]的解释我没有理解。[7]中的BBR邮件列表对RTT不公平性有所讨论,这个可能是BDP造成的。[3]中给出了一种约束方案,就是流的带宽探索时间相同来缓解公平性问题。
 即时在不公平的带宽分配方案中,链路上流的带宽和基本上和链路的处理能力持平,保证了较高的链路利用率。
 找个一个世界大同的拥塞控制算法,可能不太容易。尤其是对BBR这种基于BDP探索的算法。假设在某个理想点,各个流的发送速率相同,接下来各个数据路按照BDP进行带宽探测,最终也会使得数据流的发送速率偏离公平线。(论证基于假设,带宽的占用与流的BDP有相关性,注意,这个相关不一定是正相关)。
 我在一个dumbbell的拓补上进行仿真。
 带宽占用如下图:
BBR拥塞控制RTT不公平性测试_第1张图片
 我发现,把quic代码中bbr_sender.cc中的drain_to_target_这个开关代开,rtt不公平性的问题就有所缓解。测试图:
BBR拥塞控制RTT不公平性测试_第2张图片
[1] test quic bbr on ns3 https://blog.csdn.net/u010643777/article/details/90758947
[2] Towards a Deeper Understanding of TCP BBR Congestion Control
[3] Fairness of Congestion-Based Congestion Control: Experimental Evaluation and Analysis
[4] Unraveling the RTT-fairness Problem for BBR: A Queueing Model
[5] TCP LoLa: Congestion Control for Low Latencies and High Throughput
[6] TCP-LoLa https://git.scc.kit.edu/TCP-LoLa
[7] BBR high RTT unfairness: Fifty Shades of Congestion Control: A Performance and Interactions Evaluation https://groups.google.com/forum/#!topic/bbr-dev/chcftJgJ3vA
[8] Experimental Evaluation of BBR Congestion Control
[9] Misbehaving TCP Receivers Can Cause Internet-Wide Congestion Collapse

你可能感兴趣的:(仿真)