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-25 19:18:03 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              : 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
        

Generated by: LCOV version 2.0-1