我专门给大家翻译外文IT参考资料,想学的,可以关注,也可以关注我个人自己建的博客:http://www.1024sky.cn
一、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 -get /dev/tcp tcp_conn_request_max
ndd -set /dev/tcp tcp_syn_rcvd_max 1024
ndd -get /dev/tcp tcp_syn_rcvd_max
ndd -set /dev/tcp tcp_time_wait_interval 60000
ndd -get /dev/tcp tcp_time_wait_interval
ndd -set /dev/tcp tcp_xmit_hiwater_def 65536
ndd -get /dev/tcp tcp_xmit_hiwater_def
ndd -set /dev/tcp tcp_recv_hiwater_def 65536
ndd -get /dev/tcp tcp_recv_hiwater_def
ndd -set /dev/tcp tcp_xmit_lowater_def 24576
ndd -get /dev/tcp tcp_xmit_lowater_def
ndd -set /dev/tcp tcp_fin_wait_2_timeout
60000
ndd -get /dev/tcp tcp_fin_wait_2_timeout
ndd -set /dev/tcp tcp_keepalive_interval 60000
ndd -get /dev/tcp
tcp_keepalive_interval
ndd -set /dev/tcp tcp_ip_abort_interval 60000
ndd -get /dev/tcp tcp_ip_abort_interval
ndd -set /dev/tcp tcp_keepalive_detached_interval 60000
ndd -get /dev/tcp tcp_keepalive_detached_interval
ndd -set /dev/tcp tcp_rexmit_interval_initial 2000
ndd -get /dev/tcp tcp_rexmit_interval_initial
ndd -set /dev/tcp tcp_rexmit_interval_min 1500
ndd -get /dev/tcp tcp_rexmit_interval_min
ndd -set /dev/tcp tcp_rexmit_interval_max 10000
ndd -get /dev/tcp tcp_rexmit_interval_max
ndd -set /dev/sockets socket_caching_tcp 2048
ndd -get /dev/sockets socket_caching_tcp
上述的修改,将在操作系统重启后丢失。如果希望在操作系统重启后还能生效,需要将上述信息放到下面的配置文件中。参照下面已经给出的几条配置,有多少就写多少。
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
=================================================================
当然这个数字不是绝对的,跟你实际的网络关系很大。我举这个例子只是说明必须要保证复制链路不跨交换机。