ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 不同平台下的网络优化

不同平台下的网络优化

原创 Linux操作系统 作者:BTxigua 时间:2009-03-30 10:17:35 0 删除 编辑
altibase的replication,对于网络传输的速度要求比较高,尤其是在修改量比较大的时候。对于TT也是同样的。
altibase的rep传送的包大小为128K,默认tcp发送窗口大小是小于64K的,在不同的平台下,我们需要优化一些网络参数的配置。

一、AIX下的网络参数优化
oracle推荐设置:
/usr/sbin/no -p -o udp_sendspace=1048576
/usr/sbin/no -p -o udp_recvspace=1048576
/usr/sbin/no -p -o tcp_sendspace=1048576
/usr/sbin/no -p -o tcp_recvspace=1048576
/usr/sbin/no -p -o rfc1323=1
/usr/sbin/no -p -o sb_max=4194304
/usr/sbin/no -r -o ipqmaxlen=512
上面的修改是针对全局进行的设置,全局设置无法应用到具体的网络接口上。还需要针对具体的网络接口进行设置,可以使用下面的命令来进行设置:
chdev -l en0 -a tcparecvspace=1048576 -a rfc1323=1 -a tcp_recvspace=1048576
建议使用smitty命令进行修改,具体的命令如下:
smitty chinet

检查设置的结果:
no –L 检查设置结果
ifconfig –a检查设置结果

针对上面修改的参数说明:
tcp_sendspace ——控制内核中用于缓冲应用程序数据的缓冲区空间大小。您可能希望使其超过缺省值,因为如果达到了限制值,发送应用程序则将挂起数据传输,直到 TCP 将数据发送到缓冲区为止。
tcp_receivespace ——除了控制接收缓冲区所消耗的缓冲区空间总量之外,AIX 还使用这个值来确定其传输窗口的大小。
udp_sendspace ——对于UDP,您可以将这个参数设置为不超过 65536 的值,因为每个 IP 数据包的上限为 65536 个字节。
udp_resvspace ——这个值应该大于 udp_sendpsace,因为它需要处理每套接字的、尽可能多的同步 UDP 数据包。可以简单地将这个参数设置为 udp_sendspace 值的 10 倍。
sb_max ——可调参数为排队等待单个套接字的套接字缓冲区数目设置上限,而这个上限可以控制缓冲区(排队等待发送者或者接收的套接字)所使用的缓冲区空间总量。这个总量通常应该小于 wall,并且近似于tcp 或者 udp 发送和接收设置最大值的 4 倍。例如,如果您的 udp_recvspace 是 655360,那么将其加倍到 1310720 是没有问题的。
rfc1323 ——可调参数支持 TCP 窗口缩放选项,该选项允许 TCP 使用较大的窗口大小。开启这个选项,以支持最佳的 TCP 性能。
ipqmaxlen ——Specifies the number of received packets that can be queued on the IP protocol input queue. Default: 150.


二、Linux下的网络优化参数配置:
具体设置,vi /etc/sysctl.conf
# recommended to increase this for 1000 BT or higher
net.core.netdev_max_backlog = 2500
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_wmem = 4096 65536 25165824
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824        
net.core.rmem_default = 25165824   
net.core.wmem_max = 25165824        
net.core.wmem_default = 65536        
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1        
net.ipv4.tcp_fack =1
net.ipv4.tcp_mem 24576 32768 49152


具体的含义介绍如下:
net.core.netdev_max_backlog = 2500
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_wmem = 4096 65536 25165824        #为自动调优定义每个 socket 使用的内存。第一个值是为socket 的发送缓冲区分配的最少字节数。第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max 覆盖)。
net.ipv4.tcp_rmem = 4096 25165824 25165824        #与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。
net.core.rmem_max = 25165824        #定义最大的TCP/IP栈的接收窗口大小
net.core.rmem_default = 25165824   #定义默认的TCP/IP栈的接收窗口大小
net.core.wmem_max = 25165824        #定义最大的TCP/IP栈的发送窗口大小
net.core.wmem_default = 65536        #定义默认的TCP/IP栈的发送窗口大小
net.ipv4.tcp_sack =1                 #启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。
net.ipv4.tcp_window_scaling = 1        #启用RFC1323定义,支持超过64K窗口
net.ipv4.tcp_fack =1                 #启用转发应答(Forward Acknowledgment),这可以进行有选择应答(SACK)从而减少拥塞情况的发生;这个选项也应该启用。
net.ipv4.tcp_mem 24576 32768 49152 确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节)。



三、HP下的网络参数优化
ndd -set /dev/tcp tcp_conn_request_max 10240
ndd -set /dev/tcp tcp_syn_rcvd_max 1024
ndd -set /dev/tcp tcp_time_wait_interval 1000
ndd -set /dev/tcp tcp_xmit_hiwater_def 65536  
ndd -set /dev/tcp tcp_recv_hiwater_def 65536  
ndd -set /dev/tcp tcp_xmit_lowater_def 24576  
ndd -set /dev/tcp tcp_fin_wait_2_timeout 60000
ndd -set /dev/tcp tcp_keepalive_interval 60000
ndd -set /dev/tcp tcp_ip_abort_interval 60000
ndd -set /dev/tcp tcp_keepalive_detached_interval 60000
ndd -set /dev/tcp tcp_rexmit_interval_initial 2000
ndd -set /dev/tcp tcp_rexmit_interval_min 1500
ndd -set /dev/tcp tcp_rexmit_interval_max 10000
ndd -set /dev/sockets socket_caching_tcp 1024
上述的修改,将在操作系统重启后丢失。如果希望在操作系统重启后还能生效,需要将上述信息放到下面的配置文件中。参照下面已经给出的几条配置,有多少就写多少。
vi /etc/rc.config.d/nddconf
TRANSPORT_NAME[0]=tcp
NDD_NAME[0]=tcp_conn_request_max
NDD_VALUE[0]=10240
#
TRANSPORT_NAME[0]=tcp
NDD_NAME[1]=tcp_syn_rcvd_max
NDD_VALUE[1]=1024
#
TRANSPORT_NAME[0]=tcp
NDD_NAME[2]=tcp_time_wait_interval
NDD_VALUE[2]=1000
#
TRANSPORT_NAME[1]=tcp
NDD_NAME[3]tcp_fin_wait_2_timeout
NDD_VALUE[3]6000
#
TRANSPORT_NAME[2]=tcp
NDD_NAME[4]=tcp_recv_hiwater_def
NDD_VALUE[4]=1048576
#
TRANSPORT_NAME[3]=tcp
NDD_NAME[5]=tcp_xmit_hiwater_def
NDD_VALUE[5]=1048576
#
TRANSPORT_NAME[3]=tcp
NDD_NAME[6]=tcp_xmit_lowater_def
NDD_VALUE[6]=24576
#
TRANSPORT_NAME[4]=sockets
NDD_NAME[7]=socket_caching_tcp
NDD_VALUE[7]=1024
每个参数具体的含义可以在HP-UX B.11.31使用ndd -h parameter查看

=============================================================================
四:总结
1)不同平台下的优化主要是修改tcp大窗口发送支持。
2)复制的速度,除了优化网络参数,还有更重要的一个因素:物理的交换机连接情况。在项目的优化中,必须要求参与复制的物理链路必须连接到同一个交换机上,不能分跨交换机。如果考虑到链路冗余,可以使用双网卡绑定,将两条链路分别连接到不同的交换机上,在交换机之间做trunk。
在我的测试中,发送的数据包大小为128K,两台主机(hp11.31)千兆光卡都连接到同一个Foundry SX800上,获得的数据如下:
=================================================================
   Total : MAX = 103.8 MB / MIN =  95.5 MB / AVG = 102.4 MB
=================================================================
按照(三)给出的优化方法优化之后,速度也没有提升。因为这基本已经达到千兆光口的极限了。
如果分别连接到两个Foundry SX800上,速度降低很多:
=================================================================
   Total : MAX =  68.2 MB / MIN =  59.9 MB / AVG =  63.7 MB
=================================================================
如果这时,按照(三)给出的优化方法调整参数,性能可以提升不少:
=================================================================
   Total : MAX =  87.1 MB / MIN =  39.5 MB / AVG =  83.5 MB
=================================================================
当然这个数字不是绝对的,跟你实际的网络关系很大。我举这个例子只是说明必须要保证复制链路不跨交换机。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10867315/viewspace-580614/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-31

  • 博文量
    101
  • 访问量
    281217