MIMD可以收敛吗?显然不可以:
有趣且简单的是,如果不主动执行MD,假设无限buffer,瓶颈带宽反而可以收敛到公平:
理解这个很简单,设置 G G G为pacing rate增益, a a a, b b b分别为两条流的当前pacing rate,其中 a > b a > b a>b,且恰好 a + b = 1 a+b=1 a+b=1,那么,当它们的pacing rate分别(注意是分别,不能同时)进行一轮增益后,由于buffer无限,它们buffer的占比即为瓶颈带宽的占比,它们的瓶颈带宽分别为 G ∗ a 1 + ( G − 1 ) ∗ a \dfrac{G*a}{1+(G-1)*a} 1+(G−1)∗aG∗a, 1 − G ∗ a 1 + ( G − 1 ) ∗ a 1-\dfrac{G*a}{1+(G-1)*a} 1−1+(G−1)∗aG∗a以及 1 − G ∗ b 1 + ( G − 1 ) ∗ b 1-\dfrac{G*b}{1+(G-1)*b} 1−1+(G−1)∗bG∗b, G ∗ b 1 + ( G − 1 ) ∗ b \dfrac{G*b}{1+(G-1)*b} 1+(G−1)∗bG∗b。
两条流的收敛比例分别为 G 1 + ( G − 1 ) ∗ a \dfrac{G}{1+(G-1)*a} 1+(G−1)∗aG, G 1 + ( G − 1 ) ∗ b \dfrac{G}{1+(G-1)*b} 1+(G−1)∗bG,注意分母,流A的收敛比分母更大,因此它的收敛比例更小。渐渐地,两条流就会收敛到公平,也就是上面的图。
但是,如果两条流的pacing rate同时增益,便无法收敛了,两者收敛比一致,这便是一种新的全局同步,实际使用中可以依靠随机化增益周期避免。
BBR其实就是以此为依据的一个rate-based算法,额外地,BBR增加了Drain操作,避免了buffer持续堆积,同时加入ProbeRTT主动收敛。若不如此,仅通过buffer也是可以被动收敛的。
buffer是一个大舞台,整队,表演,任何填进去的东西终将内卷成输出的瓶颈带宽,若要输出占比增加,就要多占buffer,这是一种罪恶。
浙江温州皮鞋湿,下雨进水不会胖。