LCOV - code coverage report
Current view: top level - legacy/ascend910/platform/common - externalinput.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 54 54
Test Date: 2026-08-18 17:47:01 Functions: 100.0 % 2 2

            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              : 
      64              : constexpr u32 MAX_LEN_OF_LOGIC_SUPER_ID = 128; // 逻辑超节点最大长度
      65              : //  外部输入参数
      66              : struct ExternalInput {
      67              :     //  初始化判断
      68              :     bool initialized;
      69              :     HcclExecTimeoutSet execTimeOutSet;
      70              : 
      71              :     //  环境变量参数
      72              :     s32 linkTimeOut;
      73              :     double execTimeOut;
      74              :     u32 hcclIfBasePort;
      75              :     u32 rdmaTrafficClass;
      76              :     u32 rdmaServerLevel;
      77              :     u32 rdmaTimeOut;         // RDMA超时时间,配置范围5-24,默认值为20
      78              :     u32 rdmaRetryCnt;        // RDMA重传次数,配置范围1-7,默认值为7
      79              :     u32 taskExceptionSwitch; // task_exception_handler ctx子任务维度开关,默认0(关闭)
      80              :     u32 qpsPerConnection;    // 用于多QP散列场景下,指定两个rank之间的连接个数
      81              :     u32 multiQpThreshold;    // 多QP散列下,每个QP分担的数据量阈值,小于这个阈值则不切分多QP
      82              :     u32 retryMaxCnt;         // 重执行最大尝试次数,配置范围[0,60000],默认值为3
      83              :     u32 retryIntervalTime;   // 重执行间隔时间,配置范围[0,3600000],默认值1000
      84              :     u32 retryHoldTime;       // 首次重执行等待时间,配置范围[0,3600000],默认值1000
      85              : 
      86              :     // cann版本信息
      87              :     std::string cannVersion;
      88              : 
      89              :     //  配置文件参数
      90              :     u32 intraRoceSwitch; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
      91              : 
      92              :     std::string hcclWhiteListFile;
      93              :     bool profilingMode;
      94              :     std::string profilingOption;
      95              :     u64 profConfig; // Msprof profiling配置
      96              :     u32 enableWhitelist;
      97              :     hccl::HcclIpAddress hcclControlIfIp;
      98              :     s32 hcclSocketFamily;
      99              :     HcclSocketIfName hcclSocketIfName;
     100              :     bool isTcpMode;
     101              : 
     102              :     u32 esMaxPsTable; // ES场景获取每条流上的最大表数
     103              :     u32 streamNum;
     104              :     bool dumpDebug;
     105              :     ProtocolType protocolType = ProtocolType::RESERVED;
     106              :     MasterInfo masterInfo;
     107              :     bool opCounterEnable;
     108              :     u64 cclBufferSize;
     109              :     bool enableFfts;
     110              :     u8 hcclDeterministic;
     111              :     bool isDeterministic;
     112              :     bool enablePipline;
     113              :     bool enableEntryLog;
     114              :     bool interHccsDisable;
     115              :     bool aicpuUnfold;
     116              :     uint8_t aicpuCacheEnable;
     117              :     bool aivMode;
     118              :     bool remoteIsHdc = false;
     119              :     bool hcclRetryConfig[HCCL_RETRY_ENABLE_LEVEL_NUM];
     120              :     std::string logicSuperPodId;
     121              :     bool rdmaFastPost;
     122              :     std::string multiQpSrcPortConfigPath;
     123              :     s32 increSaveExecTimeOut;
     124              :     u64 debugConfig;
     125           48 :     ExternalInput() { SetDefaultParams(); }
     126         1178 :     void SetDefaultParams()
     127              :     {
     128         1178 :         initialized = false;
     129         1178 :         execTimeOutSet = HcclExecTimeoutSet::HCCL_EXEC_TIMEOUT_NOT_SET;
     130         1178 :         linkTimeOut = HCCL_LINK_TIME_OUT_S;     // 120秒超时
     131         1178 :         execTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
     132         1178 :         rdmaTrafficClass = HCCL_RDMA_TC_DEFAULT;
     133         1178 :         rdmaServerLevel = HCCL_RDMA_SL_DEFAULT;
     134         1178 :         rdmaTimeOut = HCCL_RDMA_TIMEOUT_DEFAULT;
     135         1178 :         rdmaRetryCnt = HCCL_RDMA_RETRY_CNT_DEFAULT;
     136         1178 :         taskExceptionSwitch = 0;
     137         1178 :         qpsPerConnection = HCCL_QPS_PER_CONNECTION_DEFAULT;
     138         1178 :         multiQpThreshold = HCCL_MULTI_QP_THRESHOLD_DEFAULT;
     139         1178 :         retryMaxCnt = HCCL_RETRY_MAXCNT_DEFAULT;
     140         1178 :         retryHoldTime = HCCL_RETRY_HOLD_TIME_DEFAULT;
     141         1178 :         retryIntervalTime = HCCL_RETRY_INTERVAL_DEFAULT;
     142         1178 :         cannVersion = "";
     143         1178 :         hcclIfBasePort = HCCL_INVALID_PORT; // 无效端口
     144         1178 :         intraRoceSwitch = 0;                // server内的通信方式 与intraPcieSwitch组合使用,默认为0
     145              : 
     146         1178 :         hcclWhiteListFile = "";
     147         1178 :         profilingMode = false;
     148         1178 :         profilingOption = "";
     149         1178 :         profConfig = 0;
     150         1178 :         enableWhitelist = HCCL_WHITELIST_OFF;
     151         1178 :         hcclControlIfIp.clear();
     152         1178 :         hcclSocketFamily = -1;
     153         1178 :         hcclSocketIfName.configIfNames = {};
     154         1178 :         hcclSocketIfName.searchExact = false; // false: 默认为前缀匹配
     155         1178 :         hcclSocketIfName.searchNot = false;   // false: 默认为匹配
     156              : 
     157         1178 :         isTcpMode = false;
     158              : 
     159         1178 :         esMaxPsTable = 0;
     160         1178 :         streamNum = 1;
     161         1178 :         dumpDebug = false;
     162         1178 :         protocolType = ProtocolType::RESERVED;
     163              : 
     164         1178 :         masterInfo.serverIp.clear();
     165         1178 :         masterInfo.port = HCCL_INVALID_PORT;
     166         1178 :         masterInfo.serverDeviceId = INVALID_VALUE_RANKID;
     167         1178 :         masterInfo.rankSize = INVALID_VALUE_RANKSIZE;
     168         1178 :         masterInfo.agentIp.clear();
     169              : 
     170         1178 :         cclBufferSize = HCCL_CCL_COMM_DEFAULT_BUFFER_SIZE * HCCL_CCL_COMM_FIXED_CALC_BUFFER_SIZE;
     171         1178 :         enableFfts = true;
     172              :         hcclDeterministic
     173         1178 :             = DETERMINISTIC_DISABLE; // 确定性配置 0:不支持;1:支持确定性不支持规约保序;2:支持确定性&规约保序
     174         1178 :         isDeterministic = false; // 兼容性考虑,提供确定性bool
     175         1178 :         enablePipline = false;
     176         1178 :         enableEntryLog = false;
     177         1178 :         interHccsDisable = false;
     178         1178 :         aicpuCacheEnable = 1; // 默认开启aicpu cache (只有当aicpuUnfold为true时才生效)
     179         1178 :         opCounterEnable = true;
     180         1178 :         logicSuperPodId = "";
     181         1178 :         rdmaFastPost = false;
     182         1178 :         multiQpSrcPortConfigPath = "";
     183         1178 :         increSaveExecTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
     184         1178 :         debugConfig = 0;
     185         1178 :     }
     186              : };
     187              : 
     188              : HcclResult InitEnvVarParam();
     189              : 
     190              : HcclResult ParseLinkConnTimeOut();
     191              : 
     192              : HcclResult ParseExecTimeOut();
     193              : 
     194              : HcclResult ParseIntraLinkType();
     195              : 
     196              : HcclResult GetIntraLinkTypeDigit();
     197              : 
     198              : HcclResult ParseHcclWhitelistFilePath();
     199              : 
     200              : HcclResult ParseHcclWhitelistSwitch();
     201              : 
     202              : HcclResult ParseHcclIfIp();
     203              : 
     204              : HcclResult ParseHcclSocketIfName();
     205              : 
     206              : HcclResult ParseHcclSocketFamily();
     207              : 
     208              : HcclResult SplitHcclSocketIfName(const std::string& socketIfName, std::vector<std::string>& configIfNames);
     209              : 
     210              : HcclResult ParseHcclIfBasePort();
     211              : 
     212              : bool CheckEnvLen(const char* envStr, u32 envMaxLen);
     213              : 
     214              : HcclResult ParseRDMATrafficClass();
     215              : 
     216              : HcclResult ParseRDMAServerLevel();
     217              : 
     218              : HcclResult ParseRDMATimeOut(std::pair<u32, u32>& rdmaTimeOutRange);
     219              : 
     220              : HcclResult ParseRDMARetryCnt();
     221              : 
     222              : HcclResult ParseRdmaQpsPerConnection();
     223              : 
     224              : HcclResult ParseMultiQpThreshold();
     225              : 
     226              : HcclResult ParseCannVersion();
     227              : 
     228              : HcclResult ParseCclBufferSize();
     229              : 
     230              : HcclResult ParseDeterministic();
     231              : 
     232              : HcclResult ParseHcclPiplineModeEnable();
     233              : 
     234              : HcclResult ParseTaskExceptionSwitch();
     235              : 
     236              : HcclResult ParseEntryLogEnable();
     237              : 
     238              : HcclResult ParseOpExpansion();
     239              : 
     240              : HcclResult ResetInitState();
     241              : 
     242              : HcclResult ParseInterLinkType();
     243              : 
     244              : HcclResult ParseRetryEnable();
     245              : 
     246              : HcclResult ParseProfilingConfig();
     247              : 
     248              : HcclResult ParseRetryParams();
     249              : 
     250              : HcclResult ParseLogicSuperPodId();
     251              : 
     252              : HcclResult ParseDebugConfig();
     253              : 
     254              : HcclResult SplitHcclRetryEnable(const std::string& retryConfig, std::vector<std::string>& retryEnables);
     255              : 
     256              : HcclResult CollectRetryEnableFromConfig(const std::vector<std::string>& retryEnables);
     257              : 
     258              : u32 GetEsMaxPsTable();
     259              : 
     260              : HcclResult SetEsStreamNum(const u32 streamNum);
     261              : 
     262              : u32 GetEsStreamNum();
     263              : 
     264              : const u32& GetExternalInputRdmaTrafficClass();
     265              : 
     266              : const u32& GetExternalInputRdmaServerLevel();
     267              : 
     268              : const u32& GetExternalInputRdmaTimeOut();
     269              : 
     270              : const u32& GetExternalInputRdmaRetryCnt();
     271              : 
     272              : const hccl::HcclIpAddress& GetExternalInputHcclControlIfIp();
     273              : 
     274              : const HcclSocketIfName& GetExternalInputHcclSocketIfName();
     275              : 
     276              : HcclResult ParseRdmaFastPost();
     277              : 
     278              : HcclResult ParseMultiQpSrcPortConfigPath();
     279              : HcclResult SetIncreSaveExecTimeOut(const s32 execTimeout);
     280              : const s32& GetIncreSaveExecTimeOut();
     281              : 
     282              : const u64& GetProfConfig();
     283              : 
     284              : const u64& GetExternalInputDebugConfig();
     285              : void SetExternalInputProtocolType(ProtocolType prot);
     286              : #endif //  EXTERNALINPUT_H
        

Generated by: LCOV version 2.0-1