Pull Request已成功合入, 合并人@CANN-robot
(感谢 x00958740 的贡献)变更摘要
此 PR 的核心目标是移除 topo.json 中 net_layer 字段的拓扑语义,将物理拓扑统一构建为单张图,逻辑分层完全交由 RankTable 中的 net_layer 和端口映射来决定。同时补充了旧格式 BinaryStream 兼容、P2P/P2N 端口筛选、绕路与 64+1 场景适配,并在端口重叠场景下依据 EID 能力区分 UB_CTP 与 UB_TP 物理边。
主要改动
-
PhyTopo从多图层改为单图:AddTopoGraph不再接受netLayer参数,GetTopoGraph不再依据netLayer查询,内部存储从std::unordered_map<u32, shared_ptr<Graph>>变为单个shared_ptr<Graph>。IsNetLayerExisted方法被移除,PhyTopoBuilder::Build新增BuildPhyTopo方法统一构建物理图。 -
EdgeInfo不再解析net_layer:EdgeInfo::Deserialize移除对net_layer的解析和越界校验,成员netLayer被删除。旧topo.json携带的net_layer字段被静默忽略。BinaryStream序列化/反序列化使用LEGACY_BINARY_LAYER(0)作为兼容占位。 -
TopoInfo::edges从分层映射改为扁平列表:类型从std::map<u32, std::vector<EdgeInfo>>变为std::vector<EdgeInfo>。重复物理边不再抛异常而是合并去重。BinaryStream兼容旧分组格式,读取时展开并去重,写入时统一写入一个兼容分组。 -
RankGraphBuilder新增 EID 协议解析与端口筛选:新增ResolveUbProtocolByEid通过HccpRaGetDevBaseAttr查询 EID 的 CTP/RTP 能力,在物理边同时存在UB_CTP和UB_TP时按能力筛选。AddFabricInfo使用IsPeer2NetLinkMatched按端口交集匹配物理边,GetPeer2NetPhyLinks不再接受netLayer参数。移除CheckNetLayerFromPhyTopo校验。 -
64+1 绕路与端口归属强化:
DetourService中绕路候选边增加LinkType::PEER2PEER类型过滤,端口地址查找改用新增的TryGetLayer0Address方法确保端口属于RankTable layer 0。UpdaterFor64Plus1新增HasLayer0Port和HasLayer0Peer2PeerLink辅助函数,GetPeer2PlaneEdges改为依据端口数量和协议集合筛选备份面物理边。


代码审查
经过全面审查后,我现在给出最终总结。
审查总结
已审查全部 40 个变更文件。以下是审查结果:
各文件审查结论
源代码文件(17 个):
src/base_comm/resources/southbound_adpt/hcomm_adapter_hccp.cc— 无问题(增强日志输出,仅新增HccpRaGetDevBaseAttr的调试信息)src/coll_communicator_mgr/rank_graph/phy_topo/phy_topo.cc— 无问题(unordered_map→ 单shared_ptr,API 签名简化一致)src/coll_communicator_mgr/rank_graph/phy_topo/phy_topo.h— 无问题(移除netLayer相关声明,移除#include <unordered_map>)src/coll_communicator_mgr/rank_graph/phy_topo_builder/phy_topo_builder.cc— 无问题(新增BuildPhyTopo方法统一构建单图)src/coll_communicator_mgr/rank_graph/phy_topo_builder/phy_topo_builder.h— 无问题(新增BuildPhyTopo声明)src/coll_communicator_mgr/rank_graph/rank_graph/net_instance.cc— 无问题(新增TryGetLayer0Address,边界检查正确)src/coll_communicator_mgr/rank_graph/rank_graph/net_instance.h— 无问题src/coll_communicator_mgr/rank_graph/rank_graph_builder/detour_service.cc— 无问题(新增空指针防护、P2P 类型过滤、layer0 端口校验)src/coll_communicator_mgr/rank_graph/rank_graph_builder/rank_graph_builder.cc— 1 个 P3 发现(UpdateTopoInstForMyRankOnly中冗余构造ConnInterface)src/coll_communicator_mgr/rank_graph/rank_graph_builder/rank_graph_builder.h— 无问题src/coll_communicator_mgr/rank_graph/rank_graph_builder/updater_for_64_plus_1.cc— 无问题(新增HasLayer0Port/HasLayer0Peer2PeerLink,GetPeer2PlaneEdges增强过滤)src/coll_communicator_mgr/rank_graph/rank_graph_builder/updater_for_64_plus_1.h— 无问题src/coll_communicator_mgr/rank_graph/topo_info/edge_info.cc— 无问题(移除netLayer解析,BinaryStream 兼容层正确)src/coll_communicator_mgr/rank_graph/topo_info/edge_info.h— 无问题(移除netLayer字段和MAX_VALUE_LEVEL,新增LEGACY_BINARY_LAYER)src/coll_communicator_mgr/rank_graph/topo_info/topo_info.cc— 无问题(map<u32, vector>→vector,BinaryStream 兼容,重复边合并)src/coll_communicator_mgr/rank_graph/topo_info/topo_info.h— 无问题(类型变更一致,移除#include <map>)src/coll_communicator_mgr/rank_info_detect/rank_info_detect_client.cc— 无问题(IsHostRdmaLink/HasMatchingPort逻辑正确)
Legacy 文件(6 个):
src/legacy/ascend950/framework/resource_manager/socket/socket_manager.cc— 无问题src/legacy/ascend950/framework/topo/new_topo_builder/phy_topo/phy_topo.h— 无问题(与新版一致)src/legacy/ascend950/framework/topo/new_topo_builder/phy_topo_builder/phy_topo_builder.h— 无问题src/legacy/ascend950/framework/topo/new_topo_builder/rank_graph/net_instance.h— 无问题src/legacy/ascend950/framework/topo/new_topo_builder/topo_info/edge_info.h— 无问题src/legacy/ascend950/framework/topo/new_topo_builder/topo_info/topo_info.h— 无问题
测试文件(17 个):
test/legacy/st/algorithm/testcase/.../1d_2p_mesh_topo/ranktable.json— 无问题(端口号适配)test/legacy/st/algorithm/testcase/.../2d_2+2p_mesh_topo/ranktable.json— 无问题(端口号适配)test/legacy/st/otherFiles/phy_topo/st_phy_topo.cc— 无问题test/legacy/st/otherFiles/phy_topo_builder/st_phy_topo_builder.cc— 无问题test/legacy/st/otherFiles/topo_info/st_edge_info.cc— 无问题test/legacy/st/otherFiles/topo_info/st_topo_info.cc— 无问题test/legacy/ut/framework/communicator/ranktable_stub_clos.h— 无问题(新增plane_id字段)test/legacy/ut/framework/resource_manager/socket/ut_socket_manager.cc— 无问题test/legacy/ut/framework/topo/ranktable/rank_table.h— 无问题(移除net_layer字段)test/ut/framework/next/coll_comms/rank_graphs/common/rank_graph_test_data_builder.h— 无问题test/ut/framework/next/coll_comms/rank_graphs/phy_topo/ut_phy_topo.cc— 无问题test/ut/framework/next/coll_comms/rank_graphs/phy_topo_builder/ut_phy_topo_builder.cc— 无问题test/ut/framework/next/coll_comms/rank_graphs/rank_graph_64_plus_1/ut_rank_graph_64_plus_1.cc— 无问题test/ut/framework/next/coll_comms/rank_graphs/rank_graph_builder/ut_rank_graph_builder.cc— 无问题test/ut/framework/next/coll_comms/rank_graphs/topo_info/ut_edge_info.cc— 无问题test/ut/framework/next/coll_comms/rank_graphs/topo_info/ut_topo_info.cc— 无问题test/ut/framework/next/coll_comms/rank_info_detect/ut_rank_info_detect_client.cc— 无问题
发现问题汇总
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 1 |
整体风险评估
低风险。 此次变更的核心逻辑——移除 topo.json 中 net_layer 的语义、将物理拓扑统一为单图、以 RankTable 的 net_layer 和端口映射驱动逻辑分层——在所有文件中的实现一致且正确。API 签名变更(AddTopoGraph/GetTopoGraph 去参化、edges 类型扁平化、netLayer 字段移除)均已同步到所有头文件、实现文件和测试文件,无遗留调用点。BinaryStream 的向前/向后兼容通过 LEGACY_BINARY_LAYER 占位字段和读取侧忽略机制正确实现。唯一的 P3 发现是 UpdateTopoInstForMyRankOnly 中构造了未使用的 ConnInterface 对象,属于性能优化建议,不影响正确性。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 3 |
💬 仅评论


/lgtm


/approve


描述
本 PR 移除 topo.json.edge_list[].net_layer 对拓扑构建的影响,并完善统一物理拓扑下的逻辑分层、UB 协议消歧、等价拓扑实例去重和 Endpoint 分层查询。
修改后的原则如下:
核心设计
1. 统一物理拓扑
2. 按 RankTable 构建 RankGraph
3. EID 协议能力与物理边选择
仅对非 layer 0 的 CLOS P2N 场景执行 EID 协议查询:
同时支持 CTP/RTP 时不会新增第二条物理边、Fabric 或 TopoInstance,仅在选中的 CTP 接口和逻辑边上扩展 UB_TP 能力,因此不会改变算法看到的节点数和物理连接数量。
4. 等价 TopoInstance 去重
统一物理图中可能存在除 topoInstId 外完全相同的 P2N 候选边。对非 layer 0 的 RankTable 网络:
该处理避免 layer 1/2 因重复候选边生成多个等价 TopoInstance,影响 NHR 等算法的拓扑判断。
5. Endpoint 跨 layer 隔离
原 Endpoint 映射只使用 CommAddr 和 CommProtocol 作为 key。当 layer 1/2 复用相同 EID 和协议时,后插入的接口会覆盖先插入的接口,导致 BW_COEFF、localDieId 等属性跨 layer 串用。
本 PR 将内部 Endpoint key 扩展为:
并完成以下兼容处理:
行为说明
变更类型
关联 Issue
NA
测试
已新增或适配以下 UT/ST 场景:
已完成的静态验证:
编译、UT、ST 和 codecheck 最终状态以本 PR 最新流水线结果为准。
文档
本 PR 未提交额外设计文档;代码内已补充必要的简洁注释。
合入检查