linux优化网络参数udp,AIX\LINUX\HP网络参数优化

我专门给大家翻译外文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

=================================================================

当然这个数字不是绝对的,跟你实际的网络关系很大。我举这个例子只是说明必须要保证复制链路不跨交换机。

你可能感兴趣的:(linux优化网络参数udp)