去年有个客户问我:智算中心直接用VxLAN不是挺好?以太网生态成熟、团队也熟,干嘛非要折腾SRv6?我当时的回答是:如果你用千卡以下规模跑推理业务,VxLAN完全没毛病;一旦上到万卡级AI训练集群,反复遇到网络故障恢复慢、负载不均衡、训着训着算力利用率掉下去的问题之后,你会自己想换方案。这篇文章就把“为什么VxLAN撑不起AI算力集群、SRv6为什么能给出答案”这件事彻底说透。
我会从AI集群网络的真实流量特征讲起,接着拆VxLAN的先天性短板,再讲SRv6从哪几个维度补上了这些短板,最后给一份可以落到实处的迁移与部署经验。适合正在做智算中心网络规划、AI基础设施架构选型的工程师阅读,也适合被“明明链路带宽很多、训练速度却起不来”折磨的运维同学参考。
1. AI算力集群的流量真相:这不是传统云网络
1.1 分布式训练的通勤高峰:所有GPU在同一时刻涌向网络
要理解VxLAN为什么不够用,先得理解AI计算给网络出的题是什么。传统云数据中心里,流量模型是“长尾效应”——大量小流、一部分中等流、极少数大象流,互相之间没有强同步节奏。网络调度上的目标只是让总体吞吐尽量高,个别流慢一点没关系。
AI分布式训练完全不同。以最常见的AllReduce集合通信为例:成百上千块GPU并行算完一批数据后,必须在同一个时间点把各自的梯度汇总、同步、再分发出去,才能进入下一轮迭代。这个梯度同步过程是严格周期性的,而且量非常大。
拿一个千卡集群粗算一下:假设单卡训练batch size为32,模型为1750亿参数级别,半精度梯度约350GB,一轮同步中每卡平均要吐几百MB到GB级别的数据。这意味着每几十秒就会有一波凶猛流量同时从所有GPU涌向网络,持续几秒到十几秒,速率跑满线速。这种流量在时空上是高度聚集的——网络上所有叶子节点、所有Spine链路,会在同一瞬间同时满负荷。
打个比方,普通云网络像是城市全天候的车流,高峰虽然堵,但总有错峰的可能;AI训练网络像是早高峰所有公司同时下班,所有人都冲向同一个地铁站——这个“同时性”就是最大的麻烦。
1.2 无损队列与确定性:RoCEv2对网络的“苛刻”要求
更麻烦的是,大规模AI训练普遍用RoCEv2跑RDMA,这直接颠覆了传统IP网络的“尽力而为”逻辑。RoCEv2要求无损传输,依赖PFC(优先级流控)和ECN(显式拥塞通知)两个机制维持一个“不丢包”的通道。
PFC的本质是“怕丢包,所以让上游先憋住”——当一台交换机端口拥塞时,它会向上游发暂停帧,让对方别发了。这本身没问题,麻烦在于PFC的暂停会像多米诺骨牌一样向源头反向扩散,如果扩散到网卡,GPU的通信就会直接停滞。所以RoCE网络里最害怕的事情不是带宽不够,而是拥塞点出现得不合时宜、不可预测,导致PFC风暴。
ECN的本意是在交换机队列深度超过阈值时给报文打标记,让接收方通知发送方降速,从而避免队列堆积。但RoCEv2的流量是封装在VXLAN的UDP隧道里的,交换机如果只看外层报文,很难准确感知内层RDMA流量实际的拥塞状态。要把外层IP头的ECN信息与内层报文的拥塞反馈关联起来,需要一堆额外配置(Congestion Avoidance at Outer Tunnel、VXLAN to IP ECN Mapping等),各家厂商还不尽相同。这种配置复杂度,在几十台设备的小网络里可以忍,到了上百台、上千台设备的算力集群里,就是巨大的运维隐患。
1.3 规模与故障域:大二层越扩越大的“隐形成本”
AI集群的网络规模也和传统云网络不在一个量级。千卡集群通常是两层胖树(Leaf-Spine),万卡要三层甚至正交架构,接入的GPU节点成百上千,网络端口的数量轻轻松松到数千个。每张GPU都有独立的IP和MAC,意味着网络里有数以万计的终端端点。
这种规模下,大二层网络引以为傲的“全网互通”反而成了包袱。二层广播域越大,ARP/ND泛洪、未知单播泛洪、组播泛洪的范围就越大,任何一次广播风暴都可能波及整个集群。很多团队的实际做法是“美其名曰大二层,实则用VLAN/VNI划分隔离域,把广播范围控制在叶子交换机以下”——但这又回到了三层网络的复杂性上,VxLAN的大二层优势大打折扣。
一句话总结:AI算力集群需要的网络,是“高并发、极低延迟、无损传输、故障快速收敛、流量精确可控”的确定性网络,而不是“能通就行、尽力而为、故障靠重启”的传统数据中心网络。拿VxLAN这张老地图去导航AI网络这片新地形,自然会出问题。
2. VxLAN病在哪?三条先天短板逐一拆解
2.1 历史定位决定基因:VxLAN生来不是为算力集群
VxLAN是2014年发布的RFC 7348标准,那时的核心诉求非常明确:解决云计算时代虚拟机跨物理服务器迁移时,二层网络范围不够用的问题。它要把二层域跨越三层网络拉通,让虚拟机搬家后IP和MAC都不用变。后来的BGP EVPN(RFC 7432、RFC 8365)补齐了控制面,让VxLAN从“手工配置隧道”进化成“协议自动建隧道的网络”。
这套机制的基因决定了它的设计目标:提高虚拟化环境的灵活性和部署效率。它从来没想过有一天要承载“几千张GPU同步做AllReduce”这种流量。就像城市为了通勤方便修了一条全封闭快速路,设计时速80公里,结果现在要拿它跑重载卡车编队,你当然可以说“都是路”,但承重、坡度、车道宽度完全不是一个标准。
具体到技术上,VxLAN本身只定义了数据平面的封装格式——UDP头部加VxLAN头部,外层UDP端口4789,内层是以太网帧。至于怎么知道对端VTEP在哪、走哪条路径、隧道状态是否健康,它根本不管。这些活儿全部落在EVPN控制面和底层IGP路由协议上。问题恰恰出在这里:隧道封装只是“形式上的网络连通”,真正决定流量怎么走、故障怎么恢复的,是底层路由协议和哈希算法,而这些恰恰不是为AI流量设计的。
2.2 哈希负载分摊的瓶颈:大象流的苦难
VxLAN数据面的负载均衡,绝大多数实现是基于外层报文五元组或三元组的ECMP哈希。交换机看到一条流,算一个哈希值,把整条流固定映射到某一条等价路径上。这在大量小流的场景下效果很好,因为流的数量多,统计上能摊匀。
但AI训练里的流量特点是:流的数量少,每条流都巨大。一个AllReduce过程里,可能只有几十条到几百条RoCE连接,可每一条都跑满带宽。这时候哈希的均匀性完全靠脸。
我算过一笔账:4条100G上行链路,同时来了5条各占40G的大象流。理想调度是4条链路分别承载约50G流量,但ECMP哈希没有这个全局视野,它只看每条流的五元组,算出一个确定性的哈希值。结果完全可能3条流挤在链路A上,链路B和C各一条,链路D空转。最极端的情况下,5条流全部哈希到同一条链路,其余三条100G全闲着,算力集群的有效通信带宽直接掉到25%。
有人说那Flowlet负载分担不就能救吗?Flowlet的思路是检测同一条流内部是否有足够的时间间隔,如果间隔超过一定阈值,就把后续报文当作“新的flowlet”重新哈希到其他路径。这个机制对TCP这种有突发间隙的流量效果不错,但对持续同步发送的RDMA流量几乎无效——RDMA流在同步阶段是全速连续发送的,根本没有足够长的间隙让交换机切分。实测下来,Flowlet对AI训练大象流的改善非常有限。
算力集群最值钱的就是GPU卡。算力利用率从90%掉到70%,等于白白损失了20%的算力投资。这个账在万卡集群里是非常恐怖的——少说也是几千万元的设备在空转。
2.3 控制面收敛速度:秒级修复在万卡集群里太慢了
VxLAN EVPN的故障恢复链路是这样的:底层链路断了,靠BFD或硬件检测发现;检测到之后,IGP/BGP重新收敛路由;EVPN重新计算VNID对应的VTEP转发路径;最后硬件转发表更新。整个过程涉及的协议栈非常长,每一步都在消耗时间。
BFD的检测速度可以调到3.3ms的发送间隔乘以3,也就是大约10ms内能感知故障。但感知到故障只是第一步。BGP路由撤销需要在全网传播,每台设备要重新计算最优路径、更新转发表。在几百台设备的大型EVPN环境里,整个收敛过程通常在秒级,网络抖动5到10秒都是常见的。
10秒对普通网页访问来说,用户刷新一下可能就过去了。但对AI训练集群来说,网络中断10秒意味着所有GPU的集合通信全部挂起,消息超时,严重时整个训练任务直接报错终止。即便网络恢复了,训练框架还要重新建立连接、重新同步状态,前前后后可能折腾十几分钟。在万卡集群上,一次小小的链路抖动就可能让几百万GPU时长的算力全部打水漂。
3. SRv6的解题思路:从“逐跳尽力而为”到“端到端可编程”
3.1 源路由:路径写进报文头,不赌哈希运气
SRv6(Segment Routing over IPv6)的核心理念是源路由——在报文发送端就把整条路径以Segment列表的形式写入IPv6扩展头(SRH),中间节点只需要按着SID(Segment Identifier)列表往下转,根本不需要针对每条流查复杂的转发表。
我习惯把VxLAN的转发模式形容为“每个路口自己看路牌”,交换机只能根据目的地址选一条本地最优路,至于全局哪条链路空闲,它不知道。而SRv6相当于出发前就把导航路线写在了信封上:“先到A点,再到B点,最后到C点”,中间设备看到信封上写着“下一站是A”,就老老实实把信送到A,再按信封上的下一站继续送。
具体来说,每个SRv6 SID是一个128位的IPv6地址,格式是Locator + Function。Locator部分相当于一个路由前缀,可以在IGP里聚合通告,中间节点一看Locator就知道该往哪个方向转;Function部分编码了要执行的具体动作,比如“转发到某个端口”“做一次SRv6压缩”“把报文解封装送到本机”。
由于路径是由发送端或控制器指定的,负载均衡不再依赖哈希撞运气。控制器可以精确看到“链路A上有5条大象流,链路B还是空的”,然后给新流量下发一个走链路B的SID列表,流量调度从概率学变成了确定性的工程控制。
3.2 SR Policy + 控制器:每条关键流都有专属“行车导航”
光有源路由还不够,如果每条流的SID列表都要手工配,运维会疯掉。SRv6的杀手级应用是SR Policy(RFC 9256):控制器、网管系统或头端设备可以把一组显式路径定义为SR Policy,每条Policy对应一组候选路径(Candidate Path),每条候选路径可以绑定一个SID列表。
举个例子:控制器计算出一万卡训练集群中“叶子E1到叶子E2”的最优路径经过Spine S1,但S1链路已经拥塞。控制器可以直接给这个SR Policy分配一条“避开S1、走S2和S3”的SID列表,并把它设为激活候选路径。头端交换机收到流量后,直接封装这个SID列表,流量就绕过S1,全程不需要每台设备做复杂决策。
更关键的是,SR Policy支持按流做精细化调控。你可以把GPU训练流映射到低时延Policy上,把存储同步流映射到另一个高带宽Policy上;甚至可以在训练流拥塞时,控制器实时给特定流重新下发一条新路径。这种“每流级、每路径级”的可编程能力,对VxLAN来说是质的飞跃——VxLAN里想做类似事情,只能靠宿主机或网卡策略路由,根本无法做到网络设备层面的全局调度。
3.3 TI-LFA与Flex-Algo:50ms级保护外加一张“低时延快线”
SRv6在可靠性方面也有先天优势。基于Segment Routing的TI-LFA(拓扑无关无环备份)可以在IGP计算出主路径的同时,预先算好备份路径,并把备份路径以SID列表形式下发到转发面。当主链路故障时,头端或故障点直接切换到备份SID列表,整个过程不需要等待BGP收敛,故障切换可以做到50ms以内。
50ms是什么概念?集线通信的报文超时重传阈值通常在毫秒到百毫秒级,50ms内的切换对大多数RDMA应用来说是无感的。传统VxLAN EVPN环境的秒级恢复,在50ms面前完全是两个时代。
Flex-Algo(RFC 9350)给SRv6网络多开了一扇窗。它允许在同一套物理拓扑上并行运行多个算法拓扑:比如算法0按最小开销(IGP metric)选路,算法128按最小时延选路,算法129避开某些低带宽链路选路。每个算法可以算出不同的SID,也就是不同的路径集合。
这对AI集群特别实用:训练流量需要极低时延,就让它走算法128的拓扑,这些路径的链路时延被控制器优化过;备份/日志流量对时延不敏感,就走普通算法0拓扑,避免和训练流量争抢优质链路。本质上相当于在同一张物理网络上虚拟出了多张“专网”,比VxLAN靠隔离VNI来实现东西要灵活得多。
4. 故障与拥塞两个实战场:VxLAN和SRv6的表现差距
4.1 场景一:Spine节点故障后的业务中断时间
假设一套6000卡集群的Spine层有8台设备,其中一台突然宕机。看看两类方案各自的表现。
VxLAN EVPN环境的处理流程如下:
- BFD在10ms内感知到邻居丢失,本机标记相关链路down。
- IGP重新计算SPF,向全网通告拓扑变化。SPF计算在每台设备上独立进行,几百台设备各自算,耗时不等。
- BGP开始撤销或重新通告受影响的路由,EVPN路由随之变化。
- 每台VTEP重新计算到对端VTEP的下一跳,更新硬件转发表。
- 全网转发路径达到一致状态。
这个过程走下来,5到15秒是常态。期间穿越故障点的RoCE流全部中断,PFC风暴可能波及周边设备,上层训练框架直接报错。我见过比较糟糕的情况,一个小型链路抖动最后演变成整个集群需要重启训练任务,半天时间没了。
SRv6+TI-LFA的处理流程则短得多:故障点设备(或感知到故障的头端设备)直接查询预下发的备份SID列表,把流量切到备份路径。整个过程由硬件转发表切换完成,不依赖路由协议全网的同步收敛,时间在50ms左右。训练流量几乎无感知,顶多在监控面板上看到一次小幅的时延抖动。
4.2 场景二:训练流冲突后的流量调度能力
再说拥塞。假设Spine层有4条100G上连,当前有4条训练大象流,刚好被ECMP哈希均匀分配到4条链路上,看起来岁月静好。这时候又来了第5条训练流,每个流40G。
VxLAN环境下你几乎没有任何办法。哈希算法把第5条流映射到某条链路——很大概率它会和已有的一条流冲突,那条链路变成80G负载,其他链路跑到80G空闲。你说那我把ECMP权重调一下?哈希基于五元组,你调权重改变不了具体某条流的落点。你说那用Flowlet?前面说过,RDMA连续流没有足够间隔,切分效果堪忧。
SRv6环境下操作就优雅多了:控制器实时监控发现链路1负载80%、链路4负载40%,立即计算一条新的SID列表,把第5条流导到链路4上。甚至在局部拥塞持续时,直接把原来在链路1上的某条流也换到其他空闲链路。全程不需要改配置、不需要断流,控制器下发新Policy,头端设备切换SID列表,几十毫秒完成。这就是“确定性网络”和“概率性网络”最大的区别。
4.3 一张表看完差距:控制面、数据面、可编程性与生态成本
| 维度 | VxLAN EVPN | SRv6 |
|---|---|---|
| 设计目标 | 云计算大二层扩展 | 端到端流量工程与路径编程 |
| 控制面 | BGP EVPN,收敛秒级 | IS-IS/OSPF/BGP SR扩展,收敛毫秒级 |
| 数据面 | UDP隧道封装,逐跳转发 | IPv6 SRH封装,源路由显式选路 |
| 负载均衡 | ECMP哈希,概率均匀 | SR Policy显式路径,确定性调度 |
| 故障保护 | BFD+BGP收敛,秒级恢复 | TI-LFA备份路径,50ms级 |
| 网络切片 | 依赖VNI隔离,广播域大 | Flex-Algo虚拟拓扑,灵活多变 |
| 可观测性 | 只见VTEP隧道,难追溯内部路径 | SID路径可追踪,天然适合网络遥测 |
| 设备生态 | 成熟,几乎所有交换机支持 | 需要新芯片平台,新设备较适配 |
看完这张表,SRv6在技术指标上全面占优。但为什么很多人还在犹豫?因为生态成本——现有设备是否支持、团队是否熟悉、控制器是否需要单独采购,这些现实问题必须正视。下一章专门讲怎么落地。
5. 落地SRv6的正确姿势:过渡方案、设备选型与避坑经验
5.1 渐进式演进:SRv6与VxLAN如何先共存再切换
SRv6虽好,但直接“铲掉VxLAN重来”在大多数现网里并不现实。我见过比较稳妥的演进路径是分三步走:
第一步,underlay跑SRv6,overlay保留VxLAN。底层IGP升级为IS-IS SR,核心设备启用SRv6能力,建立SR Policy隧道;上层业务仍然使用VxLAN作为Overlay隧道终结到租户/业务侧。这样底层路径可控、故障收敛能力提升,Overlay对业务透明,迁移风险最小。
第二步,在关键流量上试点SRv6直连。选择对网络质量最敏感的训练流量或高性能计算流量,让头端设备直接把RSVP/LDP/VxLAN隧道切换为SR Policy,验证SID路径调度和TI-LFA的可靠性。这一步不需要全网改造,只是局部业务网关接入SRv6。
第三步,逐步淘汰VxLAN,在新扩容区域全面启用SRv6。数据中心新建模块、扩容区域直接采用SRv6架构,老区域用网关互联,等老设备生命周期结束后自然完成平滑切换。
这种渐进式的好处是,每个阶段都有明确的验证目标和回退方案。我见过不少项目盲目追求“一步到位”,结果控制器和网络设备联调出问题,业务一停就是半天。渐进式虽然慢一点,但每一步都稳。
5.2 部署前必须考虑的四个坑:MTU、芯片、控制器、RoCE联动
这部分是我踩过坑、也看别人踩过坑之后总结出来的。
第一是MTU问题。SRv6增加SRH头,一个SID列表包含4个SID时就比普通IPv6报文多出72字节(8字节基础SRH + 4×16字节SID列表),相比IPv4多出接近100字节。如果接口MTU还按传统1500字节配置,封装后必然分片,对RoCE无损网络来说分片等于丢包。务必把Spine-Leaf链路和服务器接入链路的MTU统一调整到9000字节(巨型帧),并且在测试阶段就验证整条路径的MTU可达性,而不是只改个别端口。
第二是芯片能力。现在的网络芯片并不都支持线速处理SRv6封装和多个SID列表。有些中低端设备虽然软件层面支持SRv6,但多SID处理性能直接掉一半以上。选型时一定要拿真实的训练流量压测——不是跑个ping通就完事,而是看跑满RoCE流量时CPU/转发芯片的负载和时延曲线。宁可多花预算买高端接入设备,也不要在这里给未来埋雷。
第三是控制器依赖。SR Policy的集中下发、路径计算、流量调度全都依赖控制器。控制器挂掉,整个网络虽然转发层面还能跑,但新增业务流的路径编程能力就没了,灵活性和可观测性大幅下降。生产环境必须做控制器的集群高可用部署,并且留好“无控制器可用的逃生预案”——比如让设备继续沿用最后下发的Policy,而不是立刻清空所有SR配置。
第四是RoCE和SRv6的联动。RoCEv2要求底层无损,SRv6作为一种隧道封装,并不会自动给你无损能力。PFC优先级队列、ECN门限、流量整形这些参数仍然需要联合调优。尤其是多个SR Policy的流量可能汇聚到同一物理端口,要确保每个优先级队列的缓冲区规划和SR Policy的路径规划一致,否则PFC风暴还是会找上门。我建议在测试阶段就做“控制器故障注入”“单条流大流量冲击”“多Policy拥塞碰撞”这三类测试,确认RoCE联动配置稳定后再上线。
5.3 给运维团队的学习路线与试点建议
最后聊几句运维团队转型的事。VxLAN团队切到SRv6,最大的障碍不是设备,而是思维方式。VxLAN调试的思路是“查隧道up没有、EVPN路由通没有、BGP邻居有没有问题”,到了SRv6时代,要习惯“查SID列表有没有下发、SR Policy的候选路径是否active、Flex-Algo的约束条件是否满足”。这要求团队补齐三个知识模块:IS-IS/OSPF的Segment Routing扩展、SR Policy与传统MPLS TE的关系与差异、控制器北向接口和编排逻辑。
建议先用一个200卡以下的小集群做试点,跑通“控制器下发SR Policy + TI-LFA故障切换 + Flex-Algo低时延拓扑”三个核心场景,再扩展规模。不要一上来就挑战万卡——SRv6的核心价值在于大规模下的确定性,但大规模也放大了配置复杂度,团队还没上手时,小规模验证能帮你把概念、流程、排障方法都固化下来。
提示:SRv6的路径可追踪特性,对AI集群排障是一大隐藏福利。传统VxLAN只能看到VTEP之间的隧道,报文到底走了哪条链路很难查;SRv6的SID列表本身就携带了完整路径信息,配合网络遥测可以精确还原每条流的实际经过路径。
我在实际项目中的体会是,网络方案的选型最终拼的不是“谁会背更多标准”,而是“谁的方案能让GPU多跑几个百分点、让故障恢复少损失几个小时的算力”。VxLAN解决的是云化时代的连接问题,SRv6解决的是算力时代的调度问题——两种技术没有谁“错”了,只是面对AI算力集群这张考卷,SRv6的解题路径明显更接近正确答案。如果你正站在新算力中心网络方案的选型关口,建议把SRv6放入候选清单,拿着真实的训练流量做一轮完整的POC验证,结果会比任何PPT上的参数都有说服力。