当前位置:首页>Linux>Linux网络性能调优(内核参数、队列、RSS)

Linux网络性能调优(内核参数、队列、RSS)

  • 2026-10-11 08:21:36
Linux网络性能调优(内核参数、队列、RSS)

Linux网络性能调优(内核参数、队列、RSS)

一、Linux网络性能调优概述与调优原则

调优目标:

  • 提升吞吐量(Mbps/Gbps)
  • 降低延迟(μs/ms)
  • 减少CPU占用率
  • 降低丢包率和重传率

调优顺序原则(从易到难):

  1. 网卡基础配置(多队列、Offload)
  2. 内核参数(sysctl)
  3. TCP栈与缓冲区
  4. 中断与亲和性
  5. 应用层优化(Nginx/HAProxy/数据库参数)

生产金句:
“网络性能问题,80%可以通过内核参数 + 网卡多队列解决,剩下20%需要硬件升级或应用重构。”


二、网卡驱动与多队列基础(RSS、RPS、RFS、XPS)

RSS(Receive Side Scaling):网卡硬件根据哈希(IP+端口)将报文分发到不同RX队列,由不同CPU核心处理。

查看与启用:

ethtool -l ens160                    # 查看支持队列数
ethtool -L ens160 combined 8         # 设置8个队列(推荐 = CPU核心数/2 ~ 核心数)

# 查看当前队列
cat /proc/interrupts | grep ens160

RPS(Receive Packet Steering):软件层面将中断分发到多个CPU(网卡不支持RSS时使用)。

echo f > /sys/class/net/ens160/queues/rx-0/rps_cpus   # 启用所有CPU

RFS(Receive Flow Steering):根据流(连接)将报文导向同一CPU,减少上下文切换。

echo 32768 > /proc/sys/net/core/rps_sock_flow_entries

XPS(Transmit Packet Steering):发送侧多队列优化。

echo f > /sys/class/net/ens160/queues/tx-0/xps_cpus

生产推荐:10G以上网卡必须开启RSS + XPS,队列数建议设为CPU物理核心数的1~2倍。


三、内核网络参数生产推荐值(sysctl.conf)

推荐生产配置(/etc/sysctl.d/99-network.conf):

# 基础
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 50000
net.core.rmem_default = 1048576
net.core.rmem_max = 16777216
net.core.wmem_default = 1048576
net.core.wmem_max = 16777216

# TCP栈
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0          # 4.12+内核已废弃,建议关闭
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 连接跟踪
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 3600

# 其他
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_forward = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr     # 推荐BBR或cubic

应用命令:

sysctl -p /etc/sysctl.d/99-network.conf

四、TCP协议栈深度调优

拥塞控制算法(2026推荐):

sysctl -w net.ipv4.tcp_congestion_control=bbr
# 或者 cubic(传统稳定)

BBRv2(需较新内核):延迟更低,适合高带宽长肥网络。

缓冲区调优:
大内存服务器可将 rmem_max/wmem_max 提升至 64MB~256MB。

TIME_WAIT 优化:
tcp_tw_reuse=1 + tcp_fin_timeout=15 可大幅减少TIME_WAIT占用。


五、中断 coalescing 与 irqbalance 优化

中断合并(Coalescing):减少中断次数,提高吞吐。

ethtool -C ens160 rx-usecs 100 tx-usecs 100
ethtool -C ens160 adaptive-rx off adaptive-tx off

irqbalance(多核中断均衡):

dnf install irqbalance -y
systemctl enable --now irqbalance

中断亲和性手动绑定(极致优化):

# 将 ens160 中断绑定到 CPU 0-7
echo 000000ff > /proc/irq/$(cat /proc/interrupts | grep ens160 | awk '{print $1}' | head -1)/smp_affinity

六、网卡 Offload 功能开启与关闭策略

常用 Offload:

  • TSO(TCP Segmentation Offload)
  • GSO(Generic Segmentation Offload)
  • GRO(Generic Receive Offload)
  • LRO(Large Receive Offload)

生产推荐:

ethtool -K ens160 tso on gso on gro on
ethtool -K ens160 lro off          # 某些场景(如抓包)需关闭

问题场景:与某些防火墙/负载均衡冲突时,可临时关闭 TSO/GSO。


七、大页内存、巨型帧(Jumbo Frame)与 MTU 优化

巨型帧(10G+网卡推荐):

ip link set ens160 mtu 9000
# 交换机、所有路径设备均需支持

大页内存(HugePages):减少TLB Miss,提升网络栈性能。

echo 2048 > /proc/sys/vm/nr_hugepages

八、生产环境一键调优脚本与 Ansible 部署

一键调优脚本(/usr/local/bin/network-tune.sh):

#!/bin/bash
# 网卡多队列
ethtool -L ens160 combined 16

# sysctl 参数
cat > /etc/sysctl.d/99-network-tune.conf << EOF
net.core.netdev_max_backlog = 50000
net.core.somaxconn = 65535
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_max_syn_backlog = 65535
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF

sysctl -p /etc/sysctl.d/99-network-tune.conf

# 中断优化
systemctl restart irqbalance

echo"网络性能调优完成!"

Ansible Playbook:可批量对数百台服务器执行调优。


九、性能测试工具与基准测试方法

测试工具:

  • iperf3(吞吐量)
  • netperf
  • pktgen(内核级发包测试)
  • wrk / wrk2(HTTP压测)
  • ab / siege

基准测试示例:

# 服务端
iperf3 -s

# 客户端
iperf3 -c 10.0.8.100 -P 4 -t 60

监控指标:

  • sar -n DEV
  • mpstat / pidstat
  • ethtool -S ens160(网卡错误统计)

最新文章

随机文章