已合并
[feat] 支持通过环境变量配置多QP UDP源端口 #5135
[feat] 支持通过环境变量配置多QP UDP源端口 #5135
已合并
刘宏明创建于 9月8日
刘宏明
刘宏明
9月8日

描述

改动原因:支持通过环境变量HCCL_HOST_RDMA_UDP_PORTS_LIST按物理设备配置多 QP 的 UDP 源端口,便于根据组网需求进行哈希分流。

改动方法:

  1. 新增环境变量 HCCL_HOST_RDMA_UDP_PORTS_LIST 的解析和查询能力,配置格式为 phy_dev_id:port_0,port_1;...。
  2. 校验物理设备 ID、端口范围、单卡端口数量、配置长度、分隔符及重复物理设备 ID。
  3. 在 HostCpuRoceChannel 创建 QP 时,根据当前物理设备 ID 查询环境变量端口。
  4. UDP 源端口按照“/etc/hcomm.cfg 配置 > HCCL_HOST_RDMA_UDP_PORTS_LIST > MultiQpSrcPort.cfg”的优先级获取,环境变量未匹配时回退到现有 MultiQpSrcPort.cfg 配置。
  5. 端口数量少于 QP 数量时循环使用端口。

变更类型

请选择本次引入的变更类型:

关联的Issue

NA

测试

补充的UT用例:

  1. test/legacy/ut/framework/env_config/ut_env_config.cc:Ut_EnvRdmaConfigGetHostRdmaUdpPortsList_WhenValidAndEmpty_ExpectParsed,验证合法配置解析、按物理设备查询及空配置处理。
  2. test/legacy/ut/framework/env_config/ut_env_config.cc:Ut_EnvRdmaConfigParse_WhenHostRdmaUdpPortsInvalid_ExpectThrow,验证非法设备 ID、非法端口、端口越界及端口数量超限等异常配置。
  3. test/ut/framework/next/coll_comms/rank/ut_my_rank.cc:扩展 Ut_FillRoceSrcPortList_HostConfigPriority,验证环境变量优先级、按物理设备匹配、设备查询失败或未匹配时回退,以及端口循环复用行为。

文档更新

在hccl仓库中新增HCCL_HOST_RDMA_UDP_PORTS_LIST环境变量说明,见https://gitcode.com/cann/hccl/pull/2970。

合入检查

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 刘宏明 的贡献)
刘宏明刘宏明
9月8日 创建了 pull request,commit c9d90882
atomgit-bot
atomgit-bot
9月8日 评论:

变更摘要

该 PR 新增通过环境变量 HCCL_RDMA_UDP_SPORTS_LIST 按物理设备(phy_dev_id)配置多 QP UDP 源端口的能力,配置格式为 phy_dev_id:port_0,port_1;...。核心流程上,在 MyRankUtils::FillRoceSrcPortList 填充 QP 源端口时,优先按当前物理设备 ID 查询该环境变量中的端口配置,未匹配时回退到原有 MultiQpSrcPort.cfg 配置,且当端口数量少于 QP 数量时循环复用端口,便于按组网需求进行哈希分流。

主要改动

  • 环境变量接入与访问接口:在 base_config_legacy.h 的 EnvRdmaConfig 中新增 CfgField<RdmaUdpSportsList> rdmaUdpSportsList 字段,并在 base_config_legacy.cc 的 Parse() 中解析 HCCL_RDMA_UDP_SPORTS_LIST 及打印配置信息,同时新增访问接口 GetRdmaUdpSportsList()。
  • 解析与校验逻辑:在 env_func.cc 新增 CastRdmaUdpSportsList 及辅助解析函数,按分号切分设备配置、按冒号切分设备 ID 与端口列表,校验配置长度上限(CONFIG_VALUE_LEN_MAX)、分隔符、十进制设备 ID、端口范围及非零(上限 CONFIG_SRC_PORT_ID_MAX)、单设备端口数量上限(CONFIG_SRC_PORT_NUM_MAX)和重复 phy_dev_id,非法配置抛出 InvalidParamsException。
  • 数据结构:在 env_func.h 新增 RdmaUdpSportsList 结构(内部以 portsByPhyId 的 std::unordered_map<u32, std::vector<std::uint16_t>> 存储),提供 IsAvailable()、GetDeviceConfigCount(),并声明按设备 ID 查询的 GetRdmaUdpSportsByPhyId()。
  • 端口获取优先级与回退逻辑:在 my_rank.cc 将原 FillRoceSrcPortList 逻辑拆分为 FillPortsFromRdmaUdpSportsList(经 hrtGetDevice/hrtGetDevicePhyIdByIndex 获取当前物理设备 ID 后查询环境变量端口)和 FillPortsFromMultiQpSrcPortConfig(保留原 MultiQpSrcPort.cfg 按 IP 对查询逻辑),按环境变量优先、配置文件回退的顺序取端口,并在端口数与 queueNum 不匹配时告警、按 ports[j % ports.size()] 截断或循环复用。
  • 单元测试补充:在 ut_env_config.cc 增加合法配置解析、空配置处理以及非法设备 ID、非法端口、越界、超限、重复设备 ID 抛异常的用例;在 ut_my_rank.cc 扩展 Ut_FillRoceSrcPortList_HostConfigPriority 验证环境变量优先级、按物理设备匹配、未匹配回退及端口循环复用行为,并在 env_config_stub.h 中注册 HCCL_RDMA_UDP_SPORTS_LIST 的空默认值。
likedislike
不准确?
atomgit-bot
atomgit-bot
9月8日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
9月8日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
9月8日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
src/coll_communicator_mgr ✅ 丁炜秦, 颜业峰, 严正行, 欧阳茜 (4/2) ✅ 丁炜秦, 颜业峰 (2/1)
src/legacy/ascend950/framework/env_config ✅ 欧阳茜, 颜业峰, 严正行 (3/2) ✅ 颜业峰 (1/1)
src/legacy/ascend950/hccl_v2.map ✅ 颜业峰, 严正行, 欧阳茜 (3/2) ✅ 颜业峰 (1/1)
test ✅ 丁炜秦, 颜业峰, 严正行, 欧阳茜 (4/2) ✅ 丁炜秦, 颜业峰 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

qq_45577430, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了202条消息 查看更多
CANN-robot
CANN-robot成员
9月11日 评论:

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
gaoyongqiang

likedislike
philo
philo成员
9月11日 评论:

/approve

likedislike
CANN-robot
CANN-robot成员
9月11日 评论:

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
gaoyongqiang

likedislike
CANN-robotCANN-robot成员
9月11日 添加了label:approved
CANN-robotCANN-robot成员
9月11日 合入了pull request