硬件选型:支持RoCE的网卡推荐

聊到RoCE性能调优,硬件选型是绕不开的第一步。我见过太多人上来就调参数,结果发现网卡本身就不支持硬件卸载,折腾半天白费功夫。说白了,选对硬件,调优就成功了一半。

网卡芯片方案怎么选?

目前市面上主流的RoCE网卡方案,其实就三家:Mellanox(现在叫NVIDIA Networking)、Chelsio、Broadcom。我个人的经验是,这三家各有侧重,选哪家得看你的具体场景。

厂商 代表型号 RoCE版本 我的评价
Mellanox/NVIDIA ConnectX-5/6/7 RoCE v2 生态最成熟,性能最稳
Chelsio T5/T6系列 RoCE v2 卸载能力强,CPU占用低
Broadcom NetXtreme-E系列 RoCE v2 性价比高,兼容性好

Mellanox ConnectX系列,嗯,这基本是行业标杆了。我在一个金融客户的项目里用过ConnectX-6,跑高频交易场景,延迟稳定在1微秒以内。它的优势在于驱动和工具链非常完善,mlxconfigmlxlink这些工具用起来很顺手。如果你不想折腾,选它准没错。

Chelsio T6,我个人觉得它的硬件卸载做得最彻底。CPU占用能压到极低,适合那种CPU资源紧张的计算节点。不过它的驱动更新节奏偏慢,遇到新内核可能会有兼容问题。我曾经踩过这个坑,升级内核后网卡不认了,折腾了半天才搞定。

Broadcom NetXtreme-E,说白了就是性价比之选。性能不差,价格比Mellanox便宜不少。但要注意,它的RoCE实现有些细节跟Mellanox不太一样,比如拥塞控制算法。如果你要混用不同品牌的网卡,建议先做充分测试。

我的建议:新项目首选Mellanox ConnectX-6或7,生态最省心。预算有限可以看Broadcom。Chelsio适合对CPU占用有极致要求的场景。

交换机:PFC与ECN能力是硬门槛

网卡选好了,交换机呢?很多人忽略这一点,结果网卡再牛,交换机不支持PFC和ECN,RoCE的性能直接打对折。我遇到过一家公司,买了最好的网卡,结果交换机是老旧型号,连PFC都不支持,跑起来丢包率惨不忍睹。

PFC(优先级流控),说白了就是给RoCE流量开绿灯。它基于802.1Qbb标准,能在链路层做逐跳流控。你需要确认交换机支持以下能力:

  • 每端口至少支持4个优先级队列
  • 支持802.1Qbb PFC,能对特定优先级使能流控
  • 支持802.1Qaz ETS,能做带宽保证

ECN(显式拥塞通知),这个更关键。它让交换机在队列深度达到阈值时,直接标记数据包,通知发送端降速。我习惯把ECN阈值设得比较激进,比如在队列深度达到30%时就标记。为什么?因为RoCE对丢包零容忍,宁可提前降速,也不能让队列溢出丢包。

核心参数参考:
ECN阈值:建议设为30%-50%的队列深度
PFC死锁检测:必须开启,超时设为100ms
缓冲区大小:建议每端口至少512KB

交换机选型上,我推荐几个靠谱的系列:

  • Mellanox Spectrum系列:SN2000/SN3000,跟网卡同厂,配合最默契
  • Cisco Nexus 3000/9000系列:支持完整RoCE特性,配置稍复杂
  • Juniper QFX系列:稳定性好,适合大规模部署
注意:不是所有标称支持RoCE的交换机都能用。我见过一些低端型号,虽然支持PFC,但缓冲区太小,实际效果很差。买之前一定问清楚:每端口共享缓冲区多大?支持多少个ECN阈值?

CPU与PCIe通道:被忽视的性能瓶颈

网卡和交换机都到位了,性能还是上不去?问题可能出在CPU和PCIe上。这个坑我踩过不止一次。

PCIe通道数,直接影响网卡带宽。一张100Gbps的RoCE网卡,需要PCIe 3.0 x16或PCIe 4.0 x8才能跑满。如果你插在x8槽上,带宽直接砍半。我有个项目,客户把ConnectX-6插在PCIe 3.0 x8上,跑出来只有50Gbps,折腾了两天才发现是槽位问题。

这里给个对照表:

网卡速率 最低PCIe要求 推荐配置
25Gbps PCIe 3.0 x4 PCIe 3.0 x8
50Gbps PCIe 3.0 x8 PCIe 4.0 x8
100Gbps PCIe 3.0 x16 PCIe 4.0 x16
200Gbps PCIe 4.0 x16 PCIe 5.0 x16

CPU NUMA亲和性,这个很多人不注意。RoCE网卡通过PCIe连接到某个CPU socket,如果应用程序跑在另一个socket上,跨NUMA访问会导致延迟增加30%-50%。我习惯用lstopo命令先看拓扑,然后把网卡中断和应用程序都绑定到同一个NUMA节点上。

# 查看NUMA拓扑
lstopo --of png > topology.png

# 绑定网卡中断到指定CPU
echo 1 > /proc/irq/<irq_number>/smp_affinity

# 使用numactl绑定应用
numactl --cpunodebind=0 --membind=0 ./your_app

CPU频率和缓存,也有影响。RoCE的包处理依赖CPU中断和内存拷贝,CPU频率越高、L3缓存越大,性能越好。我建议开启CPU性能模式,别用省电模式。曾经有个客户,性能死活上不去,最后发现BIOS里CPU设成了节能模式,频率锁在1.2GHz。

避坑指南:选服务器时,优先选双路CPU的机型,把网卡插在靠近CPU的PCIe槽上。别插在PCH(平台控制器)引出的槽位上,那个带宽有限,延迟也高。

知识体系总览

下面这张图,是我梳理的硬件选型核心逻辑。你一看就明白了:

RoCE硬件选型核心逻辑 RoCE性能调优 网卡芯片方案 Mellanox ConnectX-5/6/7 Chelsio T5/T6 Broadcom NetXtreme-E 交换机能力要求 PFC(优先级流控) ECN(显式拥塞通知) 缓冲区大小≥512KB CPU与PCIe通道 PCIe通道数/版本 NUMA亲和性绑定 CPU频率与缓存 三者缺一不可,任何一个短板都会成为性能瓶颈 选型阶段多花一天,调优阶段少花一周

硬件选型这块,说白了就是三个维度:网卡、交换机、CPU/PCIe。任何一个短板,都会成为性能瓶颈。我见过太多人只盯着网卡参数,结果交换机不支持ECN,或者PCIe槽位插错了,性能惨不忍睹。

嗯,选型阶段多花点心思,后面调优就省心多了。下一节我们聊聊具体的参数配置,到时候我会分享一些我压箱底的配置模板。


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