BBR 公平收敛在相图中的细节 和 aimd,bbr,inflt 守恒的收敛相图总结 已经介绍了 BBR 的 gain 不公平性,本文介绍 BBR 的 RTT 不公平性。
直觉上,BBR 采用 probe_quota = gain * maxbw * minrtt 来 probe 带宽,minrtt 越大,probe 力度越大,就跟 gain 越大,probe 力度越大一样。
给出以下代码,获得直感:
for n in range(1, len(times)):
if n % rttx == 0:
x[n] = x[n-1] + dt * (C*g1*x[n-1]*rttx/(g1*x[n-1]*rttx + wy[n-1] + wz[n-1]) - x[n-1])
wx[n] = x[n]*rttx
else:
x[n] = x[n-1]
wx[n] = wx[n-1]
if n % rtty == 0:
...
r1[n] = wx[n]/x[n]
r2[n] = wy[n]/y[n]
r3[n] = wz[n]/z[n]
if r1[n] < rttx:
r1[n] = rttx
if r2[n] < rtty:
r2[n] = rtty
if r3[n] < rttz:
r3[n] = rttz
运行看结果,同时展示 gain 不公平性和 RTT 不公平性,参数在图头:
看 probe_quota 的定义,同频不同 gain 的效果和异频同 gain 的效果一致,后者只需归一化 RTT,就能得到不同的 gain,然后套用 bw1:bw2 = g1:g2 来定调。
所以怎么办?
让 RTT 和 gain 反比即可,这就又是一个调参的体力活,无非就是搜集现网数据,拟合这些数据,获得一个最佳的 k = gain * RTT,让 k 变成可调的,随便给个建议值,自己调去吧。
我姑且论 k = 100,再次运行上述例子:
K = 100#1.25*71
for n in range(1, len(times)):
if n % rttx == 0:
x[n] = x[n-1] + dt * (C*(K/r1[n-1])*x[n-1]*rttx/((K/r1[n-1])*x[n-1]*rttx + wy[n-1] + wz[n-1]) - x[n-1])
wx[n] = x[n]*rttx
else:
x[n] = x[n-1]
wx[n] = wx[n-1]
跑起来,看结果:
值得注意的是,如何确保 K/rtt > 1,另外,为什么我用 K/srtt(或 irtt) 而不是 K/minrtt,理由是这里有个可用的负反馈,如果 srtt 过大了,说明 queuing 趋向严重,g = K/srtt 趋向变小,减少 queuing。
浙江温州皮鞋湿,下雨进水不会胖。