网络硬件选型:Solarflare vs Mellanox 网卡对比、PCIe通道优化、CPU与网卡亲和性绑定

做高频交易的人都知道,网卡选型这件事,说白了就是「抢时间」。我见过太多团队,代码优化到极致,结果被一块不合适的网卡拖了后腿。今天咱们就聊聊Solarflare和Mellanox这两家的网卡,以及怎么把PCIe通道和CPU亲和性玩明白。

一、Solarflare vs Mellanox:两大阵营的硬碰硬

这两家我都用过,各有各的脾气。先看个对比表,心里有个底:

对比维度 Solarflare Mellanox
典型型号 SFN8522、X2522 ConnectX-5、ConnectX-6
延迟表现 极低,约1-2微秒 低,约2-3微秒
用户态网络栈 OpenOnload(成熟稳定) VMA(性能不错,但配置稍复杂)
FPGA可编程性 内置FPGA,可自定义逻辑 部分型号支持,但生态不如Solarflare
驱动成熟度 非常成熟,文档齐全 成熟,但社区支持略弱
价格 偏高 中等

我个人习惯,如果做期权做市,首选Solarflare。为什么?因为它的OpenOnload库可以直接绕过内核,把网络数据包送到用户态。我曾在项目中遇到过,同样的策略代码,从Mellanox换到Solarflare,延迟直接降了30%。

核心结论:Solarflare在极致延迟场景下略胜一筹,Mellanox在吞吐量和性价比上更有优势。做市商选Solarflare,做高频统计套利可以选Mellanox。

二、PCIe通道优化:别让总线成为瓶颈

网卡选好了,插到主板上就完事了?没那么简单。PCIe通道的配置,直接影响网卡能不能跑满。

你想想看,一张100G的网卡,如果插在PCIe 3.0 x8的槽上,理论带宽只有约8GB/s,根本喂不饱。我建议至少用PCIe 3.0 x16或PCIe 4.0 x8。

这里有几个实战要点:

  • 插槽选择:优先使用直连CPU的PCIe插槽,不要走PCH(芯片组)桥接。PCH会增加约200-300纳秒的延迟。
  • 通道分配:如果主板有多个PCIe插槽,把网卡插在第一个或第二个槽(通常是CPU直连)。
  • BIOS设置:关闭不必要的PCIe节能选项,比如ASPM(主动电源状态管理)。我吃过这个亏,ASPM开着,延迟偶尔会跳变到10微秒以上。

避坑指南:我曾经遇到过一块主板,插上Solarflare网卡后,延迟忽高忽低。查了两天才发现,是BIOS里把PCIe链路速度设成了自动协商。手动锁定到Gen3后,问题解决。

三、CPU与网卡亲和性绑定:把数据留在本地

网卡收到数据包,要交给CPU处理。如果网卡中断落在远端CPU上,数据还得跨NUMA节点传输,延迟直接翻倍。

怎么做?核心就一句话:让网卡和CPU待在同一个NUMA节点上

具体步骤:

  1. lspci -v 查看网卡所在的PCIe总线,确定它属于哪个NUMA节点。
  2. numactl --hardware 查看CPU和内存的NUMA拓扑。
  3. 把网卡中断绑定到同一NUMA节点的CPU核心上。

举个例子,假设网卡在NUMA节点0,我们可以这样绑定中断:

# 查看网卡中断号
cat /proc/interrupts | grep eth0

# 绑定中断到NUMA0的CPU核心(比如核心0-7)
echo 0f > /proc/irq/<中断号>/smp_affinity

嗯,这里要注意,smp_affinity 的值是十六进制掩码。比如 0f 表示核心0-3。我习惯用 ff 表示核心0-7,但别贪多,绑定太多核心反而会增加缓存抖动。

小技巧:如果使用Solarflare的OpenOnload,它自带CPU亲和性管理。你可以在环境变量里设置 EF_CPU_AFFINITY=0-3,让网卡自动把数据送到指定核心。

四、一张图看懂整体架构

说了这么多,咱们用一张SVG图把整个链路串起来:

期权高频做市网络延迟优化架构 Solarflare/Mellanox 网卡硬件层 PCIe 3.0/4.0 直连CPU通道 CPU核心 亲和性绑定 优化要点 1. 网卡选型:Solarflare适合极致延迟,Mellanox适合吞吐量 2. PCIe通道:直连CPU插槽,关闭ASPM节能,锁定Gen3/Gen4 3. 亲和性绑定:网卡中断和CPU核心在同一NUMA节点 4. 用户态网络栈:OpenOnload/VMA绕过内核,减少上下文切换 目标:端到端延迟控制在5微秒以内

五、实战中的几个坑

最后分享几个我踩过的坑,希望能帮你省点时间:

  • 中断均衡别乱开:Linux默认的irqbalance服务,在高频场景下反而会打乱亲和性。我建议直接关掉,手动绑定。
  • 网卡固件版本:Solarflare的固件更新挺频繁的。我遇到过旧固件在极端流量下丢包,升级后就好了。
  • 散热问题:100G网卡发热量不小,尤其是Solarflare带FPGA的型号。机箱风道没做好,网卡温度一高,延迟就开始飘。

嗯,硬件选型和优化这部分,其实没有银弹。关键是根据自己的策略特点,找到最合适的组合。我个人的经验是,先拿Solarflare搭一套原型,跑通了再考虑要不要换Mellanox降成本。


专注资料整理