提高 Linux 上 socket 性能
日期:2007年6月10日 作者:-
BDP = link_bandwidth * RTT如果应用程序是通过一个 100Mbps 的局域网进行通信,其 RRT 为 50 ms,那么 BDP 就是:
100MBps * 0.050 sec / 8 = 0.625MB = 625KB注意:此处除以 8 是将位转换成通信使用的字节。
因此,我们可以将 TCP 窗口设置为 BDP 或 1.25MB。但是在 Linux 2.6 上默认的 TCP 窗口大小是 110KB,这会将连接的带宽限制为 2.2MBps,计算方法如下:
throughput = window_size / RTT
110KB / 0.050 = 2.2MBps如果使用上面计算的窗口大小,我们得到的带宽就是 12.5MBps,计算方法如下:
625KB / 0.050 = 12.5MBps差别的确很大,并且可以为 socket 提供更大的吞吐量。因此现在您就知道如何为您的 socket 计算最优的缓冲区大小了。但是又该如何来改变呢?
解决方案
Sockets API 提供了几个 socket 选项,其中两个可以用于修改 socket 的发送和接收缓冲区的大小。清单 2 展示了如何使用
SO_SNDBUF和SO_RCVBUF选项来调整发送和接收缓冲区的大小。注意:尽管 socket 缓冲区的大小确定了通告 TCP 窗口的大小,但是 TCP 还在通告窗口内维护了一个拥塞窗口。因此,由于这个拥塞窗口的存在,给定的 socket 可能永远都不会利用最大的通告窗口。
清单 2. 手动设置发送和接收 socket 缓冲区大小
int ret, sock, sock_buf_size; sock = socket( AF_INET, SOCK_STREAM, 0 ); sock_buf_size = BDP; ret = setsockopt( sock, SOL_SOCKET, SO_SNDBUF, (char *)&sock_buf_size, sizeof(sock_buf_size) ); ret = setsockopt( sock, SOL_SOCKET, SO_RCVBUF, (char *)&sock_buf_size, sizeof(sock_buf_size) );
在 Linux 2.6 内核中,发送缓冲区的大小是由调用用户来定义的,但是接收缓冲区会自动加倍。您可以进行
getsockopt调用来验证每个缓冲区的大小。
巨帧(jumbo frame)
- 上一页 [1] [2] [3] [4] [5] 下一页
-
- 提高 Linux 上 socket 性能 相关文章:
- ·Linux操作系统介绍
- ·Linux学习手册
- ·修改Tcpip Window值提高网速大揭秘
- ·linux知识大全
- ·Linux主要shell命令详解
- ·Linux操作系统源代码详细分析
- ·Linux常用命令全介绍
- ·LINUX 常见问题1000个详细解答
- 提高 Linux 上 socket 性能 相关软件
- ·VMware Workstation 6.5 Build 91182 Beta for Linux
- ·Adobe Flash Player for Linux v10.0.1.218
- ·vc++入门提高
- ·McAfee VirusScan DAT 5489 for linux
- ·VLC Media Player(VideoLAN) 0.8.6h for Linux
- ·vb6.0入门提高
- ·《GameHike》游戏性能优化工具V1.5.30.2005
- ·Windows Sockets 完全进阶
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:解开Windows的Administrator帐号的两个疑问
下一篇:Redhat升级至2.6.0!Vmware成功案例——说明如何配置VMware中的SCSI驱动
