驱动选择:主流网卡驱动对比
说到网卡驱动,我见过太多人在这上面栽跟头了。有人买了几万块的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自动重建驱动。
我的选择策略:
- 新项目、新硬件:直接用厂商驱动
- 存量系统、稳定运行:内核驱动够用就别动
- 低延迟场景:必须用厂商驱动,而且要调优
- 虚拟化环境:优先用内核驱动(厂商驱动在VM里兼容性差)
驱动选择决策流程图
下面这张图,是我自己总结的驱动选择逻辑。你照着走,基本不会出错。
这张图的核心逻辑其实就一句话:新硬件、低延迟场景,别犹豫,直接上厂商驱动。存量系统、稳定优先,内核驱动够用就别折腾。
我的最终建议
驱动选择这事,没有银弹。我见过有人用Mellanox跑Web服务器,也见过有人用Intel跑高频交易。关键看你的场景。
如果你问我个人偏好:
- 做低延迟:Mellanox mlx5 + 厂商驱动
- 做通用业务:Intel ixgbe + 内核驱动
- 做性价比方案:Broadcom bnxt + 厂商驱动
嗯,大概就是这样。驱动选对了,后面调优才有意义。下一节咱们聊聊网卡固件版本的选择,那个坑更多。
公众号:蓝海资料掘金营,微信deep3321