驱动选择:主流网卡驱动对比

说到网卡驱动,我见过太多人在这上面栽跟头了。有人买了几万块的Mellanox卡,结果用了内核自带的老驱动,性能连一半都没跑出来。也有人图省事,厂商驱动装完就不管了,结果内核一升级,系统直接起不来。

驱动选不对,后面调优全是白费。今天咱们就把这事聊透。

主流网卡驱动概览

目前数据中心里,主流网卡驱动就三家:Intel、Mellanox、Broadcom。我这些年经手的项目,90%以上都是这三家。

厂商 驱动名称 适用芯片 内核版本
Intel igb / ixgbe / ice I210/I350 / X710/XL710 / E810 2.6+ / 3.x+ / 5.x+
Mellanox mlx4 / mlx5 ConnectX-4/5/6/7 4.9+ / 5.4+
Broadcom bnxt_en / tg3 BCM57xx / BCM574xx 4.15+ / 2.4+

这张表你记一下。我遇到过有人拿igb驱动去跑X710网卡,结果死活认不到设备。说白了,驱动和芯片必须一一对应,差一点都不行。

Intel igb/ixgbe:稳,但别指望惊喜

Intel的驱动,我用了十几年。igb主要管千兆网卡,ixgbe管万兆。这两个驱动有个共同特点:

但稳也有稳的代价。ixgbe驱动默认的中断合并策略,延迟大概在50-100微秒。做普通业务没问题,但你要是搞高频交易,这个延迟就有点高了。

关键参数:

# 查看当前中断设置
ethtool -c eth0

# 关闭中断合并(低延迟场景)
ethtool -C eth0 rx-usecs 0 tx-usecs 0

# 调整RX/TX队列数
ethtool -L eth0 combined 8

我个人习惯,做低延迟调优时,第一件事就是把中断合并关了。你想想看,网卡等100微秒才通知CPU,这100微秒对网络延迟来说已经是个天文数字了。

Mellanox mlx5:低延迟之王

Mellanox的mlx5驱动,说实话,是我见过最激进的。它支持RDMA、支持DPDK、支持硬件卸载。延迟能做到10微秒以内。

我记得有个金融客户,他们用mlx5驱动配合ConnectX-5网卡,端到端延迟压到了5微秒。Intel的ixgbe在同环境下大概要30微秒。差距就是这么明显。

mlx5调优小技巧:

# 开启硬件时间戳
ethtool -T eth0

# 设置RX/TX队列为8(根据CPU核心数调整)
ethtool -L eth0 combined 8

# 关闭LRO/GRO(低延迟场景)
ethtool -K eth0 lro off gro off

我曾经因为没关GRO,排查了三天延迟抖动问题。最后发现是硬件合并包导致的。嗯,这个坑你们别踩。

Broadcom bnxt:性价比之选

Broadcom的bnxt驱动,这几年进步很大。以前大家觉得Broadcom网卡兼容性差,但bnxt_en驱动从内核4.15开始就稳定了。

bnxt的优势在于:便宜。同样25G网卡,Broadcom比Mellanox便宜30%以上。性能嘛,中规中矩,延迟大概在20-30微秒。

但有一点要注意:bnxt驱动的默认参数偏保守。如果你不做调优,它可能连标称性能都跑不满。

避坑指南:

我曾经遇到一个案例,bnxt网卡在NUMA架构下,默认把中断都绑到了CPU0上。结果CPU0跑满了,其他核心闲着。解决方案很简单:

# 查看当前中断亲和性
cat /proc/irq/xxx/smp_affinity

# 手动设置中断到不同CPU
echo 1 > /proc/irq/xxx/smp_affinity
echo 2 > /proc/irq/yyy/smp_affinity

内核自带 vs 厂商驱动

这个问题,我几乎每次培训都会被问到。我的建议很简单:

  • 生产环境:用厂商驱动
  • 开发测试:用内核自带

为什么?内核自带的驱动,更新周期长。比如ixgbe,内核5.10里的版本是5.1.x,但Intel官网已经出到5.18.x了。差了好几个大版本。

厂商驱动通常会修复一些内核驱动没处理好的边界情况。我遇到过mlx5内核驱动在特定固件版本下会丢包,换了厂商驱动就好了。

但厂商驱动也有坑:内核升级兼容性。你装了个厂商驱动,结果系统yum update把内核升了,驱动可能就加载不上了。所以我的习惯是:锁定内核版本,或者用DKMS自动重建驱动。

我的选择策略:

  1. 新项目、新硬件:直接用厂商驱动
  2. 存量系统、稳定运行:内核驱动够用就别动
  3. 低延迟场景:必须用厂商驱动,而且要调优
  4. 虚拟化环境:优先用内核驱动(厂商驱动在VM里兼容性差)

驱动选择决策流程图

下面这张图,是我自己总结的驱动选择逻辑。你照着走,基本不会出错。

网卡驱动选择决策流程 开始选择驱动 是新硬件还是存量硬件? 新硬件 存量硬件 使用厂商驱动 使用内核自带驱动 是否需要低延迟? 系统是否稳定运行? 厂商驱动 + 深度调优 厂商驱动 + 基本调优 内核驱动 + 保持现状 考虑升级硬件

这张图的核心逻辑其实就一句话:新硬件、低延迟场景,别犹豫,直接上厂商驱动。存量系统、稳定优先,内核驱动够用就别折腾。

我的最终建议

驱动选择这事,没有银弹。我见过有人用Mellanox跑Web服务器,也见过有人用Intel跑高频交易。关键看你的场景。

如果你问我个人偏好:

  • 做低延迟:Mellanox mlx5 + 厂商驱动
  • 做通用业务:Intel ixgbe + 内核驱动
  • 做性价比方案:Broadcom bnxt + 厂商驱动

嗯,大概就是这样。驱动选对了,后面调优才有意义。下一节咱们聊聊网卡固件版本的选择,那个坑更多。


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