ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

scaleFabric全自研RDMA无损网络:从原理到部署调优实战

scaleFabric全自研RDMA无损网络:从原理到部署调优实战 1. 从一条产品发布消息说起scaleFabric到底在解决什么问题第一次看到“全自研、真无损、可量产”这三个词摆在一起的时候我的直觉是这大概率不是一块普通的网卡或者交换机而是一整套面向高性能计算和智算集群的互联方案。后来仔细看了中科曙光发布scaleFabric的相关信息印证了这个判断——它是一套高速网络互联解决方案核心是RDMARemote Direct Memory Access远程直接内存访问技术目标场景是大规模计算集群里节点之间的数据交换。为什么这件事值得单独拿出来聊因为在大规模集群里计算节点之间的通信效率往往比单节点的算力更能决定整个系统的实际表现。你可以把集群想象成一个几百人的团队在协作完成一个项目每个人节点干活都很快但如果彼此之间传话要靠“写纸条交给前台前台再转交”传统TCP/IP协议栈的方式那大部分时间都耗在沟通上了。RDMA要做的就是让一个人的想法直接“同步”到另一个人脑子里跳过中间所有繁琐环节。而“无损”这个词是RDMA网络里最容易被误解、也最考验工程能力的地方。很多刚接触这块的朋友会以为“无损”就是“不丢包”其实远不止如此。它指的是一整套链路层的流控机制保证在网络拥塞时不会因为缓冲区溢出而丢包从而避免RDMA的重传因为RDMA一旦触发重传性能会断崖式下跌。这也是为什么热词里会出现“rdma go-back-n 重传”——这恰恰是RDMA网络里最不想看到的东西。这篇文章我打算从几个层面把scaleFabric这类方案拆开讲它背后的技术选型逻辑是什么RDMA无损网络的核心机制怎么运作一套可量产的全栈自研方案在工程上要跨过哪些坎以及在实际部署和调优中会遇到哪些典型问题。不管你是刚接触高性能网络的新手还是已经在做集群运维的老手应该都能从中找到一些能直接用的东西。2. 高速网络互联的核心技术拆解2.1 RDMA为什么是大规模集群的必选项要理解scaleFabric的价值得先理解RDMA到底解决了什么。传统的网络通信数据从A节点到B节点要经过操作系统内核的协议栈应用层把数据交给内核内核做TCP/IP封装网卡驱动处理最后才到网卡发出。接收端反过来再走一遍。这个过程里CPU要参与大量的数据拷贝和协议处理业内常说的“三次拷贝、四次上下文切换”就是指这个。在小规模场景下这没什么问题但在万卡级别的智算集群里CPU本来就该拿去算东西结果被网络通信占用了大量周期这就是巨大的浪费。RDMA的思路是让网卡直接访问应用内存数据从A节点的用户态内存直接搬到B节点的用户态内存CPU全程不参与数据搬运只负责下命令。这里有个关键点很多人会忽略RDMA不是单一技术而是一类技术的统称。常见的实现路径有InfiniBand、RoCERDMA over Converged Ethernet、iWARP等。scaleFabric这类方案通常是在以太网基础上做RDMA也就是RoCE路线因为以太网的生态成熟、成本可控、可量产性强。但以太网天生是“有损”的这就引出了下一个核心问题。2.2 无损网络RDMA性能的生命线RDMA对网络丢包的容忍度极低这是它和普通TCP通信最大的区别。TCP遇到丢包会重传虽然慢一点但能自愈RDMA的队列模型QPQueue Pair一旦检测到丢包整个连接可能进入错误状态需要重建性能损失是数量级的。所以RDMA网络必须做到“无损”也就是在链路层保证不丢包。实现无损主要靠两个机制基于优先级的流控PFCPriority Flow Control和显式拥塞通知ECNExplicit Congestion Notification。PFC的原理是在每条链路上为不同优先级设置阈值当某个优先级的缓冲区快满时向上游发送暂停帧让上游暂时停止发送该优先级的数据。这就像高速公路匝道口的红绿灯车流太密就暂时拦一下避免主路堵死。ECN则是端到端的拥塞控制交换机在拥塞时给数据包打标记接收端收到标记后通过确认包告诉发送端“慢一点”发送端据此降低速率。两者配合才能在保证不丢包的前提下尽量跑满带宽。注意PFC配置不当会引发“PFC风暴”或“死锁”这是实际运维中最常见的坑之一。后面会专门讲排查方法。2.3 全栈自研的意义从芯片到协议栈的自主可控“全栈自研”这个词在scaleFabric的发布里被反复强调这不是营销话术而是有实际工程含义的。一套RDMA网络方案涉及多个层次网卡芯片、网卡固件、驱动、用户态库、网络协议栈、交换机、管理软件。任何一层依赖外部都可能成为性能瓶颈或供应风险。自研网卡芯片意味着可以针对自己的协议栈做深度优化比如调整缓存策略、优化DMA引擎、定制流控参数。自研协议栈意味着可以针对国内集群的典型负载特征做调优而不是拿通用方案硬套。自研交换机则保证了端到端的流控机制能够协同工作。从工程角度看全栈自研最大的好处是问题定位链路短。当网络出现性能抖动时如果网卡、驱动、交换机都是自家的排查起来不用在多个厂商之间来回踢皮球。这一点做过大规模集群运维的人应该深有体会。2.4 可量产被低估的工程门槛“可量产”这三个字看起来平淡实际上是最难的部分之一。实验室里跑通一套RDMA方案和把它做到几万套的稳定交付中间隔着巨大的鸿沟。量产意味着芯片良率要达标、固件要经过大规模验证、驱动要适配主流操作系统和发行版、要和主流服务器厂商完成兼容性测试、要建立完整的供应链和售后体系。更关键的是量产方案必须在各种极端场景下保持稳定——比如满负载运行72小时、异常断电恢复、链路频繁抖动等。我见过不少方案在Demo阶段表现惊艳一到批量部署就各种问题。所以scaleFabric强调可量产实际上是在说“这套东西已经跨过了从实验室到数据中心的死亡之谷”。3. 实操视角一套RDMA无损网络的部署与调优3.1 部署前的硬件与拓扑规划假设你现在要部署一套基于scaleFabric的RDMA集群第一步不是急着上电而是做拓扑规划。RDMA网络的拓扑设计直接决定了性能和成本常见的有多层Clos架构叶脊架构和胖树架构。对于千卡级别的集群通常采用两层Clos每个计算节点双上行到两台叶交换机叶交换机再上行到脊交换机。这样任意两个节点之间的跳数固定延迟可预测。线缆选型上短距离用DAC直连铜缆中长距离用AOC有源光缆或光模块这个要根据机柜布局和预算来定。一个容易被忽略的细节是RDMA网卡和普通业务网卡要物理分离。不要让RDMA流量和存储、管理流量跑在同一张网卡上否则拥塞时会互相影响。我在实际项目里见过因为图省事把管理流量和RDMA混跑结果一个日志同步就把整个训练任务拖垮的案例。3.2 无损参数的配置要点部署阶段最核心的工作是配置无损参数。以RoCE为例需要在交换机和网卡两端同时配置PFC和ECN。交换机侧的关键配置包括为RDMA流量分配独立的优先级队列通常是优先级3或5设置PFC的触发阈值和恢复阈值配置ECN的标记阈值通常用WRED加权随机早期检测。网卡侧则需要配置DCQCN数据中心量化拥塞通知参数包括速率增加因子、速率降低因子、初始速率等。这些参数没有万能值需要根据实际负载调。我的经验是先用厂商推荐值跑通再用压测工具逐步逼近最优。压测可以用ib_write_bw、ib_send_lat这类工具也可以用更贴近实际业务的AllReduce测试。提示PFC阈值设置过高会导致缓冲区溢出丢包设置过低会导致频繁暂停、带宽利用率下降。建议从缓冲区总量的30%作为触发阈值开始调。3.3 性能验证与基准测试部署完成后必须做系统的性能验证。我通常分三步走第一步是点对点带宽和延迟测试确认单条链路能达到网卡标称速率的90%以上延迟在微秒级别。如果达不到先查线缆、光模块、PCIe插槽带宽。第二步是多对一拥塞测试让多个节点同时向一个节点发送数据观察是否触发PFC、是否有丢包。这一步是验证无损配置是否生效的关键。第三步是业务级测试跑一个真实的分布式训练任务或HPC应用观察整体吞吐和扩展效率。很多问题只有在真实负载下才会暴露。下面是一个简单的带宽测试命令示例# 服务端 ib_write_bw -d mlx5_0 -a -F --report_gbits # 客户端 ib_write_bw -d mlx5_0 -a -F --report_gbits server_ip测试结果要关注几个指标平均带宽、峰值带宽、是否出现带宽抖动。如果带宽抖动超过10%说明流控参数需要调整。3.4 大规模集群的运维监控集群上线只是开始日常运维才是重头戏。RDMA网络的监控要覆盖几个层面链路层看PFC暂停帧计数、ECN标记计数传输层看重传次数、QP错误数应用层看通信耗时占比。我习惯用Prometheus加Grafana搭一套监控面板把关键指标可视化。特别要盯的是PFC暂停帧的增长趋势——如果某个端口持续产生暂停帧说明上游有节点在持续高速发送可能是流量分布不均需要检查路由或任务调度策略。另一个实用技巧是定期做链路健康检查。光模块和线缆是故障率最高的部件建议每周跑一次全链路误码率检测提前发现劣化趋势。4. 常见问题与排查技巧实录4.1 RDMA性能突然下降怎么查这是最典型的问题。排查思路是从下往上先看物理层用ibstat确认链路速率和状态是否正常再看流控层检查PFC和ECN计数是否有异常增长然后看传输层用perfquery查看是否有重传或QP错误最后看应用层确认是不是业务本身的问题。我遇到过一次性能下降最后定位到是某台交换机的固件版本和网卡驱动不兼容导致ECN标记异常。这种问题靠单看某一层是查不出来的必须端到端看。4.2 go-back-n重传的触发条件与应对热词里提到的“rdma go-back-n 重传”值得单独说。RDMA的重传机制和TCP不同它采用的是基于序列号的选择重传或go-back-n。go-back-n的意思是一旦某个包丢失从那个包开始的所有后续包都要重传效率很低。触发go-back-n的典型原因是网络真的丢包了而丢包又通常源于PFC配置不当或缓冲区不足。所以应对方法不是去调重传参数而是回到源头解决丢包。具体做法检查PFC阈值、确认所有链路都启用了流控、排查是否有非RDMA流量抢占缓冲区。4.3 常见问题速查表问题现象可能原因排查方法解决方向带宽只有标称值一半PCIe带宽不足或线缆降速查lspci和ibstat换PCIe插槽或线缆延迟抖动大PFC频繁触发看PFC暂停帧计数调整PFC阈值偶发QP错误链路误码查误码率计数器更换光模块多对一测试丢包缓冲区不足看交换机缓存使用率增大缓冲区或调ECN训练任务扩展效率低通信与计算未重叠分析通信耗时占比优化任务调度4.4 几个踩过的坑第一个坑是忽略BIOS设置。有些服务器的PCIe插槽默认运行在较低速率或者没有开启Above 4G Decoding导致网卡性能发挥不出来。上电前一定要检查BIOS里的PCIe相关配置。第二个坑是混用不同批次的光模块。不同厂商、不同批次的光模块参数可能有细微差异混用会导致链路误码率上升。建议同一链路两端用同批次模块。第三个坑是忽视固件版本一致性。网卡固件、交换机固件、驱动版本之间是有兼容性矩阵的升级时不能只升一个。我习惯在升级前先查厂商的兼容性文档升级后跑一遍基准测试确认性能没有回退。5. 这套方案适合谁以及后续可以怎么深入scaleFabric这类全栈自研RDMA方案最直接的受益者是做大规模智算集群和HPC集群的团队。如果你正在规划千卡以上的训练集群或者现有集群的通信效率已经成为瓶颈那这套东西值得认真评估。对于个人开发者和小团队来说直接部署整套方案可能成本偏高但理解RDMA无损网络的原理和调优方法对任何涉及分布式系统的工作都有帮助。哪怕你用的是云上的RDMA实例底层的流控逻辑是一样的。后续如果想深入我建议从三个方向入手一是动手搭一个小规模的RoCE测试环境两台服务器加一台支持PFC的交换机就能跑起来二是深入研究DCQCN的算法细节理解速率调整的数学逻辑三是关注RDMA在存储和数据库领域的应用比如NVMe over Fabrics这是另一个快速增长的方向。我在实际项目里最大的体会是RDMA网络的性能三分靠硬件七分靠调优。同样的硬件配置参数调得好和调得差实际吞吐能差出一倍。所以别指望开箱即用花时间做压测和调参回报是实打实的。
返回列表