已合并
[feat] 支持host网卡的多QP配置的获取 #4886
[feat] 支持host网卡的多QP配置的获取 #4886
已合并
LQ_oy创建于 8月27日
LQ_oy
LQ_oy成员
8月27日

描述

改动原因:peer 模式下 host 侧网卡的多 QP 配置(QP 数量、源 UDP 端口)此前无法获取,只能使用调用方显式配置、IP 对环境变量配置或全局默认值建链,导致 host 网卡无法按 host 配置文件中的多 QP 参数生效。

改动方法:
在 ResolveQueueNum 和 FillRoceSrcPortList 中根据设备 logicId 获取 phyId,通过 MyRankUtils 按需读取并校验 Host multi-QP config 中的 QP 数量或源 UDP 端口。QP 数量按照“调用方显式配置 > Host multi-QP config > IP 对环境变量配置 > 全局默认值”的顺序选择;源端口优先使用 Host multi-QP config,读取失败或配置无效时回退到 IP 对环境变量配置和原有默认行为。

变更类型

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

测试

补充的UT用例:

  1. Ut_ParseHostMultiQpConfig_CoversValidAndInvalidValues:验证 QP 数量和 UDP 端口列表的合法值、边界值及非法值解析。
  2. Ut_ReadHostNicMultiQpCount_ReadsLatestCountOnly:验证 QP 数量按需读取、查询 mode 和 count。
  3. Ut_ReadHostNicMultiQpUdpPorts_ReadsLatestPortsOnly:验证源 UDP 端口按需读取、查询 mode 和 ports。
  4. Ut_ProcessRoceChannelDesc_HostCountPriority:验证调用方配置、Host multi-QP config、IP 对环境变量配置和全局默认值之间的 QP 数量优先级,以及设备 ID 查询失败时的回退逻辑。
  5. Ut_FillRoceSrcPortList_HostConfigPriority:验证源端口优先使用 Host multi-QP config,并覆盖配置缺失、phyId 查询失败、IP 对配置回退和默认行为。

合入检查

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 LQ_oy 的贡献)
LQ_oyLQ_oy成员
8月27日 创建了 pull request,commit ec8739ae
atomgit-bot
atomgit-bot
8月27日 评论:

变更摘要

本 PR 使 peer 模式下 host 侧网卡的多 QP 配置(multi_qp_count、multi_qp_udp_ports)可以被获取并参与建链参数解析。核心做法是扩展 Hccn 配置读取链路:RsGetHccnCfg 与 RaGetHccnCfg 的签名由 phyId 改为 struct RaInfo *,从而按模式区分配置文件(offline 读 /etc/hccl.cfg,peer online 读 /etc/hcomm.cfg),并新增 RaPeerGetHccnCfg 供 peer 侧读取;在此基础上新增 EnvRdmaConfig::LoadHostNicMultiQpConfig(phyId),按物理设备 ID 读取并校验 host 配置、以互斥锁按 ConfigState(UNLOADED/VALID/INVALID)缓存,并在 CommunicatorImpl::InitHccpPeer 中于 peer 初始化完成后触发加载。同时调整 ResolveQueueNum 与 FillRoceSrcPortList 的解析优先级,使 host 配置优先于 IP 对环境变量配置与全局默认值,且不改变非 peer 场景既有逻辑。

主要改动

  • 配置读取接口扩展: RsGetHccnCfg/RaGetHccnCfg 改为接收 struct RaInfo *info,按 NETWORK_OFFLINE(/etc/hccl.cfg)与 NETWORK_PEER_ONLINE(/etc/hcomm.cfg)选择配置文件路径,其他模式返回不支持;ra_peer.c 新增 RaPeerGetHccnCfg(校验 gRaInitCounter、加 peer 互斥锁后调用 RsGetHccnCfg),ra_adp.c 的 RaRsGetHccnCfg 相应构造 NETWORK_OFFLINE 的 RaInfo 调用。

  • host 多 QP 配置加载与缓存: base_config_legacy.cc 新增 EnvRdmaConfig::LoadHostNicMultiQpConfig(phyId),通过 RaGetHccnCfg 读取 udp_port_mode/multi_qp_count/multi_qp_udp_ports 并校验(mode 须为 multi_qp、count∈[1,32]、端口为逗号分隔十进制且∈[1,65535]、最多 32 个端口),结果以 ConfigState(UNLOADED/VALID/INVALID)按 phyId 缓存,由 phyIdConfigMutex 保证惰性加载与并发安全;env_func.h/cc 相应新增 ConfigState、MultiQpConfig、GetMultiQpCountByPhyId、GetMultiQpSrcPortsByPhyId、IsPhyIdConfigAvailable,并将原 IsAvailable 保留为兼容别名 IsIpPairConfigAvailable。

  • 队列数解析优先级调整: coll_comm_res_c_adpt.cc 中 ResolveQueueNum 增加 phyId 参数,优先级改为调用方显式配置 > host 配置(GetMultiQpCountByPhyId)> IP 对环境变量配置 > 全局默认(GetRdmaQueueNum),ProcessRoceChannelDesc 通过 HrtGetDevicePhyIdByIndex 获取 phyId 传入。

  • 源端口列表填充优先级调整: my_rank.cc 中 FillRoceSrcPortList 增加 phyId 参数,优先取 host 配置端口(GetMultiQpSrcPortsByPhyId),无配置时回退 IP 对配置,再回退默认(udpSport=0);CreateChannels 在存在 ROCH 通道时通过 hrtGetDevicePhyIdByIndex 计算 devicePhyId 传入。

  • peer 初始化后触发加载: communicator_impl.cc 的 InitHccpPeer 在 HccpPeerManager::GetInstance().Init(devLogicId) 之后调用 LoadHostNicMultiQpConfig(devPhyId),使 host 配置仅在 peer 模式下被加载;并配套更新多处 UT/ST 桩与用例(如 ut_env_config.cc 覆盖合法/非法/边界/缓存/并发、ut_coll_comm_res_c_adpt.cc 验证优先级、ut_my_rank.cc 验证端口回退、ut_communicator_impl.cc 验证加载时机)。

likedislike
不准确?
atomgit-bot
atomgit-bot
8月27日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月27日 添加了label:cann-cla/no
CANN-robotCANN-robot成员
8月27日 添加了label:stat/needs-squash
此处折叠了460条消息 查看更多
CANN-robotCANN-robot成员
9月4日 添加了label:ci-pipeline-passed
欧阳茜
欧阳茜成员
9月4日 评论:

/lgtm

likedislike
57_Viking
57_Viking成员
9月4日 评论:

/approve

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