一、网卡调优总览:什么是低延迟?为什么需要调优?调优的核心指标

各位好,我是老张。做网络性能调优这行十几年了,今天咱们聊聊网卡调优这件事。

很多人一上来就问我:「老张,网卡调优到底调什么?」

嗯,这个问题问得好。咱们先搞清楚一个概念——低延迟

什么是低延迟?

低延迟,说白了就是数据从A点到B点的时间尽可能短。你想想看,在金融交易系统里,1微秒的延迟可能就是几百万的盈亏。在视频直播里,延迟高了观众就骂娘。

我当年在电商公司做双11大促时,遇到过一件印象深刻的事。系统压测到一半,突然延迟从100微秒飙到了5毫秒。排查了半天,发现是网卡中断合并参数没调好。嗯,从那以后我再也不敢小看网卡调优了。

低延迟通常指:

  • 端到端延迟:从应用发数据到对端收到,一般要求微秒级
  • 中断延迟:网卡收到数据到CPU响应的时间,这个很关键
  • 处理延迟:数据在协议栈里待的时间

核心观点:低延迟不是玄学,是每一微秒都要抠出来的硬功夫。

为什么需要调优?

你可能会问:「默认配置不能用吗?」

能用,但不好用。默认配置追求的是「兼容性」和「稳定性」,不是「极致性能」。我见过太多项目,硬件买的是最好的,结果跑出来的性能还不如人家调过参数的普通网卡。

举个例子:

  • 默认的NAPI轮询机制,在高吞吐场景下表现不错,但低延迟场景下反而成了瓶颈
  • 默认的中断合并,为了减少CPU占用,把多个包攒一起处理,延迟自然就上去了
  • 默认的Ring Buffer大小,可能不适合你的业务流量模型

所以,调优的本质是在延迟、吞吐、CPU占用之间找到平衡点。没有银弹,只有针对性的调整。

调优的核心指标

咱们做调优,总得有个衡量标准。我个人习惯关注三个核心指标:

指标 说明 典型目标值
延迟 数据包从产生到处理完成的时间 金融场景 < 10μs,普通场景 < 1ms
吞吐 单位时间内能处理的数据量 线速(如10Gbps、25Gbps、100Gbps)
CPU占用 处理网络数据消耗的CPU资源 尽量 < 30%,避免干扰业务进程

我的经验:这三个指标是互相制约的。你想延迟低,就得让CPU多干活,吞吐可能下降。你想吞吐高,就得合并中断,延迟就上去了。调优就是做取舍。

知识体系总览

为了让你对整个调优体系有个直观认识,我画了张图:

网卡调优知识体系总览 网卡调优 延迟 (Latency) 吞吐 (Throughput) CPU占用 中断合并/NAPI调优 Ring Buffer/队列调优 CPU亲和性/绑核 DPDK/用户态驱动 网卡硬件卸载(TSO/GRO) 内核参数调优 每个手段都会影响三个核心指标,调优就是找到最适合你场景的组合

调优的常见误区

这些年我带过不少团队,发现新手常犯几个错误:

避坑指南:我曾经见过一个团队,为了追求极致低延迟,把所有中断合并都关了。结果CPU被打满,业务进程反而跑不动了。调优不是「全开」或「全关」,而是找到那个平衡点。

常见的误区包括:

  • 盲目追求单一指标:只看延迟,不管CPU占用和吞吐
  • 不做基准测试:上来就调参数,连当前基线是多少都不知道
  • 忽略硬件差异:Intel网卡和Mellanox网卡的调优思路完全不同
  • 一次改太多:改完一堆参数,出了问题都不知道是哪个引起的

调优的基本流程

我个人习惯的调优流程是这样的:

  1. 建立基线:先跑一遍默认配置,记录延迟、吞吐、CPU占用
  2. 确定目标:你的业务更看重延迟还是吞吐?
  3. 单变量调整:一次只改一个参数,观察变化
  4. 验证效果:用真实流量或压测工具验证
  5. 固化配置:找到最优组合后,写入启动脚本

小技巧:我习惯用perf和ethtool配合着看。ethtool看网卡状态,perf看CPU到底在忙什么。两个工具一结合,问题基本就清楚了。

好了,这一章咱们把网卡调优的「为什么」和「是什么」讲清楚了。下一章开始,我会带你深入每个具体的技术点,从中断机制开始讲起。

记住一句话:调优不是玄学,是科学。每一步调整都要有数据支撑,每一个参数都要知道它的作用。


公众号:蓝海资料掘金营,微信deep3321