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 % 57 57
Test Date: 2026-08-04 10:52:23 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 = NOTIFY_MAX_WAIT_TIME; // 910B和910_93场景非HCCL默认的Notify wait超时时间设置为最大超时时间
      28              : constexpr s32 HCCL_EXEC_TIME_OUT_S_910_93 = NOTIFY_MAX_WAIT_TIME_910_93; // 910B和910_93 HCCL默认的Notify wait超时时间设置为最大超时时间
      29              : constexpr s32 HCCL_INTEVAL_EXEC_TIME_OUT_S = 68; // notifywait的设置参数必须是68的整数倍
      30              : 
      31              : constexpr u32 HCCL_MEM_SAMPLER_ITER_U = 0x00000000; // 内存采样迭代轮次默认不启用值为0x00000000
      32              : constexpr s32 HCCL_DEAFULT_P2P_DISABLE = 0; // HCCL 默认P2P使能
      33              : 
      34              : constexpr u32 HCCL_RDMA_TC_DEFAULT = 132;  // 默认的traffic class为132(33*4)
      35              : constexpr u32 HCCL_RDMA_TC_MIN = 0;  // traffic class最小值为0
      36              : constexpr u32 HCCL_RDMA_TC_MAX = 255;  // traffic class最大值为255
      37              : constexpr u32 HCCL_RDMA_TC_BASE = 4;    // RDMATrafficClass需要是4的整数倍
      38              :  
      39              : constexpr u32 HCCL_RDMA_SL_DEFAULT = 4;  // 默认的server level为4
      40              : constexpr u32 HCCL_RDMA_SL_MIN = 0;  // server level最小值为0
      41              : constexpr u32 HCCL_RDMA_SL_MAX = 7;  // server level最大值为7
      42              : 
      43              : constexpr u32 HCCL_RDMA_TIMEOUT_DEFAULT = 20;  // 默认的TIMEOUT配置为20(对应时间4.096*2^20us)
      44              : constexpr u32 HCCL_RDMA_TIMEOUT_MIN = 5;  // TIMEOUT最小值为5
      45              : constexpr u32 HCCL_RDMA_TIMEOUT_MAX = 24;  // TIMEOUT最大值为24
      46              : constexpr u32 HCCL_RDMA_TIMEOUT_MAX_910_93 = 20;  // 910B和910_93 TIMEOUT最大值为20
      47              : 
      48              : constexpr u32 HCCL_RDMA_RETRY_CNT_DEFAULT = 7;  // 默认的Retry Cnt为7
      49              : constexpr u32 HCCL_RDMA_RETRY_CNT_MIN = 1;  // Retry Cnt最小值为1
      50              : constexpr u32 HCCL_RDMA_RETRY_CNT_MAX = 7;  // Retry Cnt最大值为7
      51              : constexpr u32 HCCL_BASE_PORT_MIN = 1024;  // Base port最小值为1024
      52              : 
      53              : constexpr u32 HCCL_RETRY_MAXCNT_DEFAULT = 1;     // 最大重执行次数,默认配置1
      54              : constexpr u32 HCCL_RETRY_HOLD_TIME_DEFAULT = 5000; // 首次重执行等待时间,默认5s
      55              : constexpr u32 HCCL_RETRY_INTERVAL_DEFAULT = 1000;  // 重执行间隔,默认1s
      56              : 
      57              : constexpr u32 HCCL_RETRY_MAXCNT_MIN = 1;    //最大重执行次数,最小值1次
      58              : constexpr u32 HCCL_RETRY_MAXCNT_MAX = 10;     // 最大重执行次数,最大值10次
      59              : constexpr u32 HCCL_RETRY_HLOD_TIME_MAX = 60000; // 首次重执行等待时间,最大值60s, 单位ms
      60              : constexpr u32 HCCL_RETRY_INTERVAL_MAX = 60000;  // 重执行间隔,最大值60s, 单位ms
      61              : 
      62              : constexpr u32 MAX_LEN_OF_LOGIC_SUPER_ID = 128; // 逻辑超节点最大长度
      63              : //  外部输入参数
      64              : struct ExternalInput {
      65              :     //  初始化判断
      66              :     bool initialized;
      67              :     HcclExecTimeoutSet execTimeOutSet;
      68              : 
      69              :     //  环境变量参数
      70              :     s32 linkTimeOut;
      71              :     double execTimeOut;
      72              :     u32 hcclIfBasePort;
      73              :     u32 rdmaTrafficClass;
      74              :     u32 rdmaServerLevel;
      75              :     u32 rdmaTimeOut;        // RDMA超时时间,配置范围5-24,默认值为20
      76              :     u32 rdmaRetryCnt;       // RDMA重传次数,配置范围1-7,默认值为7
      77              :     u32 taskExceptionSwitch;    // task_exception_handler ctx子任务维度开关,默认0(关闭)
      78              :     u32 qpsPerConnection;   // 用于多QP散列场景下,指定两个rank之间的连接个数
      79              :     u32 multiQpThreshold;    // 多QP散列下,每个QP分担的数据量阈值,小于这个阈值则不切分多QP
      80              :     u32 retryMaxCnt;          // 重执行最大尝试次数,配置范围[0,60000],默认值为3
      81              :     u32 retryIntervalTime;    // 重执行间隔时间,配置范围[0,3600000],默认值1000
      82              :     u32 retryHoldTime;        // 首次重执行等待时间,配置范围[0,3600000],默认值1000
      83              : 
      84              :     // cann版本信息
      85              :     std::string cannVersion;
      86              : 
      87              :     //  配置文件参数
      88              :     u32 intraRoceSwitch;    // server内的通信方式 与intraPcieSwitch组合使用,默认为0
      89              : 
      90              :     std::string hcclWhiteListFile;
      91              :     bool profilingMode;
      92              :     std::string profilingOption;
      93              :     u64 profConfig; // Msprof profiling配置
      94              :     u32 enableWhitelist;
      95              :     hccl::HcclIpAddress hcclControlIfIp;
      96              :     s32 hcclSocketFamily;
      97              :     HcclSocketIfName hcclSocketIfName;
      98              :     bool isTcpMode;
      99              : 
     100              :     u32 esMaxPsTable; // ES场景获取每条流上的最大表数
     101              :     u32 streamNum;
     102              :     bool dumpDebug;
     103              :     ProtocolType protocolType = ProtocolType::RESERVED;
     104              :     MasterInfo masterInfo;
     105              :     bool opCounterEnable;
     106              :     u64 cclBufferSize;
     107              :     bool enableFfts;
     108              :     u8 hcclDeterministic;
     109              :     bool isDeterministic;
     110              :     bool enablePipline;
     111              :     bool enableEntryLog;
     112              :     bool interHccsDisable;
     113              :     bool aicpuUnfold;
     114              :     uint8_t aicpuCacheEnable;
     115              :     bool aivMode;
     116              :     bool remoteIsHdc = false;
     117              :     bool hcclRetryConfig[HCCL_RETRY_ENABLE_LEVEL_NUM];
     118              :     std::string logicSuperPodId;
     119              :     bool rdmaFastPost;
     120              :     std::string multiQpSrcPortConfigPath;
     121              :     s32 increSaveExecTimeOut;
     122              :     u64 debugConfig;
     123           44 :     ExternalInput()
     124           44 :     {
     125           44 :         SetDefaultParams();
     126           44 :     }
     127         1024 :     void SetDefaultParams()
     128              :     {
     129         1024 :         initialized = false;
     130         1024 :         execTimeOutSet = HcclExecTimeoutSet::HCCL_EXEC_TIMEOUT_NOT_SET;
     131         1024 :         linkTimeOut = HCCL_LINK_TIME_OUT_S;     // 120秒超时
     132         1024 :         execTimeOut = NOTIFY_DEFAULT_WAIT_TIME;    // HCCL 默认的Notify wait超时时间设置
     133         1024 :         rdmaTrafficClass = HCCL_RDMA_TC_DEFAULT;
     134         1024 :         rdmaServerLevel = HCCL_RDMA_SL_DEFAULT;
     135         1024 :         rdmaTimeOut = HCCL_RDMA_TIMEOUT_DEFAULT;
     136         1024 :         rdmaRetryCnt = HCCL_RDMA_RETRY_CNT_DEFAULT;
     137         1024 :         taskExceptionSwitch = 0;
     138         1024 :         qpsPerConnection = HCCL_QPS_PER_CONNECTION_DEFAULT;
     139         1024 :         multiQpThreshold = HCCL_MULTI_QP_THRESHOLD_DEFAULT;
     140         1024 :         retryMaxCnt = HCCL_RETRY_MAXCNT_DEFAULT;
     141         1024 :         retryHoldTime = HCCL_RETRY_HOLD_TIME_DEFAULT;
     142         1024 :         retryIntervalTime = HCCL_RETRY_INTERVAL_DEFAULT;
     143         1024 :         cannVersion = "";
     144         1024 :         hcclIfBasePort = HCCL_INVALID_PORT;  // 无效端口
     145         1024 :         intraRoceSwitch = 0;     // server内的通信方式 与intraPcieSwitch组合使用,默认为0
     146              : 
     147         1024 :         hcclWhiteListFile = "";
     148         1024 :         profilingMode = false;
     149         1024 :         profilingOption = "";
     150         1024 :         profConfig = 0;
     151         1024 :         enableWhitelist = HCCL_WHITELIST_OFF;
     152         1024 :         hcclControlIfIp.clear();
     153         1024 :         hcclSocketFamily = -1;
     154         1024 :         hcclSocketIfName.configIfNames = {};
     155         1024 :         hcclSocketIfName.searchExact = false;   // false: 默认为前缀匹配
     156         1024 :         hcclSocketIfName.searchNot = false; // false: 默认为匹配
     157              : 
     158         1024 :         isTcpMode = false;
     159              : 
     160         1024 :         esMaxPsTable = 0;
     161         1024 :         streamNum = 1;
     162         1024 :         dumpDebug = false;
     163         1024 :         protocolType = ProtocolType::RESERVED;
     164              : 
     165         1024 :         masterInfo.serverIp.clear();
     166         1024 :         masterInfo.port = HCCL_INVALID_PORT;
     167         1024 :         masterInfo.serverDeviceId = INVALID_VALUE_RANKID;
     168         1024 :         masterInfo.rankSize = INVALID_VALUE_RANKSIZE;
     169         1024 :         masterInfo.agentIp.clear();
     170              : 
     171         1024 :         cclBufferSize = HCCL_CCL_COMM_DEFAULT_BUFFER_SIZE * HCCL_CCL_COMM_FIXED_CALC_BUFFER_SIZE;
     172         1024 :         enableFfts = true;
     173         1024 :         hcclDeterministic = DETERMINISTIC_DISABLE;// 确定性配置 0:不支持;1:支持确定性不支持规约保序;2:支持确定性&规约保序
     174         1024 :         isDeterministic = false;   // 兼容性考虑,提供确定性bool
     175         1024 :         enablePipline = false;
     176         1024 :         enableEntryLog = false;
     177         1024 :         interHccsDisable = false;
     178         1024 :         aicpuCacheEnable = 1; // 默认开启aicpu cache (只有当aicpuUnfold为true时才生效)
     179         1024 :         opCounterEnable = true;
     180         1024 :         logicSuperPodId = "";
     181         1024 :         rdmaFastPost = false;
     182         1024 :         multiQpSrcPortConfigPath = "";
     183         1024 :         increSaveExecTimeOut = NOTIFY_DEFAULT_WAIT_TIME;    // HCCL 默认的Notify wait超时时间设置
     184         1024 :         debugConfig = 0;
     185         1024 :     }
     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