+ -
当前位置:首页 → 问答吧 → 转帖-基于TCP的通信程序的吞吐率如何能够达到网络带宽的90%以上

转帖-基于TCP的通信程序的吞吐率如何能够达到网络带宽的90%以上

时间:2010-07-04

来源:互联网

csdn上的一个问题:目前还没有明确的答案,转过来给cuer看看!

最近写了一个最基于的文件传输程序,基于TCP实现。网络拓扑非常简单:即一台服务器与一台客户机通过一个交换机直接连接。服务器与客户端的网上速率均为 1Gbps,交换机的速率也是1Gbps。使用阻塞式的socket,网络吞吐率能够达到700Mbps。通过设定较大的发送/接收缓存、禁用Nagle 算法等进行了优化,吞吐率仍然为700Mbps左右。

但一些发表的论文在考虑这种简单的拓扑,而且网络中只考虑一条流的情况下,基于 TCP的通信程序的吞吐率能够达到90%以上。

在这里我就请问各位是否关注过这方面的内容,如何能够实现基于TCP的通信程序的吞吐率如何能够达到网络带宽的90%以上?在我所列出的拓扑环境下,即达到900Mbps以上的吞吐率。

谢谢!

作者: cskyrain   发布时间: 2010-07-04

sysctl -w net.inet.tcp.recvspace=10485760
sysctl -w net.inet.tcp.sendspace=10485760

GE 铜线到达 112 兆字节/秒就差不多了。别忘记,以太网头部 + IP 头部 + TCP 头部 + TCP flow control + HTTP chunked transfer,这都是开销。

作者: langue   发布时间: 2010-07-04

用多播,同时传多台机子,然后把传输量累加起来算,就远远高于90%了。我试过一次20台,交换机直连。

作者: 没本   发布时间: 2010-07-04

学习了

作者: linuxlixk   发布时间: 2010-07-04



QUOTE:
sysctl -w net.inet.tcp.recvspace=10485760
sysctl -w net.inet.tcp.sendspace=10485760

GE 铜线到达  ...
langue 发表于 2010-07-04 15:16



HTTP chunked transfer 是什么?  http头么?

作者: xinglp   发布时间: 2010-07-04



QUOTE:
csdn上的一个问题:目前还没有明确的答案,转过来给cuer看看!

最近写了一个最基于的文件传输程序,基于 ...
cskyrain 发表于 2010-07-04 14:35




    1.   大包发送,每包至少4K以上,如果可能就1M-10M的包。
   2。 发送后不求回执,连续发多包才清点回执。

作者: yulihua49   发布时间: 2010-07-04

换成100M的以上的网

作者: smalloc   发布时间: 2010-07-04

1. 从编程角度上说,你不该用阻塞模式,这可能就决定你的发送模式,也就可能导致你不能充分使用网络
2. 禁用不用禁用尼格尔跟这没关系
3. 不知道你是怎么统计的,你可以看一下  /proc/net/dev 中实际服务器的流量
4. 如果客户端收的效率低,那么服务器也发不出去

作者: cookis   发布时间: 2010-07-04

作者: langue   发布时间: 2010-07-04



QUOTE:
1. 从编程角度上说,你不该用阻塞模式,这可能就决定你的发送模式,也就可能导致你不能充分使用网络
2. 禁 ...
cookis 发表于 2010-07-04 18:56



同意楼上的说法,最好使用非堵塞模式。
使用非阻塞模式,也可以实现传统的同步收发。
对收发数据可以稍稍优化,以发送为例:

while (还有数据要发送)
{
    直接尝试发送,如果成功,continue;
    否则使用 select或poll堵塞住,直到可以发送或者超时。如果可以发送,continue; 如果超时,直接返回错误
}

同理,接收也是类似的做法。
我做过测试,这样的收发方式,比传统的select后再收发的做法,效率能提高差不多20%。
LZ可以试一下,相信会有惊喜。

作者: happy_fish100   发布时间: 2010-07-04

慢慢学习

作者: coac   发布时间: 2010-07-04

mark,学习

作者: ^^   发布时间: 2010-07-04

回复 langue


   这个极小了,  而且搂住用http的话,应改用静态文件测试吧, 一般只有php一类的东西才会出chunck

作者: xinglp   发布时间: 2010-07-04