本文主要是介绍为什么 buffer 越大传输效率越低,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先看 从边际效益递减看 buffer 中挤占带宽 中的两个模型:
- E1 = inflight_prop - inflight_buff: y = 2 t x − b x a − x y=2tx-\dfrac{bx}{a-x} y=2tx−a−xbx
- E2 = bw / delay: y = a x − x 2 b + t a − t x y=\dfrac{ax-x^2}{b+ta-tx} y=b+ta−txax−x2
其中,E 为效益,编号 1,2 区分两个模型,公式中均以 y 表示,x 表示一条流的有效带宽,a 为瓶颈链路总带宽,b 为 buffer 已填充大小,c 为单向传播时延。
首先,固定 a 和 c,控制 b,动图如下:
一目了然:
- buffer 填充越大,E1 和 E2 最大值绝对值均单调减小,取最大值时的 x 单调减小。
简单解释一下,E 的绝对值减小意味着效益度量值减小,即低效的意思,而最大值时的 x 减小意味着收益(注意和效益的区别)在减小。
结论是,buffer 越大,能效越低,收益越低。
现在固定 a,b,控制 c:
一目了然:
- c 越大,E1,E2 取得最大值时的 x 单调递增;
- c 越大,E1 最大值单调递增,E2 最大值单调递减。
简单解释一下,c 越大,rtt 越大,管道长短视为固有属性,E1 最大值同步增加意味着 c 越大,挤占 buffer 的收益带来的总效能越大,这件事值得做,反之,c 越小,小 rtt 链路挤占 buffer 就是相对出大力而不讨好了。
对 E2 而言,c 越大,E2 最大值反而越小,意味着越长的链路挤占 buffer 的收益越被淹没,属于出大力亦不讨好。
但无论 E1 还是 E2,c 越大,取得最大值时的 x 都单调递增,意味着如果链路过长,有 buffer 就去挤占吧。
综上:
- buffer 越大,能效越低,收益越低;
- 链路越长,挤占 buffer 收益明显,但总效益被淹没;
- 链路越短,挤占 buffer 越困难;
- 如果 buffer 已部署,不要谦让。
看看,是不是所有 reno,cubic,vegas,bbr 的配置部署建议都在里面了。但总的结论还不是这,总的结论是,不要寄希望于增加 buffer 以提高传输效率,buffer 越大越低效,违反直觉了吧,这就对了。特别针对数据中心,小 rtt 短肥管道,看上面的动图,孰轻孰重。
sender 收着点,姿势对了才舒服。
浙江温州皮鞋湿,下雨进水不会胖。
这篇关于为什么 buffer 越大传输效率越低的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!