Line data Source code
1 : /**
2 : * Copyright (c) 2025 Huawei Technologies Co., Ltd.
3 : * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4 : * CANN Open Software License Agreement Version 2.0 (the "License").
5 : * Please refer to the License for details. You may not use this file except in compliance with the License.
6 : * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7 : * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8 : * See LICENSE in the root of the software repository for the full text of the License.
9 : */
10 :
11 : #ifndef EXTERNALINPUT_H
12 : #define EXTERNALINPUT_H
13 :
14 : #include <map>
15 : #include <nlohmann/json.hpp>
16 :
17 : #include "externalinput_pub.h"
18 :
19 : constexpr s32 MAX_LENGTH_OF_U32 = 10;
20 : constexpr u32 MAX_LEN_OF_DIGIT_ENV = 10; // 数字环境变量最大长度
21 :
22 : constexpr u32 HCCL_WHITELIST_OFF = 0;
23 :
24 : constexpr s32 HCCL_MIN_LINK_TIME_OUT_S = 120; // HCCL 建链最小超时时间设置为120s
25 : constexpr s32 HCCL_MAX_LINK_TIME_OUT_S = (120 * 60); // HCCL 最大建链超时时间设置为120*60s
26 :
27 : constexpr s32 HCCL_EXEC_TIME_OUT_S
28 : = NOTIFY_MAX_WAIT_TIME; // 910B和910_93场景非HCCL默认的Notify wait超时时间设置为最大超时时间
29 : constexpr s32 HCCL_EXEC_TIME_OUT_S_910_93
30 : = NOTIFY_MAX_WAIT_TIME_910_93; // 910B和910_93 HCCL默认的Notify wait超时时间设置为最大超时时间
31 : constexpr s32 HCCL_INTEVAL_EXEC_TIME_OUT_S = 68; // notifywait的设置参数必须是68的整数倍
32 :
33 : constexpr u32 HCCL_MEM_SAMPLER_ITER_U = 0x00000000; // 内存采样迭代轮次默认不启用值为0x00000000
34 : constexpr s32 HCCL_DEAFULT_P2P_DISABLE = 0; // HCCL 默认P2P使能
35 :
36 : constexpr u32 HCCL_RDMA_TC_DEFAULT = 132; // 默认的traffic class为132(33*4)
37 : constexpr u32 HCCL_RDMA_TC_MIN = 0; // traffic class最小值为0
38 : constexpr u32 HCCL_RDMA_TC_MAX = 255; // traffic class最大值为255
39 : constexpr u32 HCCL_RDMA_TC_BASE = 4; // RDMATrafficClass需要是4的整数倍
40 :
41 : constexpr u32 HCCL_RDMA_SL_DEFAULT = 4; // 默认的server level为4
42 : constexpr u32 HCCL_RDMA_SL_MIN = 0; // server level最小值为0
43 : constexpr u32 HCCL_RDMA_SL_MAX = 7; // server level最大值为7
44 :
45 : constexpr u32 HCCL_RDMA_TIMEOUT_DEFAULT = 20; // 默认的TIMEOUT配置为20(对应时间4.096*2^20us)
46 : constexpr u32 HCCL_RDMA_TIMEOUT_MIN = 5; // TIMEOUT最小值为5
47 : constexpr u32 HCCL_RDMA_TIMEOUT_MAX = 24; // TIMEOUT最大值为24
48 : constexpr u32 HCCL_RDMA_TIMEOUT_MAX_910_93 = 20; // 910B和910_93 TIMEOUT最大值为20
49 :
50 : constexpr u32 HCCL_RDMA_RETRY_CNT_DEFAULT = 7; // 默认的Retry Cnt为7
51 : constexpr u32 HCCL_RDMA_RETRY_CNT_MIN = 1; // Retry Cnt最小值为1
52 : constexpr u32 HCCL_RDMA_RETRY_CNT_MAX = 7; // Retry Cnt最大值为7
53 : constexpr u32 HCCL_BASE_PORT_MIN = 1024; // Base port最小值为1024
54 :
55 : constexpr u32 HCCL_RETRY_MAXCNT_DEFAULT = 1; // 最大重执行次数,默认配置1
56 : constexpr u32 HCCL_RETRY_HOLD_TIME_DEFAULT = 5000; // 首次重执行等待时间,默认5s
57 : constexpr u32 HCCL_RETRY_INTERVAL_DEFAULT = 1000; // 重执行间隔,默认1s
58 :
59 : constexpr u32 HCCL_RETRY_MAXCNT_MIN = 1; // 最大重执行次数,最小值1次
60 : constexpr u32 HCCL_RETRY_MAXCNT_MAX = 10; // 最大重执行次数,最大值10次
61 : constexpr u32 HCCL_RETRY_HLOD_TIME_MAX = 60000; // 首次重执行等待时间,最大值60s, 单位ms
62 : constexpr u32 HCCL_RETRY_INTERVAL_MAX = 60000; // 重执行间隔,最大值60s, 单位ms
63 : constexpr int HCCL_RETRY_PARAM_NUM = 3; // 重执行参数个数(MaxCnt/HoldTime/IntervalTime),sscanf_s解析成功的返回值
64 :
65 : constexpr u32 MAX_LEN_OF_LOGIC_SUPER_ID = 128; // 逻辑超节点最大长度
66 : // 外部输入参数
67 : struct ExternalInput {
68 : // 初始化判断
69 : bool initialized;
70 : HcclExecTimeoutSet execTimeOutSet;
71 :
72 : // 环境变量参数
73 : s32 linkTimeOut;
74 : double execTimeOut;
75 : u32 hcclIfBasePort;
76 : u32 rdmaTrafficClass;
77 : u32 rdmaServerLevel;
78 : u32 rdmaTimeOut; // RDMA超时时间,配置范围5-24,默认值为20
79 : u32 rdmaRetryCnt; // RDMA重传次数,配置范围1-7,默认值为7
80 : u32 taskExceptionSwitch; // task_exception_handler ctx子任务维度开关,默认0(关闭)
81 : u32 qpsPerConnection; // 用于多QP散列场景下,指定两个rank之间的连接个数
82 : u32 multiQpThreshold; // 多QP散列下,每个QP分担的数据量阈值,小于这个阈值则不切分多QP
83 : u32 retryMaxCnt; // 重执行最大尝试次数,配置范围[0,60000],默认值为3
84 : u32 retryIntervalTime; // 重执行间隔时间,配置范围[0,3600000],默认值1000
85 : u32 retryHoldTime; // 首次重执行等待时间,配置范围[0,3600000],默认值1000
86 :
87 : // cann版本信息
88 : std::string cannVersion;
89 :
90 : // 配置文件参数
91 : u32 intraRoceSwitch; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
92 :
93 : std::string hcclWhiteListFile;
94 : bool profilingMode;
95 : std::string profilingOption;
96 : u64 profConfig; // Msprof profiling配置
97 : u32 enableWhitelist;
98 : hccl::HcclIpAddress hcclControlIfIp;
99 : s32 hcclSocketFamily;
100 : HcclSocketIfName hcclSocketIfName;
101 : bool isTcpMode;
102 :
103 : u32 esMaxPsTable; // ES场景获取每条流上的最大表数
104 : u32 streamNum;
105 : bool dumpDebug;
106 : ProtocolType protocolType = ProtocolType::RESERVED;
107 : MasterInfo masterInfo;
108 : bool opCounterEnable;
109 : u64 cclBufferSize;
110 : bool enableFfts;
111 : u8 hcclDeterministic;
112 : bool isDeterministic;
113 : bool enablePipline;
114 : bool enableEntryLog;
115 : bool interHccsDisable;
116 : bool aicpuUnfold;
117 : uint8_t aicpuCacheEnable;
118 : bool aivMode;
119 : bool remoteIsHdc = false;
120 : bool hcclRetryConfig[HCCL_RETRY_ENABLE_LEVEL_NUM];
121 : std::string logicSuperPodId;
122 : bool rdmaFastPost;
123 : std::string multiQpSrcPortConfigPath;
124 : s32 increSaveExecTimeOut;
125 : u64 debugConfig;
126 53 : ExternalInput() { SetDefaultParams(); }
127 1203 : void SetDefaultParams()
128 : {
129 1203 : initialized = false;
130 1203 : execTimeOutSet = HcclExecTimeoutSet::HCCL_EXEC_TIMEOUT_NOT_SET;
131 1203 : linkTimeOut = HCCL_LINK_TIME_OUT_S; // 120秒超时
132 1203 : execTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
133 1203 : rdmaTrafficClass = HCCL_RDMA_TC_DEFAULT;
134 1203 : rdmaServerLevel = HCCL_RDMA_SL_DEFAULT;
135 1203 : rdmaTimeOut = HCCL_RDMA_TIMEOUT_DEFAULT;
136 1203 : rdmaRetryCnt = HCCL_RDMA_RETRY_CNT_DEFAULT;
137 1203 : taskExceptionSwitch = 0;
138 1203 : qpsPerConnection = HCCL_QPS_PER_CONNECTION_DEFAULT;
139 1203 : multiQpThreshold = HCCL_MULTI_QP_THRESHOLD_DEFAULT;
140 1203 : retryMaxCnt = HCCL_RETRY_MAXCNT_DEFAULT;
141 1203 : retryHoldTime = HCCL_RETRY_HOLD_TIME_DEFAULT;
142 1203 : retryIntervalTime = HCCL_RETRY_INTERVAL_DEFAULT;
143 1203 : cannVersion = "";
144 1203 : hcclIfBasePort = HCCL_INVALID_PORT; // 无效端口
145 1203 : intraRoceSwitch = 0; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
146 :
147 1203 : hcclWhiteListFile = "";
148 1203 : profilingMode = false;
149 1203 : profilingOption = "";
150 1203 : profConfig = 0;
151 1203 : enableWhitelist = HCCL_WHITELIST_OFF;
152 1203 : hcclControlIfIp.clear();
153 1203 : hcclSocketFamily = -1;
154 1203 : hcclSocketIfName.configIfNames = {};
155 1203 : hcclSocketIfName.searchExact = false; // false: 默认为前缀匹配
156 1203 : hcclSocketIfName.searchNot = false; // false: 默认为匹配
157 :
158 1203 : isTcpMode = false;
159 :
160 1203 : esMaxPsTable = 0;
161 1203 : streamNum = 1;
162 1203 : dumpDebug = false;
163 1203 : protocolType = ProtocolType::RESERVED;
164 :
165 1203 : masterInfo.serverIp.clear();
166 1203 : masterInfo.port = HCCL_INVALID_PORT;
167 1203 : masterInfo.serverDeviceId = INVALID_VALUE_RANKID;
168 1203 : masterInfo.rankSize = INVALID_VALUE_RANKSIZE;
169 1203 : masterInfo.agentIp.clear();
170 :
171 1203 : cclBufferSize = HCCL_CCL_COMM_DEFAULT_BUFFER_SIZE * HCCL_CCL_COMM_FIXED_CALC_BUFFER_SIZE;
172 1203 : enableFfts = true;
173 : hcclDeterministic
174 1203 : = DETERMINISTIC_DISABLE; // 确定性配置 0:不支持;1:支持确定性不支持规约保序;2:支持确定性&规约保序
175 1203 : isDeterministic = false; // 兼容性考虑,提供确定性bool
176 1203 : enablePipline = false;
177 1203 : enableEntryLog = false;
178 1203 : interHccsDisable = false;
179 1203 : aicpuCacheEnable = 1; // 默认开启aicpu cache (只有当aicpuUnfold为true时才生效)
180 1203 : opCounterEnable = true;
181 1203 : logicSuperPodId = "";
182 1203 : rdmaFastPost = false;
183 1203 : multiQpSrcPortConfigPath = "";
184 1203 : increSaveExecTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
185 1203 : debugConfig = 0;
186 1203 : }
187 : };
188 :
189 : HcclResult InitEnvVarParam();
190 :
191 : HcclResult ParseLinkConnTimeOut();
192 :
193 : HcclResult ParseExecTimeOut();
194 :
195 : HcclResult ParseIntraLinkType();
196 :
197 : HcclResult GetIntraLinkTypeDigit();
198 :
199 : HcclResult ParseHcclWhitelistFilePath();
200 :
201 : HcclResult ParseHcclWhitelistSwitch();
202 :
203 : HcclResult ParseHcclIfIp();
204 :
205 : HcclResult ParseHcclSocketIfName();
206 :
207 : HcclResult ParseHcclSocketFamily();
208 :
209 : HcclResult SplitHcclSocketIfName(const std::string& socketIfName, std::vector<std::string>& configIfNames);
210 :
211 : HcclResult ParseHcclIfBasePort();
212 :
213 : bool CheckEnvLen(const char* envStr, u32 envMaxLen);
214 :
215 : HcclResult ParseRDMATrafficClass();
216 :
217 : HcclResult ParseRDMAServerLevel();
218 :
219 : HcclResult ParseRDMATimeOut(std::pair<u32, u32>& rdmaTimeOutRange);
220 :
221 : HcclResult ParseRDMARetryCnt();
222 :
223 : HcclResult ParseRdmaQpsPerConnection();
224 :
225 : HcclResult ParseMultiQpThreshold();
226 :
227 : HcclResult ParseCannVersion();
228 :
229 : HcclResult ParseCclBufferSize();
230 :
231 : HcclResult ParseDeterministic();
232 :
233 : HcclResult ParseHcclPiplineModeEnable();
234 :
235 : HcclResult ParseTaskExceptionSwitch();
236 :
237 : HcclResult ParseEntryLogEnable();
238 :
239 : HcclResult ParseOpExpansion();
240 :
241 : HcclResult ResetInitState();
242 :
243 : HcclResult ParseInterLinkType();
244 :
245 : HcclResult ParseRetryEnable();
246 :
247 : HcclResult ParseProfilingConfig();
248 :
249 : HcclResult ParseRetryParams();
250 :
251 : HcclResult ParseLogicSuperPodId();
252 :
253 : HcclResult ParseDebugConfig();
254 :
255 : HcclResult SplitHcclRetryEnable(const std::string& retryConfig, std::vector<std::string>& retryEnables);
256 :
257 : HcclResult CollectRetryEnableFromConfig(const std::vector<std::string>& retryEnables);
258 :
259 : u32 GetEsMaxPsTable();
260 :
261 : HcclResult SetEsStreamNum(const u32 streamNum);
262 :
263 : u32 GetEsStreamNum();
264 :
265 : const u32& GetExternalInputRdmaTrafficClass();
266 :
267 : const u32& GetExternalInputRdmaServerLevel();
268 :
269 : const u32& GetExternalInputRdmaTimeOut();
270 :
271 : const u32& GetExternalInputRdmaRetryCnt();
272 :
273 : const hccl::HcclIpAddress& GetExternalInputHcclControlIfIp();
274 :
275 : const HcclSocketIfName& GetExternalInputHcclSocketIfName();
276 :
277 : HcclResult ParseRdmaFastPost();
278 :
279 : HcclResult ParseMultiQpSrcPortConfigPath();
280 : HcclResult SetIncreSaveExecTimeOut(const s32 execTimeout);
281 : const s32& GetIncreSaveExecTimeOut();
282 :
283 : const u64& GetProfConfig();
284 :
285 : const u64& GetExternalInputDebugConfig();
286 : void SetExternalInputProtocolType(ProtocolType prot);
287 : #endif // EXTERNALINPUT_H
|