一、网卡调优总览:什么是低延迟?为什么需要调优?调优的核心指标
各位好,我是老张。做网络性能调优这行十几年了,今天咱们聊聊网卡调优这件事。
很多人一上来就问我:「老张,网卡调优到底调什么?」
嗯,这个问题问得好。咱们先搞清楚一个概念——低延迟。
什么是低延迟?
低延迟,说白了就是数据从A点到B点的时间尽可能短。你想想看,在金融交易系统里,1微秒的延迟可能就是几百万的盈亏。在视频直播里,延迟高了观众就骂娘。
我当年在电商公司做双11大促时,遇到过一件印象深刻的事。系统压测到一半,突然延迟从100微秒飙到了5毫秒。排查了半天,发现是网卡中断合并参数没调好。嗯,从那以后我再也不敢小看网卡调优了。
低延迟通常指:
- 端到端延迟:从应用发数据到对端收到,一般要求微秒级
- 中断延迟:网卡收到数据到CPU响应的时间,这个很关键
- 处理延迟:数据在协议栈里待的时间
核心观点:低延迟不是玄学,是每一微秒都要抠出来的硬功夫。
为什么需要调优?
你可能会问:「默认配置不能用吗?」
能用,但不好用。默认配置追求的是「兼容性」和「稳定性」,不是「极致性能」。我见过太多项目,硬件买的是最好的,结果跑出来的性能还不如人家调过参数的普通网卡。
举个例子:
- 默认的NAPI轮询机制,在高吞吐场景下表现不错,但低延迟场景下反而成了瓶颈
- 默认的中断合并,为了减少CPU占用,把多个包攒一起处理,延迟自然就上去了
- 默认的Ring Buffer大小,可能不适合你的业务流量模型
所以,调优的本质是在延迟、吞吐、CPU占用之间找到平衡点。没有银弹,只有针对性的调整。
调优的核心指标
咱们做调优,总得有个衡量标准。我个人习惯关注三个核心指标:
| 指标 | 说明 | 典型目标值 |
|---|---|---|
| 延迟 | 数据包从产生到处理完成的时间 | 金融场景 < 10μs,普通场景 < 1ms |
| 吞吐 | 单位时间内能处理的数据量 | 线速(如10Gbps、25Gbps、100Gbps) |
| CPU占用 | 处理网络数据消耗的CPU资源 | 尽量 < 30%,避免干扰业务进程 |
我的经验:这三个指标是互相制约的。你想延迟低,就得让CPU多干活,吞吐可能下降。你想吞吐高,就得合并中断,延迟就上去了。调优就是做取舍。
知识体系总览
为了让你对整个调优体系有个直观认识,我画了张图:
调优的常见误区
这些年我带过不少团队,发现新手常犯几个错误:
避坑指南:我曾经见过一个团队,为了追求极致低延迟,把所有中断合并都关了。结果CPU被打满,业务进程反而跑不动了。调优不是「全开」或「全关」,而是找到那个平衡点。
常见的误区包括:
- 盲目追求单一指标:只看延迟,不管CPU占用和吞吐
- 不做基准测试:上来就调参数,连当前基线是多少都不知道
- 忽略硬件差异:Intel网卡和Mellanox网卡的调优思路完全不同
- 一次改太多:改完一堆参数,出了问题都不知道是哪个引起的
调优的基本流程
我个人习惯的调优流程是这样的:
- 建立基线:先跑一遍默认配置,记录延迟、吞吐、CPU占用
- 确定目标:你的业务更看重延迟还是吞吐?
- 单变量调整:一次只改一个参数,观察变化
- 验证效果:用真实流量或压测工具验证
- 固化配置:找到最优组合后,写入启动脚本
小技巧:我习惯用perf和ethtool配合着看。ethtool看网卡状态,perf看CPU到底在忙什么。两个工具一结合,问题基本就清楚了。
好了,这一章咱们把网卡调优的「为什么」和「是什么」讲清楚了。下一章开始,我会带你深入每个具体的技术点,从中断机制开始讲起。
记住一句话:调优不是玄学,是科学。每一步调整都要有数据支撑,每一个参数都要知道它的作用。
公众号:蓝海资料掘金营,微信deep3321