作者:无正道 | 来源:互联网 | 2023-08-19 17:41
请问设大了SO_SNDBUF和SO_RCVBUF是否对传输速度有提高?我试了,好像没啥用
14 个解决方案
这个只是系统缓冲区的大小,发送速度是跟网络状况有关的
撇开网络状况,当然跟自己写的程序性能好坏也有一定的关系
一般网络上允许的最大消息(1460字节)都比你缓冲小,用缓冲对速度基本没什么影响,主要是网络慢
没有用处,网络传送数据由网速与远传设备决定,通常cpu处理速度远大于网路速度,
如果cpu速度与网路速度相差不大,此时程序缓冲区的大小会起作用
一般网络使用时没什么用处,但是在网速理想,不作为瓶颈考虑的情况下还是有影响的。
SO_SNDBUF和SO_RCVBUF设置系统缓冲区的大小,在接受和发送数据时直接影响系统遍历缓冲区的行为,比如你实际发送的数据比较少,接收缓冲区却很大,系统做无效遍历的内容会增多,肯定会影响效率的。
这个我在局域网对一个服务器程序做压力测试时候确定过。
所以一般网络应用不需要自己设置这些数据,系统默认即可,除非你能确定你数据包的大小,才特意修改。
貌似CSDN的老帖子里面有介绍相关的内容,我当时也是看着别人讲的做的。
其实本质上没什么大的区别,但还是设置吧,觉得心里踏实些。
肯定有提高的啊,SO_SNDBUF SO_RCVBUF设置滑动窗口的大小,可以提高吞吐量的。
如果你的带宽足够大时,增加这些缓冲buff才会增加发送速度,否则根本没用。你会发现在同一局部网中加大这个缓冲时,发送速度会加快得很明显。
一般情况下没用,如果是LAN或者网络异常好,设置大一些,会有用
WAN下效果不行的,因为你出去后被路由了多少次你自己也不清楚,数据包很少会超过1K5
当带宽足够大可以令8K的默认发送缓冲buff时,加大了就会提升数据传输速度(适用于LAN或WAN).
当带宽足够大可以令8K的默认发送缓冲buff成为瓶颈时
对传输速度没有提高,但方便了不少,如果你两次发送中的时间相隔很多,还是有提高的。
据我实测内网100M带宽,将SO_SNDBUF、SO_RCVBUF同设为0,并没有见到显著提升性能,反而由于内核直接访问应用层的Buffer(可能是锁机制),而导致应用层的缓冲开销增加了一点,CPU开销基本同没设置前。
如果不设置,通常内核缓冲为8.5K字节,一般情况应该够用了。