网络性能排查工具
image.png网络性能优化
应用程序优化
- 优化I/O模型
套接字
-
net.core.optmem_max
增大每个套接字的缓冲区大小 -
net.core.rmem_max 和 net.core.wmem_max
增大套接字接收缓冲区大小 和 发送缓冲区大小 -
net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem
增大 TCP 接收缓冲区大小 和 发送缓冲区大小tcp_rmem
和tcp_wmem
的三个数值分别是 min,default,max,系统会根据这些设置,自动调整 TCP 接收 / 发送缓冲区的大小。 -
配置选项 TCP_NODELAY
禁用 Nagle 算法。 -
配置选项 TCP_CORK
可以让小包聚合成大包后再发送,但是会阻塞小包的发送。 -
SO_SNDBUF SO_RCVBUF、
分别调整套接字发送缓冲区和接收缓冲区的大小。
传输层
- TCP TIME_WAIT
- 使用端口复用
-
fs.nr_open
和fs.file-max
增大进程最大文件描述符数量和系统的最大文件描述符数
- 缓解 SYN FLOOD
- 增大 TCP 半连接的最大数量
net.ipv4.tcp_max_syn_backlog
- 增大 TCP 半连接的最大数量
网络层
- 禁止ICMP主机探测,ICMP Flood 等各种网络问题
禁止 ICMP 协议,即设置net.ipv4.icmp_echo_ignore_all = 1
链路层
由于网卡收包后调用的中断处理程序(特别是软中断),需要消耗大量的 CPU。所以,将这些中断处理程序调度到不同的 CPU 上执行,就可以显著提高网络吞吐量。这通常可以采用下面两种方法:
-
为网卡硬中断配置 CPU 亲和性(smp_affinity),或者开启 irqbalance 服务。
-
可以开启 RPS(Receive Packet Steering)和 RFS(Receive Flow Steering),将应用程序和软中断的处理,调度到相同 CPU 上,这样就可以增加 CPU 缓存命中率,减少网络延迟
-
可以开启网络接口的多队列功能。这样,每个队列就可以用不同的中断号,调度到不同 CPU 上执行,从而提升网络的吞吐量。
-
可以增大网络接口的缓冲区大小,以及队列长度等,提升网络传输的吞吐量(注意,这可能导致延迟增大)。
-
还可以使用 Traffic Control 工具,为不同网络流量配置 QoS。
其他
- DPDK
- kernel by pass 网卡
网友评论