核心是让硬件能力与内核处理节奏匹配,需先查清PCIe链路宽度、中断类型、Ring Buffer上限及多队列支持,再分层调优缓冲区、卸载功能和中断协同。

优化网卡驱动参数提升网络包吞吐,核心是让硬件能力与内核处理节奏匹配,避免收发瓶颈、中断过载或缓冲区溢出。关键不在“改一堆参数”,而在于分层定位、按需调整。
查清当前硬件与驱动能力
盲目调参前,先确认真实上限和限制条件:
- 用
lspci -vv -s $(lspci | grep Ethernet | head -n1 | awk '{print $1}')查 PCIe 链路宽度(至少 x1)、是否支持 MSI-X 中断 - 运行
ethtool eth0看驱动名、固件版本、当前速率/双工;modinfo <driver_name></driver_name>查驱动支持的模块参数(如 e1000e 的InterruptThrottleRate) - 执行
ethtool -g eth0查 Ring Buffer 当前值与最大允许值(igb 最高 4096,i40e 可达 32768) - 检查
cat /proc/interrupts | grep eth0看中断是否集中在单个 CPU,判断是否需要多队列或 irqbalance
调大 Ring Buffer 减少丢包
Rx/Tx ring 是驱动层最直接的硬件缓冲区,小了会在突发流量时丢包,比内核 socket 缓冲区更早成为瓶颈:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先看支持范围:
ethtool -g eth0 - 对万兆卡(如 i40e),可设为
sudo ethtool -G eth0 rx 8192 tx 8192 - 对千兆卡(如 e1000e),建议设为
rx 4096 tx 4096,超出可能报Operation not supported - 调完立刻用
ethtool -S eth0 | grep -E "(rx|tx)_errors|drops"观察错误计数是否下降
启用并调优硬件卸载功能
把协议栈计算任务下放给网卡,降低 CPU 开销、提升吞吐稳定性:
- 启用常用卸载:
sudo ethtool -K eth0 rx on tx on tso on gso on gro on lro off - 特别注意:LRO(Large Receive Offload)易与 GRO 冲突,建议关闭;GRO 更安全且兼容性好
- 对 TCP 大包传输场景,TSO(TCP Segmentation Offload)能显著减少 CPU 拷贝次数
- 验证是否生效:
ethtool -k eth0中对应项应显示on
合理配置多队列与中断协同
单队列在高并发下易成串行瓶颈,多队列 + 中断聚合可平衡吞吐与延迟:
- 查最大队列数:
ethtool -l eth0;设为逻辑 CPU 核数(如 16 核就设sudo ethtool -L eth0 combined 16) - 开启 RSS(Receive Side Scaling)后,确保
irqbalance运行中,或手动绑定队列到不同 CPU:echo 1 > /proc/irq/<irq_num>/smp_affinity_list</irq_num> - 对低延迟敏感场景(如金融交易),可关中断协同:
sudo ethtool -C eth0 rx-usecs 0 rx-frames 0;对吞吐优先场景,设rx-usecs 50 rx-frames 32减少中断频率


















