已合并
多jetty:hcomm支持环境变量HCCL_UB_MULTI_CHANNEL_NUM的解析 #4732
huangbolin创建于 8月20日
多jetty:hcomm支持环境变量HCCL_UB_MULTI_CHANNEL_NUM的解析 #4732
已合并
huangbolin创建于 8月20日
共 11 个文件变更+145-44
@@ -22,7 +22,7 @@
22 22 
23获取指定通信域的HCCL配置信息。23获取指定通信域的HCCL配置信息。
24 24 
25-根据配置项类型查询对应的配置信息,并写入调用者提供的缓冲区中,当前支持查询通信算子的展开模式与通信算法配置字符串。25+根据配置项类型查询对应的配置信息,并写入调用者提供的缓冲区中,当前支持查询通信算子的展开模式、通信算法配置字符串及UB多channel数量。
26 26 
27## 函数原型27## 函数原型
28 28 
@@ -36,7 +36,7 @@ HcclResult HcclConfigGetInfo(HcclComm comm, HcclConfigType cfgType, uint32_t inf
36| --- | --- | --- |36| --- | --- | --- |
37| comm | 输入 | 通信域句柄。<br>HcclComm类型的定义可参见[HcclComm](./data_type_definition/HcclComm.md)。 |37| comm | 输入 | 通信域句柄。<br>HcclComm类型的定义可参见[HcclComm](./data_type_definition/HcclComm.md)。 |
38| cfgType | 输入 | 需要查询的配置项类型,HcclConfigType的定义可参见[HcclConfigType](./data_type_definition/HcclConfigType.md)。 |38| cfgType | 输入 | 需要查询的配置项类型,HcclConfigType的定义可参见[HcclConfigType](./data_type_definition/HcclConfigType.md)。 |
39-| infoLen | 输入 | 目标配置类型的大小(字节数),查询HCCL_CONFIG_TYPE_OP_EXPANSION_MODE时必须等于待查询配置类型的实际大小,查询HCCL_CONFIG_TYPE_HCCL_ALGO时必须不小于HCCL_COMM_ALGO_MAX_LENGTH字节数。 |39+| infoLen | 输入 | 目标配置类型的大小(字节数),查询HCCL_CONFIG_TYPE_OP_EXPANSION_MODE时必须等于待查询配置类型的实际大小,查询HCCL_CONFIG_TYPE_HCCL_ALGO时必须不小于HCCL_COMM_ALGO_MAX_LENGTH字节数,查询HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM时必须等于sizeof(uint32_t)。 |
40| info | 输出 | 配置信息输出缓冲区,必须按目标配置类型对齐且可写。 |40| info | 输出 | 配置信息输出缓冲区,必须按目标配置类型对齐且可写。 |
41 41 
42## 返回值42## 返回值
@@ -58,4 +58,9 @@ HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_OP_EXPANSION_MODE, siz
58char algoInfo[HCCL_COMM_ALGO_MAX_LENGTH];58char algoInfo[HCCL_COMM_ALGO_MAX_LENGTH];
59uint32_t algoSize = HCCL_COMM_ALGO_MAX_LENGTH; // 必须不小于HCCL_COMM_ALGO_MAX_LENGTH59uint32_t algoSize = HCCL_COMM_ALGO_MAX_LENGTH; // 必须不小于HCCL_COMM_ALGO_MAX_LENGTH
60HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_HCCL_ALGO, algoSize, algoInfo);60HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_HCCL_ALGO, algoSize, algoInfo);
61+ 
62+// 查询UB多channel数量
63+uint32_t multiChannelNum = 0;
64+uint32_t numSize = sizeof(uint32_t); // 必须等于目标类型大小
65+HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM, numSize, &multiChannelNum);
61```66```
@@ -2,14 +2,15 @@
2 2 
3## 功能说明3## 功能说明
4 4 
5-配置通信算子的展开模式和通信算法配置字符串。5+配置通信算子的展开模式、通信算法配置字符串及UB多channel数量。
6 6 
7## 定义原型7## 定义原型
8 8 
9```c9```c
10typedef enum {10typedef enum {
11- HCCL_CONFIG_TYPE_INVALID = -1, /* 无效配置项类型 */11+ HCCL_CONFIG_TYPE_INVALID = -1, /* 无效配置项类型 */
12- HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0, /* 算子展开模式,对应类型为hcclOpExpansionMode */12+ HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0, /* 算子展开模式,对应类型为hcclOpExpansionMode */
13- HCCL_CONFIG_TYPE_HCCL_ALGO = 1, /* 通信算法配置字符串,对应类型为长度HCCL_COMM_ALGO_MAX_LENGTH的char数组, 新增枚举字段向后兼容,不影响旧版本的代码 */13+ HCCL_CONFIG_TYPE_HCCL_ALGO = 1, /* 通信算法配置字符串,对应类型为长度HCCL_COMM_ALGO_MAX_LENGTH的char数组, 新增枚举字段向后兼容,不影响旧版本的代码 */
14+ HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM = 2, /* UB多channel数量,对应类型为uint32_t */
14} HcclConfigType;15} HcclConfigType;
15```16```
@@ -393,7 +393,8 @@ typedef enum {
393typedef enum {393typedef enum {
394 HCCL_CONFIG_TYPE_INVALID = -1,394 HCCL_CONFIG_TYPE_INVALID = -1,
395 HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0,395 HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0,
396- HCCL_CONFIG_TYPE_HCCL_ALGO = 1396+ HCCL_CONFIG_TYPE_HCCL_ALGO = 1,
397+ HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM = 2
欧阳茜
欧阳茜欧阳茜8月31日

[MEDIUM] 新增枚举值 HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM 但未同步更新文档

在对外头文件 include/hccl/hccl_comm.h 的 HcclConfigType 枚举中新增了 HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM = 2。这是对外 API 的枚举值新增,属于向后兼容的扩展(新增枚举值不破坏已有值),但 PR 描述「文档更新」一节为空,未提及对外头文件 API 变更。

建议:1. 在 PR 描述中补充对外 API 变更说明(新增枚举值、用途、调用方式)。2. 同步更新 docs/ 下的 API 参考文档(如有 HcclConfigGetInfo 的接口说明)。3. 确认 HCCL 仓是否已同步感知新的枚举值。

likedislike
huangbolin
huangbolin
8月31日 评论:
397} HcclConfigType;398} HcclConfigType;
398 399 
399typedef HcclOpExpansionMode HcclConfigTypeOpExpansionMode;400typedef HcclOpExpansionMode HcclConfigTypeOpExpansionMode;
@@ -21,6 +21,7 @@
21#include "rank_consistentcy_checker.h"21#include "rank_consistentcy_checker.h"
22#include "externalinput_pub.h"22#include "externalinput_pub.h"
23#include "env_config.h"23#include "env_config.h"
24+#include "env_config/env_config_v2.h"
24#include "../common/src/topo/topoinfo_detect.h"25#include "../common/src/topo/topoinfo_detect.h"
25#include "../common/src/topo/topoinfo_ranktable_partition.h"26#include "../common/src/topo/topoinfo_ranktable_partition.h"
26#include "../common/src/state_guard.h"27#include "../common/src/state_guard.h"
@@ -3788,6 +3789,61 @@ static HcclConfigTypeOpExpansionMode OpExpansionModeValueToModeEnum(const uint32
3788}3789}
3789#endif3790#endif
3790 3791 
3792+#if (!defined(HCCD)) && (!defined(CCL_KERNEL_AICPU))
3793+static HcclResult GetOpExpansionModeConfig(hccl::CollComm* collComm, uint32_t infoLen, void* info)
丁炜秦
丁炜秦丁炜秦9月5日

【软件架构】新增功能,与A3无关不要放在legacy目录中 环境变量解析在src目录非legacy已经有新目录了,从软件架构上考虑建议前移过去,目标文件名:base_config.h/.cc

likedislike
huangbolin
huangbolin
9月7日 评论:
3794+{
3795+ constexpr size_t infoExpectedLen = sizeof(HcclConfigTypeOpExpansionMode);
3796+ if (static_cast<size_t>(infoLen) != infoExpectedLen) {
3797+ HCCL_ERROR("[%s] infoLen[%u] less than expected[%zu].", __func__, infoLen, infoExpectedLen);
3798+ return HcclResult::HCCL_E_PARA;
3799+ }
3800+ auto* myRank = collComm->GetMyRank();
3801+ CHK_PTR_NULL(myRank);
3802+ const uint32_t opExpansionModeValue = myRank->GetOpExpansionMode();
3803+ const auto opExpansionMode = OpExpansionModeValueToModeEnum(opExpansionModeValue);
3804+ if (opExpansionMode == HcclOpExpansionMode::HCCL_OP_EXPANSION_MODE_INVALID) {
3805+ HCCL_ERROR("[%s] unknown expansion mode[%d].", __func__, opExpansionMode);
3806+ return HcclResult::HCCL_E_INTERNAL;
3807+ }
3808+ *static_cast<HcclConfigTypeOpExpansionMode*>(info) = opExpansionMode;
3809+ return HcclResult::HCCL_SUCCESS;
3810+}
3811+ 
3812+static HcclResult GetHcclAlgoConfig(hccl::CollComm* collComm, uint32_t infoLen, void* info)
3813+{
3814+ constexpr size_t infoExpectedLen = static_cast<size_t>(HCCL_COMM_ALGO_MAX_LENGTH);
3815+ if (static_cast<size_t>(infoLen) < infoExpectedLen) {
3816+ HCCL_ERROR("[%s] infoLen[%u] less than expected[%zu].", __func__, infoLen, infoExpectedLen);
3817+ return HcclResult::HCCL_E_PARA;
3818+ }
3819+ const std::string& hcclAlgo = collComm->GetCommConfig().GetConfigHcclAlgoStr();
3820+ auto* algoInfo = static_cast<char*>(info);
3821+ int32_t ret = memset_s(algoInfo, infoLen, 0, infoLen);
3822+ CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memset error, ret[%d].", __func__, ret), HCCL_E_INTERNAL);
3823+ if (!hcclAlgo.empty() && hcclAlgo.size() < infoLen) {
3824+ ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), hcclAlgo.size() + 1);
3825+ } else if (!hcclAlgo.empty()) {
3826+ ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), infoLen);
3827+ }
3828+ CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memcpy error, ret[%d].", __func__, ret), HCCL_E_INTERNAL);
3829+ return HcclResult::HCCL_SUCCESS;
3830+}
3831+ 
3832+// UB多channel数量为进程级全局配置(解析自环境变量、进程内唯一),不依赖通信域,
3833+// 故不同于 GetOpExpansionModeConfig/GetHcclAlgoConfig,无需 collComm 入参。
3834+static HcclResult GetUbMultiChannelNumConfig(uint32_t infoLen, void* info)
欧阳茜欧阳茜
欧阳茜欧阳茜8月31日

[MEDIUM] 新特性代码落在 src/legacy/,违反 legacy 不承接新特性约束

PR 标题为「多jetty:hcomm支持环境变量HCCL_UB_MULTI_JETTY_NUM的解析」,属新特性。核心变更 GetUbMultiChannelNumConfig 函数和 HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM 枚举的新增逻辑落在 src/legacy/ascend910/framework/op_base/src/op_base.cc。AGENTS.md 架构约束明确要求:「禁止在 src/legacy/ 新增功能/算子/接口;legacy 仅 bug 修复与兼容维护;新特性落 base_comm/ 或 coll_communicator_mgr/」。

虽然 HcclConfigGetInfo 接口本身是 legacy 中已有的接口(本次是重构+新增 case),但新增的 HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM 处理逻辑应尽量落在 coll_communicator_mgr 层。环境变量解析落在 env_config/ 下是合理的(env_config 属 legacy 基础设施),但业务逻辑应在非 legacy 层实现。

建议:如必须通过 HcclConfigGetInfo(legacy 接口)暴露,至少将 GetUbMultiChannelNumConfig 的实现移到 coll_communicator_mgr 层并通过函数指针或回调注册到 legacy 接口,避免在 legacy 中直接新增业务逻辑。

likedislike
huangbolin
huangbolin
8月31日 评论:
丁炜秦
丁炜秦
9月5日 评论:
欧阳茜欧阳茜9月2日

[LOW] GetUbMultiChannelNumConfig 不需要 collComm 参数,与其他两个函数签名不一致

GetOpExpansionModeConfig 和 GetHcclAlgoConfig 均接收 collComm 参数(从通信域获取配置),而 GetUbMultiChannelNumConfig 不接收 collComm,直接从全局 EnvConfig 单例获取环境变量值。这导致它在 HcclConfigGetInfo 的 switch 中调用方式不同(不传 collComm)。功能上正确(UB 多 channel 数量是全局环境变量而非通信域级别配置),但签名不一致影响代码一致性。建议在注释中说明此函数为何不需要 collComm 参数,或者保持当前设计(无需修改)。

likedislike
huangbolin
huangbolin
9月3日 评论:
3835+{
3836+ constexpr size_t infoExpectedLen = sizeof(uint32_t);
3837+ if (static_cast<size_t>(infoLen) != infoExpectedLen) {
3838+ HCCL_ERROR("[%s] infoLen[%u] not expected[%zu].", __func__, infoLen, infoExpectedLen);
3839+ return HcclResult::HCCL_E_PARA;
3840+ }
3841+ const uint32_t num = Hccl::EnvConfig::GetInstance().GetUbConfig().GetUbMultiChannelNum();
3842+ *static_cast<uint32_t*>(info) = num;
3843+ return HcclResult::HCCL_SUCCESS;
3844+}
3845+#endif
3846+ 
3791HcclResult HcclConfigGetInfo(3847HcclResult HcclConfigGetInfo(
3792 [[maybe_unused]] HcclComm comm, [[maybe_unused]] HcclConfigType cfgType, [[maybe_unused]] uint32_t infoLen,3848 [[maybe_unused]] HcclComm comm, [[maybe_unused]] HcclConfigType cfgType, [[maybe_unused]] uint32_t infoLen,
3793 [[maybe_unused]] void* info)3849 [[maybe_unused]] void* info)
@@ -3798,43 +3854,16 @@ HcclResult HcclConfigGetInfo(
3798 auto* hcclComm = static_cast<hccl::hcclComm*>(comm);3854 auto* hcclComm = static_cast<hccl::hcclComm*>(comm);
3799 auto* collComm = hcclComm->GetCollComm();3855 auto* collComm = hcclComm->GetCollComm();
3800 CHK_PTR_NULL(collComm);3856 CHK_PTR_NULL(collComm);
3801- if (cfgType == HcclConfigType::HCCL_CONFIG_TYPE_OP_EXPANSION_MODE) {3857+ switch (cfgType) {
3802- constexpr size_t infoExpectedLen = sizeof(HcclConfigTypeOpExpansionMode);3858+ case HcclConfigType::HCCL_CONFIG_TYPE_OP_EXPANSION_MODE:
3803- if (static_cast<size_t>(infoLen) != infoExpectedLen) {3859+ return GetOpExpansionModeConfig(collComm, infoLen, info);
3804- HCCL_ERROR("cfgType[%d] infoLen[%u] less than expected[%zu].", cfgType, infoLen, infoExpectedLen);3860+ case HcclConfigType::HCCL_CONFIG_TYPE_HCCL_ALGO:
3861+ return GetHcclAlgoConfig(collComm, infoLen, info);
3862+ case HcclConfigType::HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM:
3863+ return GetUbMultiChannelNumConfig(infoLen, info);
3864+ default:
3865+ HCCL_ERROR("[%s] cfgType[%d] is invalid.", __func__, cfgType);
3805 return HcclResult::HCCL_E_PARA;3866 return HcclResult::HCCL_E_PARA;
3806- }
3807- auto* myRank = collComm->GetMyRank();
3808- CHK_PTR_NULL(myRank);
3809- const uint32_t opExpansionModeValue = myRank->GetOpExpansionMode();
3810- const auto opExpansionMode = OpExpansionModeValueToModeEnum(opExpansionModeValue);
3811- if (opExpansionMode == HcclOpExpansionMode::HCCL_OP_EXPANSION_MODE_INVALID) {
3812- HCCL_ERROR("[%s] unknown expansion mode[%d].", __func__, opExpansionMode);
3813- return HcclResult::HCCL_E_INTERNAL;
3814- }
3815- auto* modeInfo = static_cast<HcclConfigTypeOpExpansionMode*>(info);
3816- *modeInfo = opExpansionMode;
3817- return HcclResult::HCCL_SUCCESS;
3818- } else if (cfgType == HcclConfigType::HCCL_CONFIG_TYPE_HCCL_ALGO) {
3819- constexpr size_t infoExpectedLen = static_cast<size_t>(HCCL_COMM_ALGO_MAX_LENGTH);
3820- if (static_cast<size_t>(infoLen) < infoExpectedLen) {
3821- HCCL_ERROR("cfgType[%d] infoLen[%u] less than expected[%zu].", cfgType, infoLen, infoExpectedLen);
3822- return HcclResult::HCCL_E_PARA;
3823- }
3824- const std::string& hcclAlgo = collComm->GetCommConfig().GetConfigHcclAlgoStr();
3825- auto* algoInfo = static_cast<char*>(info);
3826- int32_t ret = memset_s(algoInfo, infoLen, 0, infoLen);
3827- CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memset error, ret[%d].", __func__, ret), HCCL_E_INTERNAL);
3828- if (!hcclAlgo.empty() && hcclAlgo.size() < infoLen) {
3829- ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), hcclAlgo.size() + 1);
3830- } else if (!hcclAlgo.empty()) {
3831- ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), infoLen);
3832- }
3833- CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memcpy error, ret[%d].", __func__, ret), HCCL_E_INTERNAL);
3834- return HcclResult::HCCL_SUCCESS;
3835- } else {
3836- HCCL_ERROR("[%s] cfgType[%d] is invalid.", __func__, cfgType);
3837- return HcclResult::HCCL_E_PARA;
3838 }3867 }
3839#endif3868#endif
3840 HCCL_ERROR("[%s] is not support for hccd or kernel.", __func__);3869 HCCL_ERROR("[%s] is not support for hccd or kernel.", __func__);
@@ -365,6 +365,18 @@ u32 EnvRdmaConfig::GetRdmaMultiQpThreshold() const { return multiQpThreshold.Get
365 365 
366const MultiQpSrcPortConfig& EnvRdmaConfig::GetMultiQpSrcPortConfig() const { return multiQpSrcPortConfig_; }366const MultiQpSrcPortConfig& EnvRdmaConfig::GetMultiQpSrcPortConfig() const { return multiQpSrcPortConfig_; }
367 367 
368+// EnvUbConfig
369+ 
370+void EnvUbConfig::Parse()
371+{
372+ ubMultiChannelNum.Parse();
373+ HCCL_RUN_INFO(
374+ "[HCCL_ENV] HCCL_UB_MULTI_CHANNEL_NUM set by %s to [%u]", ubMultiChannelNum.GetSource(),
375+ GetUbMultiChannelNum());
376+}
377+ 
378+u32 EnvUbConfig::GetUbMultiChannelNum() const { return ubMultiChannelNum.Get(); }
379+ 
368// EnvAlgoConfig380// EnvAlgoConfig
369 381 
370void EnvAlgoConfig::Parse()382void EnvAlgoConfig::Parse()
@@ -170,6 +170,22 @@ private:
170 MultiQpSrcPortConfig multiQpSrcPortConfig_;170 MultiQpSrcPortConfig multiQpSrcPortConfig_;
171};171};
172 172 
173+// UB配置
丁炜秦
丁炜秦丁炜秦9月5日

src/legacy/ascend950/framework/env_config/base_config_legacy.h,不再新增代码

likedislike
huangbolin
huangbolin
9月7日 评论:
174+class EnvUbConfig : public BaseConfig {
175+public:
176+ void Parse() override;
177+ u32 GetUbMultiChannelNum() const;
178+ 
179+ static constexpr u32 HCCL_UB_MULTI_CHANNEL_NUM_DEFAULT = 1; // UB多channel默认数量(1表示不使能)
180+ static constexpr u32 HCCL_UB_MULTI_CHANNEL_NUM_MIN = 1; // UB多channel数量最小值
181+ static constexpr u32 HCCL_UB_MULTI_CHANNEL_NUM_MAX = 16; // UB多channel数量最大值
182+ 
183+private:
184+ CfgField<u32> ubMultiChannelNum{
185+ "HCCL_UB_MULTI_CHANNEL_NUM", u32(HCCL_UB_MULTI_CHANNEL_NUM_DEFAULT), Str2T<u32>,
186+ CHK_RANGE_CLOSED<u32>(HCCL_UB_MULTI_CHANNEL_NUM_MIN, HCCL_UB_MULTI_CHANNEL_NUM_MAX)};
187+};
188+ 
173// 算法配置189// 算法配置
174class EnvAlgoConfig : public BaseConfig {190class EnvAlgoConfig : public BaseConfig {
175public:191public:
@@ -26,6 +26,7 @@ void EnvConfig::Parse()
26 socketCfg.Parse();26 socketCfg.Parse();
27 rtsCfg.Parse();27 rtsCfg.Parse();
28 rdmaCfg.Parse();28 rdmaCfg.Parse();
29+ ubCfg.Parse();
29 algoCfg.Parse();30 algoCfg.Parse();
30 logCfg.Parse();31 logCfg.Parse();
31 detourCfg.Parse();32 detourCfg.Parse();
@@ -39,6 +40,8 @@ const EnvRtsConfig& EnvConfig::GetRtsConfig() { return rtsCfg; }
39 40 
40const EnvRdmaConfig& EnvConfig::GetRdmaConfig() { return rdmaCfg; }41const EnvRdmaConfig& EnvConfig::GetRdmaConfig() { return rdmaCfg; }
41 42 
43+const EnvUbConfig& EnvConfig::GetUbConfig() { return ubCfg; }
44+ 
42const EnvAlgoConfig& EnvConfig::GetAlgoConfig() { return algoCfg; }45const EnvAlgoConfig& EnvConfig::GetAlgoConfig() { return algoCfg; }
43 46 
44const EnvLogConfig& EnvConfig::GetLogConfig() { return logCfg; }47const EnvLogConfig& EnvConfig::GetLogConfig() { return logCfg; }
@@ -33,6 +33,8 @@ public:
33 33 
34 const EnvRdmaConfig& GetRdmaConfig();34 const EnvRdmaConfig& GetRdmaConfig();
35 35 
36+ const EnvUbConfig& GetUbConfig();
37+ 
36 const EnvAlgoConfig& GetAlgoConfig();38 const EnvAlgoConfig& GetAlgoConfig();
37 39 
38 const EnvLogConfig& GetLogConfig();40 const EnvLogConfig& GetLogConfig();
@@ -50,6 +52,7 @@ private:
50 EnvSocketConfig socketCfg;52 EnvSocketConfig socketCfg;
51 EnvRtsConfig rtsCfg;53 EnvRtsConfig rtsCfg;
52 EnvRdmaConfig rdmaCfg;54 EnvRdmaConfig rdmaCfg;
55+ EnvUbConfig ubCfg;
53 EnvAlgoConfig algoCfg;56 EnvAlgoConfig algoCfg;
54 EnvLogConfig logCfg;57 EnvLogConfig logCfg;
55 EnvDetourConfig detourCfg;58 EnvDetourConfig detourCfg;
@@ -250,6 +250,7 @@ global:
250 "Hccl::EnvConfig::GetRdmaConfig()"; # _ZN4Hccl9EnvConfig13GetRdmaConfigEv250 "Hccl::EnvConfig::GetRdmaConfig()"; # _ZN4Hccl9EnvConfig13GetRdmaConfigEv
251 "Hccl::EnvConfig::GetRtsConfig()"; # _ZN4Hccl9EnvConfig12GetRtsConfigEv251 "Hccl::EnvConfig::GetRtsConfig()"; # _ZN4Hccl9EnvConfig12GetRtsConfigEv
252 "Hccl::EnvConfig::GetSocketConfig()"; # _ZN4Hccl9EnvConfig15GetSocketConfigEv252 "Hccl::EnvConfig::GetSocketConfig()"; # _ZN4Hccl9EnvConfig15GetSocketConfigEv
253+ "Hccl::EnvConfig::GetUbConfig()"; # _ZN4Hccl9EnvConfig11GetUbConfigEv
253 "Hccl::EnvHostNicConfig::GetControlIfIp() const"; # _ZNK4Hccl16EnvHostNicConfig14GetControlIfIpEv254 "Hccl::EnvHostNicConfig::GetControlIfIp() const"; # _ZNK4Hccl16EnvHostNicConfig14GetControlIfIpEv
254 "Hccl::EnvHostNicConfig::GetDeviceSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig24GetDeviceSocketPortRangeEv255 "Hccl::EnvHostNicConfig::GetDeviceSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig24GetDeviceSocketPortRangeEv
255 "Hccl::EnvHostNicConfig::GetHostSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig22GetHostSocketPortRangeEv256 "Hccl::EnvHostNicConfig::GetHostSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig22GetHostSocketPortRangeEv
@@ -268,6 +269,7 @@ global:
268 "Hccl::EnvRtsConfig::GetExecTimeOut() const"; # _ZNK4Hccl12EnvRtsConfig14GetExecTimeOutEv269 "Hccl::EnvRtsConfig::GetExecTimeOut() const"; # _ZNK4Hccl12EnvRtsConfig14GetExecTimeOutEv
269 "Hccl::EnvSocketConfig::GetLinkTimeOut() const"; # _ZNK4Hccl15EnvSocketConfig14GetLinkTimeOutEv270 "Hccl::EnvSocketConfig::GetLinkTimeOut() const"; # _ZNK4Hccl15EnvSocketConfig14GetLinkTimeOutEv
270 "Hccl::EnvSocketConfig::GetSocketFamily() const"; # _ZNK4Hccl15EnvSocketConfig15GetSocketFamilyEv271 "Hccl::EnvSocketConfig::GetSocketFamily() const"; # _ZNK4Hccl15EnvSocketConfig15GetSocketFamilyEv
272+ "Hccl::EnvUbConfig::GetUbMultiChannelNum() const"; # _ZNK4Hccl11EnvUbConfig20GetUbMultiChannelNumEv
271 "Hccl::ExceptionInfo::GetErrorCode(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo12GetErrorCodeERKNS_13ExceptionTypeE273 "Hccl::ExceptionInfo::GetErrorCode(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo12GetErrorCodeERKNS_13ExceptionTypeE
272 "Hccl::ExceptionInfo::GetErrorMsg(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo11GetErrorMsgERKNS_13ExceptionTypeE274 "Hccl::ExceptionInfo::GetErrorMsg(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo11GetErrorMsgERKNS_13ExceptionTypeE
273 "Hccl::GetMultiQpPortsNumByIpPair(Hccl::MultiQpSrcPortConfig const&, Hccl::IpAddress const&, Hccl::IpAddress const&)"; # _ZN4Hccl26GetMultiQpPortsNumByIpPairERKNS_20MultiQpSrcPortConfigERKNS_9IpAddressES5_275 "Hccl::GetMultiQpPortsNumByIpPair(Hccl::MultiQpSrcPortConfig const&, Hccl::IpAddress const&, Hccl::IpAddress const&)"; # _ZN4Hccl26GetMultiQpPortsNumByIpPairERKNS_20MultiQpSrcPortConfigERKNS_9IpAddressES5_
@@ -21,6 +21,6 @@ GTEST_API_ int main(int argc, char** argv)
21 setTargetPort(27743, 31123);21 setTargetPort(27743, 31123);
22 testing::InitGoogleTest(&argc, argv);22 testing::InitGoogleTest(&argc, argv);
23 setenv("HCCL_DEBUG_CONFIG", "alg", 1);23 setenv("HCCL_DEBUG_CONFIG", "alg", 1);
24- setenv("HCCL_DFS_CONFIG", "connection_fault_detction_time:0", 1);24+ setenv("HCCL_DFS_CONFIG", "task_exception:on", 1);
欧阳茜欧阳茜
欧阳茜欧阳茜8月31日

[LOW] 测试 main.cc 中 HCCL_DFS_CONFIG 环境变量修改与本 PR 功能无关

main.cc 将 setenv("HCCL_DFS_CONFIG", "connection_fault_detction_time:0", 1) 改为 setenv("HCCL_DFS_CONFIG", "task_exception:on", 1)。此修改与 PR 描述的「HCCL_UB_MULTI_JETTY_NUM 解析」功能无关,属于夹带修改。虽然可能是为新 UT 用例(OP_EXPANSION_MODE 测试)准备环境,但未在 PR 描述中说明。

建议:如确实需要此修改,在 PR 描述中补充说明原因;如不需要,恢复原值避免影响其他测试用例。

likedislike
huangbolin
huangbolin
8月31日 评论:
欧阳茜欧阳茜9月2日

[MEDIUM] 修改了 HCCL_DFS_CONFIG 环境变量值但未在 PR 描述中说明原因

main.cc 将 HCCL_DFS_CONFIG 从 "connection_fault_detction_time:0" 改为 "task_exception:on",这不属于多 jetty 环境变量解析的范畴,是夹带修改。如果该修改是必要的(如修复测试失败),建议在 PR 描述中补充说明修改原因;否则应拆分为独立 PR 或还原此改动。

likedislike
huangbolin
huangbolin
9月3日 评论:
25 return RUN_ALL_TESTS();25 return RUN_ALL_TESTS();
26}26}
@@ -51,6 +51,35 @@ TEST_F(OpBaseMiscTest, Ut_HcclConfigGetInfo_When_CollCommIsNotInit_And_CfgTypeIs
51 Ut_Comm_Destroy(comm);51 Ut_Comm_Destroy(comm);
52}52}
53 53 
54+TEST_F(OpBaseMiscTest, Ut_HcclConfigGetInfo_When_CfgTypeIsUB_MULTI_CHANNEL_NUM_Expect_ReturnIsHCCL_SUCCESS)
55+{
56+ UT_COMM_CREATE_DEFAULT(comm);
57+ CollComm collComm(nullptr, 0, "ut_comm", ManagerCallbacks{}, CollCommInitMode::simpleMode);
58+ MOCKER_CPP(&hcclComm::GetCollComm).stubs().will(returnValue(&collComm));
59+ uint32_t multiChannelNum = 0;
60+ HcclResult ret = HcclConfigGetInfo(
61+ comm, HcclConfigType::HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM, sizeof(uint32_t), &multiChannelNum);
62+ EXPECT_EQ(ret, HCCL_SUCCESS);
63+ EXPECT_GE(multiChannelNum, 1u);
64+ EXPECT_LE(multiChannelNum, 16u);
65+ Ut_Comm_Destroy(comm);
66+}
67+ 
68+TEST_F(OpBaseMiscTest, Ut_HcclConfigGetInfo_When_CfgTypeIsOP_EXPANSION_MODE_Expect_ReturnIsHCCL_SUCCESS)
69+{
70+ UT_COMM_CREATE_DEFAULT(comm);
71+ CollComm collComm(nullptr, 0, "ut_comm", ManagerCallbacks{}, CollCommInitMode::simpleMode);
72+ MOCKER_CPP(&hcclComm::GetCollComm).stubs().will(returnValue(&collComm));
73+ MyRank myRank(nullptr, 0, collComm.GetCommConfig(), ManagerCallbacks{}, nullptr, nullptr);
74+ MOCKER_CPP(&CollComm::GetMyRank).stubs().will(returnValue(&myRank));
75+ MOCKER_CPP(&MyRank::GetOpExpansionMode).stubs().will(returnValue(0u));
76+ HcclOpExpansionMode opExpansionMode = HcclOpExpansionMode::HCCL_OP_EXPANSION_MODE_INVALID;
77+ HcclResult ret = HcclConfigGetInfo(
78+ comm, HcclConfigType::HCCL_CONFIG_TYPE_OP_EXPANSION_MODE, sizeof(HcclOpExpansionMode), &opExpansionMode);
79+ EXPECT_EQ(ret, HCCL_SUCCESS);
80+ Ut_Comm_Destroy(comm);
81+}
82+ 
54TEST_F(OpBaseMiscTest, Ut_HcclCommSymWinGet_When_GetCommSymWinSucceeds_Expect_ReturnIsHCCL_SUCCESS)83TEST_F(OpBaseMiscTest, Ut_HcclCommSymWinGet_When_GetCommSymWinSucceeds_Expect_ReturnIsHCCL_SUCCESS)
55{84{
56 UT_COMM_CREATE_DEFAULT(comm);85 UT_COMM_CREATE_DEFAULT(comm);