iperf
#测试最大TCP和UDP吞吐量的开源工具
#安装
yum install iperf
服务端:
客户端:
- -c host:连接到主机名或IP地址
- -l 128k:使用128kb套接字缓冲
- -p 2:运行于两个客户机线程的并行模式
- -i 1:每秒打印时间间隔总结
- -t 60:总测试时间,60s
可调参数用sysctl命令查看和设置,并写入到/etc/sysctl.conf;也能在/proc/sys/net下读写。
- 套接字和TCP缓冲
所有协议类型 读(rmem_max) 写 (wmem_max) 的最大套接字缓冲设置:
#单位字节,为支持全速率的10Gbe连接,这可能需要设置到16MB或更高
net.core.rmem_max=1677216
net.core.wmem_max=1677216
#启用TCP接收缓冲的自动调整
tcp_moderate_rcvbuf=1
#为TCP读和写缓冲设置自动调优参数
#每个参数有三个数值:最小、默认、最大字节数,长度从默认值自动调整
#要提高吞吐量尝试增加最大值,增加最小值和默认值会使每个连接消耗更多不必要的内存
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 87380 16777216
- TCP积压队列
#首个积压队列,半开连接
tcp_max_syn_backlog=4096
#第二个积压队列,传递连接给accept()的监听积压队列
net.core.somaxconn=1024
#以上两者或许都需要由默认值调高,以便更好地处理突发的负载
- 设备积压队列
#增加没CPU的网络设备积压队列长度
#为了10GbE的NIC,这可能要增加到10000
net.core.netdev_max_backlog = 10000
- TCP阻塞控制
#linux支持可插入的阻塞控制算法
#列出当前可用:
sysctl net.ipv4.tcp_available_congestion_control
#一些可能支持但为加载,如添加htcp
modprobe tcp_htcp
- TCP选项
其他可设置的TCP参数包括SACK和FACK扩展,它们能以一定CPU为代价在高延时的网络中提高吞吐性能
net.ipv4.tcp_sack=1
net.ipv4.tcp_fack=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
安全时tcp_tw_reuse可调参数能重利用一个TIME-WAIT会话,这使得两个主机间有更高的连接率,如web服务器和数据库服务器之间,而且不会达到16b的TIME-WAIT会话临时端口极限。
- 网络接口
#TX队列长度可以用ifconfig增加,如:
ifconfig eth0 txqueuelen 10000
#对于10GbE NIC这可能是必需的,该设置可以添加到/etc/rc.local以便在启动时应用
- 资源控制
控制组(cgroups)的网络优先级(net_prio)子系统能对进程或者进程组的出站网络通信应用优先级。