LCOV - code coverage report
Current view: top level - legacy/ascend910/framework/device/debug/dfx/profiling - profiling_extend_info.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 80.8 % 78 63
Test Date: 2026-07-28 12:11:00 Functions: 100.0 % 10 10

            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              : #include <sstream>
      12              : #include <unordered_map>
      13              : #include "common/aicpu_sqe_context.h"
      14              : #include "task_profiling_pub.h"
      15              : #include "common/aicpu_hccl_common.h"
      16              : #include "profiling_manager_device.h"
      17              : #include "profiling_extend_info.h"
      18              : 
      19              : namespace dfx {
      20              : uint64_t g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_INVALID)];
      21              : const std::vector<hccl::ProfTaskType> kfcTaskTypes = {hccl::ProfTaskType::TASK_HCCL_INFO,  // 当前未支持的用这个来暂替
      22              :     hccl::ProfTaskType::TASK_NOTIFY_RECORD,
      23              :     hccl::ProfTaskType::TASK_NOTIFY_WAIT,
      24              :     hccl::ProfTaskType::TASK_SDMA,
      25              :     hccl::ProfTaskType::TASK_INTER_RANK_RECORD,
      26              :     hccl::ProfTaskType::TASK_INTER_PROCESSOR_SYNC,
      27              :     hccl::ProfTaskType::TASK_REDUCE_INLINE,
      28              :     hccl::ProfTaskType::TASK_RDMA};
      29              : 
      30              : namespace {
      31           57 : void ParseNotifySqeInfo(const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      32              : {
      33           57 :     msprofAicpuMC2HcclInfo.notifyID = sqeInfo.notifyId;
      34           57 :     msprofAicpuMC2HcclInfo.remoteRank = sqeInfo.remoteRank;
      35           57 :     msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_NOTIFY_RECORD)];
      36           57 : };
      37              : 
      38           84 : void ParseWaitqeInfo(const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      39              : {
      40           84 :     msprofAicpuMC2HcclInfo.notifyID = sqeInfo.notifyId;
      41           84 :     msprofAicpuMC2HcclInfo.remoteRank = sqeInfo.remoteRank;
      42           84 :     msprofAicpuMC2HcclInfo.role = static_cast<uint32_t>(hccl::TaskRole::DST);
      43           84 :     msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_NOTIFY_WAIT)];
      44           84 : };
      45              : 
      46           16 : void ParseSdmaSqeInfo(const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      47              : {
      48              :     // addrXHigh存的是地址的高32位
      49           16 :     msprofAicpuMC2HcclInfo.srcAddr = (static_cast<uint64_t>(sqeInfo.addr1High) << 32) | sqeInfo.addr1Low;
      50              :     // addrXLow存的是地址的低32位
      51           16 :     msprofAicpuMC2HcclInfo.dstAddr = (static_cast<uint64_t>(sqeInfo.addr2High) << 32) | sqeInfo.addr2Low;
      52           16 :     msprofAicpuMC2HcclInfo.remoteRank = sqeInfo.remoteRank;
      53           16 :     msprofAicpuMC2HcclInfo.role = static_cast<uint32_t>(hccl::TaskRole::DST);
      54           16 :     if (msprofAicpuMC2HcclInfo.localRank == msprofAicpuMC2HcclInfo.remoteRank) {
      55            2 :         msprofAicpuMC2HcclInfo.transportType = static_cast<uint32_t>(hccl::SimpleTaskType::LOCAL);
      56              :     } else {
      57           14 :         msprofAicpuMC2HcclInfo.transportType = static_cast<uint32_t>(hccl::SimpleTaskType::SDMA);
      58              :     }
      59           16 :     msprofAicpuMC2HcclInfo.linkType = sqeInfo.taskRelated.linkType;
      60           16 :     msprofAicpuMC2HcclInfo.dataSize = sqeInfo.length;
      61           16 :     if (sqeInfo.opCode == 0) { // 0表示不做随路规约
      62              :         // SDMA不展示数据类型
      63           16 :         msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_SDMA)];
      64              :     } else {
      65            0 :         TranslateOpcode(sqeInfo.opCode, msprofAicpuMC2HcclInfo.opType);
      66            0 :         msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_REDUCE_INLINE)];
      67              :     }
      68           16 : }
      69              : 
      70         2048 : void ParseCommonSqeInfo(const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      71              : {
      72         2048 :     HCCL_WARNING("Unsupported SQE type");
      73         2048 :     msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_HCCL_INFO)];
      74         2048 : };
      75              : 
      76              : // write value用于卡间的record
      77           28 : void ParseWriteValueSqeInfo(const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      78              : {
      79           28 :     msprofAicpuMC2HcclInfo.remoteRank = sqeInfo.remoteRank;
      80           28 :     if (sqeInfo.subType == RT_STARS_WRITE_VALUE_SUB_TYPE_RDMA_DB_SEND) {
      81            0 :         msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_RDMA)];
      82            0 :         msprofAicpuMC2HcclInfo.linkType = static_cast<uint32_t>(hccl::LinkType::LINK_ROCE);      // reserved value
      83            0 :         msprofAicpuMC2HcclInfo.transportType = static_cast<uint32_t>(hccl::SimpleTaskType::RDMA); // reserved value
      84            0 :         msprofAicpuMC2HcclInfo.dataSize = sqeInfo.length; // wr len
      85            0 :         msprofAicpuMC2HcclInfo.rdmaType = sqeInfo.taskRelated.rdmaType;
      86              :     } else {
      87           28 :         msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_INTER_RANK_RECORD)];
      88              :     }
      89           28 : };
      90              : 
      91            4 : void ParseCondSqeInfo(const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      92              : {
      93            4 :     msprofAicpuMC2HcclInfo.itemId = g_taskHashIds[static_cast<uint64_t>(hccl::ProfTaskType::TASK_INTER_PROCESSOR_SYNC)];
      94            4 : };
      95              : }  // namespace
      96              : 
      97         2237 : void ProfilingExtendInfoHelper::SqeInfo2MsprofAicpuMC2HcclInfo(
      98              :     const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
      99              : {
     100         2237 :     msprofAicpuMC2HcclInfo.taskId = sqeInfo.taskId;
     101         2237 :     msprofAicpuMC2HcclInfo.streamId = sqeInfo.streamId;
     102         2237 :     return ProfilingExtendInfoHelper::AssembleProfInfoByType(sqeInfo, msprofAicpuMC2HcclInfo);
     103              : }
     104              : 
     105         2237 : void ProfilingExtendInfoHelper::AssembleProfInfoByType(
     106              :     const SqeInfo &sqeInfo, MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
     107              : {
     108              :     static const std::unordered_map<uint8_t, Handle> funcMap = {{RT_STARS_SQE_TYPE_WRITE_VALUE, ParseWriteValueSqeInfo},
     109              :         {RT_STARS_SQE_TYPE_NOTIFY_RECORD, ParseNotifySqeInfo},
     110              :         {RT_STARS_SQE_TYPE_NOTIFY_WAIT, ParseWaitqeInfo},
     111              :         {RT_STARS_SQE_TYPE_SDMA, ParseSdmaSqeInfo},
     112         2241 :         {RT_STARS_SQE_TYPE_COND, ParseCondSqeInfo}};
     113         2237 :     auto it = funcMap.find(sqeInfo.type);
     114         2237 :     if (it == funcMap.cend()) {
     115         2048 :         return ParseCommonSqeInfo(sqeInfo, msprofAicpuMC2HcclInfo);
     116              :     }
     117          189 :     (it->second)(sqeInfo, msprofAicpuMC2HcclInfo);
     118              : }
     119              : 
     120         2237 : void ProfilingExtendInfoHelper::InitHcclInfo(MsprofAicpuHcclTaskInfo &msprofAicpuMC2HcclInfo)
     121              : {
     122         2237 :     msprofAicpuMC2HcclInfo.linkType = static_cast<uint8_t>(hccl::LinkType::LINK_RESERVED);
     123         2237 :     msprofAicpuMC2HcclInfo.rdmaType = static_cast<uint8_t>(hccl::RdmaType::RDMA_TYPE_RESERVED);
     124         2237 :     msprofAicpuMC2HcclInfo.dataType = static_cast<uint8_t>(HcclDataType::HCCL_DATA_TYPE_RESERVED);
     125         2237 :     msprofAicpuMC2HcclInfo.opType = static_cast<uint8_t>(HcclReduceOp::HCCL_REDUCE_RESERVED);
     126         2237 :     msprofAicpuMC2HcclInfo.workFlowMode = static_cast<uint8_t>(HcclWorkflowMode::HCCL_WORKFLOW_MODE_RESERVED);
     127         2237 :     msprofAicpuMC2HcclInfo.stage = 0;
     128         2237 :     msprofAicpuMC2HcclInfo.role = static_cast<uint8_t>(hccl::TaskRole::SRC);
     129         2237 :     msprofAicpuMC2HcclInfo.transportType = static_cast<uint8_t>(hccl::SimpleTaskType::LOCAL);
     130         2237 : }
     131              : 
     132           91 : void ProfilingExtendInfoHelper::InitProfItemId()
     133              : {
     134           91 :     if (MsprofReportBatchAdditionalInfo == nullptr) {
     135           91 :         if (AdprofGetHashId == nullptr) {
     136            0 :             HCCL_INFO("AdprofGetHashId is null, InitProfItemId just return");
     137            0 :             return;
     138              :         }
     139          819 :         for (const auto taskType : kfcTaskTypes) {
     140              :             // index保证是有效的
     141         1456 :             g_taskHashIds[static_cast<uint64_t>(taskType)] =
     142          728 :                 AdprofGetHashId(hccl::GetProfTaskOpName(taskType).c_str(), hccl::GetProfTaskOpName(taskType).length());
     143              :             }
     144              :     } else {
     145            0 :         if (MsprofStr2Id == nullptr) {
     146            0 :             HCCL_INFO("MsprofStr2Id is null, InitProfItemId just return");
     147            0 :             return;
     148              :         }
     149            0 :         for (const auto taskType : kfcTaskTypes) {
     150              :             // index保证是有效的
     151            0 :             g_taskHashIds[static_cast<uint64_t>(taskType)] =
     152            0 :                 MsprofStr2Id(hccl::GetProfTaskOpName(taskType).c_str(), hccl::GetProfTaskOpName(taskType).length());
     153              :         }
     154              :     }
     155           91 :     return;
     156              : }
     157              : }  // namespace dfx
        

Generated by: LCOV version 2.0-1