硬件选型:支持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微秒以内。它的优势在于驱动和工具链非常完善,mlxconfig、mlxlink这些工具用起来很顺手。如果你不想折腾,选它准没错。
Chelsio T6,我个人觉得它的硬件卸载做得最彻底。CPU占用能压到极低,适合那种CPU资源紧张的计算节点。不过它的驱动更新节奏偏慢,遇到新内核可能会有兼容问题。我曾经踩过这个坑,升级内核后网卡不认了,折腾了半天才搞定。
Broadcom NetXtreme-E,说白了就是性价比之选。性能不差,价格比Mellanox便宜不少。但要注意,它的RoCE实现有些细节跟Mellanox不太一样,比如拥塞控制算法。如果你要混用不同品牌的网卡,建议先做充分测试。
交换机: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系列:稳定性好,适合大规模部署
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/PCIe。任何一个短板,都会成为性能瓶颈。我见过太多人只盯着网卡参数,结果交换机不支持ECN,或者PCIe槽位插错了,性能惨不忍睹。
嗯,选型阶段多花点心思,后面调优就省心多了。下一节我们聊聊具体的参数配置,到时候我会分享一些我压箱底的配置模板。
公众号:蓝海资料掘金营,微信deep3321