优化Linux协议栈以提升网络性能需要从内核参数、协议栈配置、硬件加速等多方面入手。以下是一套系统化的优化方案:
调整socket缓冲区大小
# 增大默认和最大缓冲区大小(根据网络延迟调整)
sysctl -w net.core.rmem_default=4194304
sysctl -w net.core.wmem_default=4194304
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
TCP协议优化
# 启用TCP Fast Open(减少握手延迟)
sysctl -w net.ipv4.tcp_fastopen=3
# 增大TCP窗口缩放因子
sysctl -w net.ipv4.tcp_window_scaling=1
# 优化拥塞控制(推荐使用BBR或CUBIC)
sysctl -w net.ipv4.tcp_congestion_control=bbr
# 增加连接跟踪表大小
sysctl -w net.netfilter.nf_conntrack_max=1000000
中断亲和性(IRQ Balance)
# 将网卡中断绑定到特定CPU核心(避免跨NUMA节点)
cat /proc/interrupts | grep eth0
echo 2 > /proc/irq/IRQ_NUMBER/smp_affinity
禁用不必要功能
# 关闭TCP时间戳(减少头部开销)
sysctl -w net.ipv4.tcp_timestamps=0
# 禁用ICMP重定向
sysctl -w net.ipv4.conf.all.accept_redirects=0
多队列网卡(RSS)
# 启用多队列(需网卡支持)
ethtool -L eth0 combined 8
零拷贝技术
# 启用sendfile和GRO(减少数据拷贝)
sysctl -w net.ipv4.tcp_sack=1
ethtool -K eth0 gro on
启用硬件卸载
# TCP校验和卸载(需网卡支持)
ethtool -K eth0 tx-checksum-ip-generic on
# 大页内存(减少TLB Miss)
echo 1024 > /proc/sys/vm/nr_hugepages
更新网卡驱动
# 使用最新版驱动(如Intel的ice或mlx5_core)
modprobe -r ixgbe && modprobe ixgbe
XDP(eXpress Data Path)
# 加载XDP程序实现内核旁路
ip link set dev eth0 xdp obj xdp_prog.o
DPDK(用户态协议栈)
# 绑定网卡到DPDK驱动
./dpdk-devbind.py --bind=vfio-pci eth0
内核旁路(Kernel Bypass)
AF_XDP
或io_uring
减少上下文切换性能指标监控
# 实时查看丢包和队列状态
nstat -az
ethtool -S eth0 | grep drop
压测工具验证
# 使用iperf3测试吞吐量
iperf3 -c server_ip -t 60 -P 8
通过以上优化,典型场景下可提升网络性能30%-300%。但需注意: 1. 部分优化需要内核版本≥5.4 2. 生产环境需逐步测试验证 3. 虚拟化环境下需额外优化宿主机
是否需要针对您的具体场景(如HTTP服务器、数据库集群等)提供更定制化的建议?