| Gzu521.com我的学习网 |
|
清单 2. 手动设置发送和接收 socket 缓冲区大小 在 linux 2.6 内核中,发送缓冲区的大小是由调用用户来定义的,但是接收缓冲区会自动加倍。您可以进行 getsockopt 调用来验证每个缓冲区的大小。 就 window scaling 来说,tcp 最初可以支持最大为 64kb 的窗口(使用 16 位的值来定义窗口的大小)。采用 window scaling(rfc 1323)扩展之后,您就可以使用 32 位的值来表示窗口的大小了。gnu/linux 中提供的 tcp/ip 栈可以支持这个选项(以及其他一些选项)。 提示:linux 内核还包括了自动对这些 socket 缓冲区进行优化的能力(请参阅下面 表 1 中的 tcp_rmem 和 tcp_wmem),不过这些选项会对整个栈造成影响。如果您只需要为一个连接或一类连接调节窗口的大小,那么这种机制也许不能满足您的需要了。 技巧 4. 动态优化 gnu/linux tcp/ip 栈 标准的 gnu/linux 发行版试图对各种部署情况都进行优化。这意味着标准的发行版可能并没有对您的环境进行特殊的优化。 解决方案 gnu/linux 提供了很多可调节的内核参数,您可以使用这些参数为您自己的用途对操作系统进行动态配置。下面我们来了解一下影响 socket 性能的一些更重要的选项。 在 /proc 虚拟文件系统中存在一些可调节的内核参数。这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 cat 工具进行读取,或使用 echo 命令进行修改。清单 3 展示了如何查询或启用一个可调节的参数(在这种情况中,可以在 tcp/ip 栈中启用 ip 转发)。 [root@camus]# cat /proc/sys/net/ipv4/ip_forward 0 [root@camus]# echo "1" > /poc/sys/net/ipv4/ip_forward [root@camus]# cat /proc/sys/net/ipv4/ip_forward 1 [root@camus]# 清单 3. 调优:在 tcp/ip 栈中启用 ip 转发 与任何调优努力一样,最好的方法实际上就是不断进行实验。您的应用程序的行为、处理器的速度以及可用内存的多少都会影响到这些参数影响性能的方式。在某些情况中,您认为有益的操作可能恰恰是有害的(反之亦然)。因此,我们需要逐一试验各个选项,然后检查每个选项的结果。换而言之,我们需要相信自己的经验,但是对每次修改都要进行验证。 |
责任编辑:gzu521