周末修正了 westwood 算法,补充了鲁棒性:TCP Westwood 更新
westwood 是针对 Reno 的一种优化:Westwood - C3Lab
正好就着这个修改继续解释一下 “效率和公平”。
效率和公平总是不能两全其美的,高效必然不公平,公平必然不高效,也是众所周知。比较有趣的是,这个事实可在经典的收敛图上直观展示:
稍微解释一下:
bw 线左下描述未被利用的带宽,AIMD 越多经过该区域,越低效。
非常直观,Reno 收敛很快,但总带宽利用率很低,而 Westwood 很高效,但却收敛很慢。
增加的鲁棒性取一段时间内相对大带宽,可轻易越过背景流的进出导致的丢包影响,显然提高了带宽利用率,便损害了公平性,这点要承认。
BBR 的一个显著问题是,多流场景,任何流只要 probe,就一定能挤出更大的带宽被 windowed max-filter 记录:
这种情况要持续 1 round,理想单流单独打满所谓瓶颈带宽的情况几乎不存在。
westwood- 代码改自 westwood。文中所谓丢包率和重传率的关系,并不是设置 10% 丢包率就一定丢 10% 的包,若发生拥塞,很多丢包是不收敛造成的,此外,要理解算法对丢包的反应,如果丢包就收敛,带宽利用率指定上不来,鲁棒性在于在一定时间窗口内,尝试不收敛退避,用拥塞后继续丢包的代价换取对噪声丢包容忍性,时间窗口过了,算法也就反应过来了,执行收敛退避。
重传率不增加,这本身就意味着算法是对的。如果用最流氓的固定窗口的算法,比如 cwnd = 10000 写死,在经过固定 buffer 但不丢包的链路上,重传率是多少?
浙江温州皮鞋湿,下雨进水不会胖。