提高 Linux 上 socket 性能[图]
日期:2007年6月10日 作者: 相关tags: 提高 Linux socket 性能-
解决方案
您应该考虑的第一件事情是 Nagle 算法满足一种需求。由于这种算法对数据进行合并,试图构成一个完整的 TCP 报文段,因此它会引入一些延时。但是这种算法可以最小化在线路上发送的报文的数量,因此可以最小化网络拥塞的问题。
但是在需要最小化传输延时的情况中,Sockets API 可以提供一种解决方案。要禁用 Nagle 算法,您可以设置
TCP_NODELAYsocket 选项,如清单 1 所示。
清单 1. 为 TCP socket 禁用 Nagle 算法
int sock, flag, ret; /* Create new stream socket */ sock = socket( AF_INET, SOCK_STREAM, 0 ); /* Disable the Nagle (TCP No Delay) algorithm */ flag = 1; ret = setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) ); if (ret == -1) { printf("Couldn't setsockopt(TCP_NODELAY)\n"); exit(-1); }
提示:使用 Samba 的实验表明,在从 Microsoft® Windows® 服务器上的 Samba 驱动器上读取数据时,禁用 Nagle 算法几乎可以加倍提高读性能。
技巧 2. 最小化系统调用的负载
任何时候通过一个 socket 来读写数据时,您都是在使用一个系统调用(system call)。这个调用(例如
read或write)跨越了用户空间应用程序与内核的边界。另外,在进入内核之前,您的调用会通过 C 库来进入内核中的一个通用函数(system_call())。从system_call()中,这个调用会进入文件系统层,内核会在这儿确定正在处理的是哪种类型的设备。最后,调用会进入 socket 层,数据就是在这里进行读取或进行排队从而通过 socket 进行传输的(这涉及数据的副本)。这个过程说明系统调用不仅仅是在应用程序和内核中进行操作的,而且还要经过应用程序和内核中的很多层次。这个过程耗费的资源很高,因此调用次数越多,通过这个调用链进行的工作所需要的时间就越长,应用程序的性能也就越低。
由于我们无法避免这些系统调用,因此惟一的选择是最小化使用这些调用的次数。幸运的是,我们可以对这个过程进行控制。
解决方案
在将数据写入一个 socket 时,尽量一次写入所有的数据,而不是执行多次写数据的操作。对于读操作来说,最好传入可以支持的最大缓冲区,因为如果没有足够多的数据,内核也会试图填充整个缓冲区(另外还需要保持 TCP 的通告窗口为打开状态)。这样,您就可以最小化调用的次数,并可以实现更好的整体性能。
技巧 3. 为 Bandwidth Delay Product 调节 TCP 窗口
TCP 的性能取决于几个方面的因素。两个最重要的因素是链接带宽(link bandwidth)(报文在网络上传输的速率)和 往返时间(round-trip time) 或 RTT(发送报文与接收到另一端的响应之间的延时)。这两个值确定了称为 Bandwidth Delay Product(BDP)的内容。
给定链接带宽和 RTT 之后,您就可以计算出 BDP 的值了,不过这代表什么意义呢?BDP 给出了一种简单的方法来计算理论上最优的 TCP socket 缓冲区大小(其中保存了排队等待传输和等待应用程序接收的数据)。如果缓冲区太小,那么 TCP 窗口就不能完全打开,这会对性能造成限制。如果缓冲区太大,那么宝贵的内存资源就会造成浪费。如果您设置的缓冲区大小正好合适,那么就可以完全利用可用的带宽。下面我们来看一个例子:
- 上一页 [1] [2] [3] [4] [5] [6] 下一页
-
- 提高 Linux 上 socket 性能[图] 相关文章:
- ·提高网店人气 打造 可爱店铺收藏图片
- ·黎明中的64位 Win XP64位与32位性能对比
- ·让Linux挂载NTFS
- ·提高你的Win7 操作系统的响应速度
- ·如何优化无线路由器设置 提高下载速度
- ·Tomcat在Linux操作系统下安装的方法
- ·Linux操作系统源代码详细分析
- ·到底值不值得买 廉价四核CPU性能测试
- 提高 Linux 上 socket 性能[图] 相关软件
- ·UNIX和Linux权威教程 (第三版)
- ·Linux网络安全及其优化
- ·清华Linux系列讲座之二
- ·上海某公司Linux机密培训文件
- ·Linux鸟哥私房菜-基础学习篇(第二版)
- ·Linux使用指南
- ·Visual Basic 6.0中文版范例入门与提高
- ·恩信科技开源ERPLinux部署版 6.30
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:解开Windows的Administrator帐号的两个疑问
下一篇:Redhat升级至2.6.0!Vmware成功案例——说明如何配置VMware中的SCSI驱动[组图]
