Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9291
  • 博文数量: 13
  • 博客积分: 590
  • 博客等级: 中士
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-10 09:41
文章分类
文章存档

2010年(13)

我的朋友
最近访客

分类:

2010-12-06 14:29:13

最小化报文传输的延时

    通过TCP socket进行通信时,数据都被拆分成数据块,这样它们就可以封装到给定连接的TCP payload(指TCP数据包中的有效负荷)中。TCP payload的大小取决于几个因素(如最大报文长度和路径),为了达到较好的性能,应使用尽可能多的可用数据来填充每个报文。当没有足够的数据来填充 payload时(也称为最大报文段长度maximum segment size或MSS),TCP将采用Nagle算法自动将一些小缓冲区连接到一个报文段中。这样可以通过最小化所发送的报文的数量来提高应用程序的效率,并减轻整体的网络拥塞。
    由于这种算法对数据进行合并,试图构成一个完整的TCP报文段,因此会引入一些延时。Socket网络传输很长时间只发送一些较小的报文,比如 telnet程序,它让用户可以与远程系统进行交互,通常通过一个shell来进行,如果用户被要求用发送报文之前输入的字符来填充某个报文段,该方法绝对不能满足需要。再比如HTTP协议,通常客户机浏览器会产生一个小请求(一条HTTP请求消息),然后Web服务器就会返回一个更大的响应(Web页面)。最小化传输延时是首要的。在这种情况中,Socket可以提供一种解决方案,即禁用Nagle算法,可设置TCP_NODELAY socket选项TCP socket禁用Nagle算法。


为Bandwidth Delay Product调节TCP窗口
    TCP的性能取决于几方面因素,最重要的是链接带宽(link bandwidth)(报文在网络上传输的速率)和往返时间(round-trip time)或RTT(发送报文与接收到另一端的响应之间的延时)。这两个值确定称为BDP(Bandwidth Delay Prod-uct)的内容。BDP给出一种简单的方法计算理论上最优的TCP Socket缓冲区大小(其中保存排队等待传输和等待应用程序接收的数据)。缓冲区太小,TCP窗口就不能完全打开,这会限制性能;缓冲区太大,则会浪费宝贵的内存资源;设置的缓冲区大小合适,就可完全利用可用带宽。
    BDP计算公式:
    BDP=link bandwidth×RTT
    若应用程序通过一个100MB/s的局域网通信,其RRT为500ms,则BDP为:50MB/sx0.050/ 8625M=625KB。Linux2.6默认的TCP窗口大小是110KB,这将连接的带宽限制为22M/S,计算方法如下:
    throughput=window_size/RTT
    110 KB /0.05 * 8 =2.2 MB/s
    使用上面计算的窗口大小,得到带宽为12.5 MB/s,即:
    625 KB/0 050=12.5 MB/s
    差别很大,并且可以为Socket提供更大的吞吐量。可以根据自己的Socket计算最优的缓冲区大小。Socket提供几个Socket选项,其中两个可以用于修改Socket的发送和接收缓冲区的大小。使用SO_SNDBUF和SO_RCVBUF选项来调整发送和接收缓冲区的大小。  
阅读(785) | 评论(0) | 转发(0) |
0

上一篇:pthread lock and sem

下一篇:没有了

给主人留下些什么吧!~~