LCOV - code coverage report
Current view: top level - legacy/ascend910/framework/device/aicpu_kfc/dfx - mc2_trace_utils.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 65.2 % 420 274
Test Date: 2026-08-18 17:47:01 Functions: 88.5 % 26 23

            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 "mc2_trace_utils.h"
      12              : 
      13              : #include <cmath>
      14              : #include "log.h"
      15              : #include "mmpa_api.h"
      16              : #include "atrace_pub.h"
      17              : #include "common/aicpu_hccl_common.h"
      18              : #include "framework/aicpu_kfc_prof.h"
      19              : #include "common/aicpu_kfc_utils.h"
      20              : #include "adapter_hal_pub.h"
      21              : 
      22              : namespace {
      23              : constexpr uint32_t TRACE_RING_BUFF_SIZE = 128 * 1024;
      24              : constexpr uint32_t MAX_SQE_SUBMIT_NUM = 256U;
      25              : constexpr char UTRACE_SO[] = "libutrace.so";
      26              : constexpr char ATRACE_SO[] = "libascend_trace.so";
      27              : 
      28              : using TraceCreateWithAttrFunc = TraHandle (*)(TracerType, const char*, const TraceAttr*);
      29              : using TraceGetHandleFunc = TraHandle (*)(TracerType, const char*);
      30              : using TraceSubmitFunc = TraStatus (*)(TraHandle handle, const void*, uint32_t);
      31              : using TraceEventCreateFunc = TraEventHandle (*)(const char*);
      32              : using TraceEventDestroyFunc = void (*)(TraEventHandle);
      33              : using TraceHandleDestroyFunc = void (*)(TraHandle);
      34              : using TraceEventBindTraceFunc = TraStatus (*)(TraEventHandle, TraHandle);
      35              : using TraceEventReportFunc = TraStatus (*)(TraEventHandle);
      36              : using TraceSetGlobalAttrFunc = TraStatus (*)(const TraceGlobalAttr*);
      37              : using TraceStructEntryCreateFunc = TraceStructEntry* (*)(const char*);
      38              : using TraceStructItemFieldSetFunc = void (*)(TraceStructEntry*, const char*, uint8_t, uint8_t, uint64_t);
      39              : using TraceStructItemArraySetFunc = void (*)(TraceStructEntry*, const char*, uint8_t, uint8_t, uint64_t);
      40              : using TraceStructSetAttrFunc = void (*)(TraceStructEntry*, uint8_t, TraceAttr*);
      41              : using TraceStructEntryDestroyFunc = void (*)(TraceStructEntry*);
      42              : 
      43              : void* g_soHandle = nullptr;
      44              : bool g_isAtrace = true;
      45              : TraceCreateWithAttrFunc g_traceCreateWithAttr = nullptr;
      46              : TraceGetHandleFunc g_traceGetHandle = nullptr;
      47              : TraceSubmitFunc g_traceSubmit = nullptr;
      48              : TraceEventCreateFunc g_traceEventCreate = nullptr;
      49              : TraceEventDestroyFunc g_traceEventDestroy = nullptr;
      50              : TraceHandleDestroyFunc g_traceHandleDestroy = nullptr;
      51              : TraceEventBindTraceFunc g_traceEventBindTrace = nullptr;
      52              : TraceEventReportFunc g_traceEventReport = nullptr;
      53              : TraceSetGlobalAttrFunc g_traceSetGlobalAttr = nullptr;
      54              : TraceStructEntryCreateFunc g_traceStructEntryCreate = nullptr;
      55              : TraceStructItemFieldSetFunc g_traceStructItemFieldSet = nullptr;
      56              : TraceStructItemArraySetFunc g_traceStructItemArraySet = nullptr;
      57              : TraceStructSetAttrFunc g_traceStructSetAttr = nullptr;
      58              : TraceStructEntryDestroyFunc g_traceStructEntryDestroy = nullptr;
      59              : 
      60              : TraEventHandle g_eventHandle = -1;
      61              : TraHandle g_traceStrHandle = -1;
      62              : TraHandle g_traceTaskAndTilingDataHandle = -1;
      63              : TraHandle g_traceAicpuComDataHandle = -1;
      64              : TraHandle g_traceMsgInfoHandle = -1;
      65              : TraHandle g_traceSqeBatchInfoHandle = -1;
      66              : TraceStructEntry* g_traceStrSt = nullptr;
      67              : TraceStructEntry* g_traceAicpuComTraceSt = nullptr;
      68              : TraceStructEntry* g_traceKFCtaskAndTilingTraceDataSt = nullptr;
      69              : TraceStructEntry* g_traceMsgInfoSt = nullptr;
      70              : TraceStructEntry* g_traceSqeBatchInfoSt = nullptr;
      71              : } // namespace
      72              : 
      73              : // 当msgNum不为2的幂时,会自动向上取2的幂
      74           10 : uint16_t MC2TraceUtils::GetMsgNum(size_t msgSize)
      75              : {
      76           10 :     float logValue = log(TRACE_RING_BUFF_SIZE / (msgSize + 16)) / log(2); // 16 预留字节 2 幂次
      77           10 :     return static_cast<uint16_t>(pow(2, floor(logValue)));                // 2 幂次
      78              : }
      79              : 
      80            2 : HcclResult MC2TraceUtils::InitTraceStrHandle()
      81              : {
      82              :     // trace api存在限制: msgNum * msgSize <= 128k
      83            2 :     uint16_t strMsgNum = GetMsgNum(sizeof(TraceStr));
      84            2 :     TraceAttr attr = {};
      85            2 :     attr = {false, strMsgNum, sizeof(TraceStr), {nullptr}, 0, {0}};
      86            2 :     g_traceStrSt = g_traceStructEntryCreate("TraceStr");
      87            2 :     g_traceStructItemArraySet(
      88              :         g_traceStrSt, "transmit", TRACE_STRUCT_ARRAY_TYPE_CHAR, TRACE_STRUCT_SHOW_MODE_CHAR,
      89              :         sizeof(TraceStr::transmit));
      90            2 :     g_traceStructSetAttr(g_traceStrSt, 0, &attr);
      91            2 :     g_traceStrHandle = g_traceCreateWithAttr(TRACER_TYPE_SCHEDULE, "TraceStr", &attr);
      92            2 :     if (g_traceStrHandle < 0) {
      93            1 :         HCCL_ERROR("Create g_traceStrHandle failed, ret:%d", g_traceStrHandle);
      94            1 :         g_traceStructEntryDestroy(g_traceStrSt);
      95            1 :         return HCCL_E_INTERNAL;
      96              :     }
      97            1 :     TraStatus ret = g_traceEventBindTrace(g_eventHandle, g_traceStrHandle);
      98            1 :     if (ret != TRACE_SUCCESS) {
      99            0 :         HCCL_ERROR("Bind g_traceStrHandle failed, ret:%d", ret);
     100            0 :         return HCCL_E_INTERNAL;
     101              :     }
     102            1 :     return HCCL_SUCCESS;
     103              : }
     104              : 
     105            2 : void MC2TraceUtils::SetHcclKFCTilingDataOne()
     106              : {
     107            2 :     g_traceStructItemFieldSet(
     108              :         g_traceKFCtaskAndTilingTraceDataSt, "sendOff", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     109              :         8); // 8 uint64
     110            2 :     g_traceStructItemFieldSet(
     111              :         g_traceKFCtaskAndTilingTraceDataSt, "recvOff", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     112              :         8); // 8 uint64
     113            2 :     g_traceStructItemFieldSet(
     114              :         g_traceKFCtaskAndTilingTraceDataSt, "tailSendOff", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     115              :         8); // 8 uint64
     116            2 :     g_traceStructItemFieldSet(
     117              :         g_traceKFCtaskAndTilingTraceDataSt, "tailRecvOff", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     118              :         8); // 8 uint64
     119            2 :     g_traceStructItemFieldSet(
     120              :         g_traceKFCtaskAndTilingTraceDataSt, "sendCnt", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     121              :         8); // 8 uint64
     122            2 :     g_traceStructItemFieldSet(
     123              :         g_traceKFCtaskAndTilingTraceDataSt, "recvCnt", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     124              :         8); // 8 uint64
     125            2 :     g_traceStructItemFieldSet(
     126              :         g_traceKFCtaskAndTilingTraceDataSt, "tailSendCnt", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     127              :         8); // 8 uint64
     128            2 :     g_traceStructItemFieldSet(
     129              :         g_traceKFCtaskAndTilingTraceDataSt, "tailRecvCnt", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     130              :         8); // 8 uint64
     131            2 :     g_traceStructItemFieldSet(
     132              :         g_traceKFCtaskAndTilingTraceDataSt, "totalCnt", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     133              :         8); // 8 uint64
     134            2 :     g_traceStructItemFieldSet(
     135              :         g_traceKFCtaskAndTilingTraceDataSt, "turnNum", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     136              :         4); // 4 uint32
     137            2 :     g_traceStructItemFieldSet(
     138              :         g_traceKFCtaskAndTilingTraceDataSt, "tailNum", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     139              :         4); // 4 uint32
     140            2 :     g_traceStructItemFieldSet(
     141              :         g_traceKFCtaskAndTilingTraceDataSt, "stride", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     142              :         4); // 4 uint32
     143            2 :     g_traceStructItemFieldSet(
     144              :         g_traceKFCtaskAndTilingTraceDataSt, "workspaceOff", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     145              :         4); // 4 uint32
     146            2 :     g_traceStructItemFieldSet(
     147              :         g_traceKFCtaskAndTilingTraceDataSt, "notifyOff", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     148              :         4); // 4 uint32
     149            2 :     g_traceStructItemFieldSet(
     150              :         g_traceKFCtaskAndTilingTraceDataSt, "notifyBeginCnt", TRACE_STRUCT_FIELD_TYPE_UINT16,
     151              :         TRACE_STRUCT_SHOW_MODE_DEC, 2); // 2 uint16
     152            2 :     g_traceStructItemFieldSet(
     153              :         g_traceKFCtaskAndTilingTraceDataSt, "notifyEndCnt", TRACE_STRUCT_FIELD_TYPE_UINT16, TRACE_STRUCT_SHOW_MODE_DEC,
     154              :         2); // 2 uint16
     155            2 :     g_traceStructItemFieldSet(
     156              :         g_traceKFCtaskAndTilingTraceDataSt, "useBufferType", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     157              :         1); // 1 uint8
     158            2 :     g_traceStructItemFieldSet(
     159              :         g_traceKFCtaskAndTilingTraceDataSt, "funID", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     160              :         1); // 1 uint8
     161            2 :     g_traceStructItemFieldSet(
     162              :         g_traceKFCtaskAndTilingTraceDataSt, "dataType", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     163              :         1); // 1 uint8
     164            2 :     g_traceStructItemFieldSet(
     165              :         g_traceKFCtaskAndTilingTraceDataSt, "groupNum", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     166              :         1); // 1 uint8
     167            2 :     g_traceStructItemFieldSet(
     168              :         g_traceKFCtaskAndTilingTraceDataSt, "reuseMode", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     169              :         1); // 1 uint8
     170            2 : }
     171              : 
     172            2 : void MC2TraceUtils::SetHcclKFCTilingDataTwo()
     173              : {
     174            2 :     g_traceStructItemFieldSet(
     175              :         g_traceKFCtaskAndTilingTraceDataSt, "commType", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     176              :         1); // 1 uint8
     177            2 :     g_traceStructItemFieldSet(
     178              :         g_traceKFCtaskAndTilingTraceDataSt, "reduceOp", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     179              :         1); // 1 uint8
     180            2 :     g_traceStructItemFieldSet(
     181              :         g_traceKFCtaskAndTilingTraceDataSt, "commOrder", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     182              :         1); // 1 uint8
     183            2 :     g_traceStructItemFieldSet(
     184              :         g_traceKFCtaskAndTilingTraceDataSt, "waitPolicy", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     185              :         1); // 1 uint8
     186            2 :     g_traceStructItemFieldSet(
     187              :         g_traceKFCtaskAndTilingTraceDataSt, "rspPolicy", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     188              :         1); // 1 uint8
     189            2 :     g_traceStructItemFieldSet(
     190              :         g_traceKFCtaskAndTilingTraceDataSt, "exitPolicy", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     191              :         1); // 1 uint8
     192            2 :     g_traceStructItemFieldSet(
     193              :         g_traceKFCtaskAndTilingTraceDataSt, "commAlg", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     194              :         1); // 1 uint8
     195            2 :     g_traceStructItemFieldSet(
     196              :         g_traceKFCtaskAndTilingTraceDataSt, "taskType", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     197              :         1); // 1 uint8
     198            2 :     g_traceStructItemFieldSet(
     199              :         g_traceKFCtaskAndTilingTraceDataSt, "debugMode", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     200              :         1); // 1 uint8
     201            2 :     g_traceStructItemFieldSet(
     202              :         g_traceKFCtaskAndTilingTraceDataSt, "stepSize", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     203              :         1); // 1 uint8
     204            2 :     g_traceStructItemFieldSet(
     205              :         g_traceKFCtaskAndTilingTraceDataSt, "sendArgIndex", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     206              :         1); // 1 uint8
     207            2 :     g_traceStructItemFieldSet(
     208              :         g_traceKFCtaskAndTilingTraceDataSt, "recvArgIndex", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     209              :         1); // 1 uint8
     210            2 :     g_traceStructItemFieldSet(
     211              :         g_traceKFCtaskAndTilingTraceDataSt, "commOutArgIndex", TRACE_STRUCT_FIELD_TYPE_UINT8,
     212              :         TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     213            2 :     g_traceStructItemFieldSet(
     214              :         g_traceKFCtaskAndTilingTraceDataSt, "hasCommOut", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     215              :         1); // 1 uint8
     216            2 :     g_traceStructItemFieldSet(
     217              :         g_traceKFCtaskAndTilingTraceDataSt, "reverse", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     218              :         1); // 1 uint8
     219            2 :     g_traceStructItemFieldSet(
     220              :         g_traceKFCtaskAndTilingTraceDataSt, "reserve2", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     221              :         4); // 4 uint32
     222            2 : }
     223              : 
     224            2 : HcclResult MC2TraceUtils::InitTaskAndTilingDataHandle()
     225              : {
     226            2 :     uint16_t taskAndTilingDataMsgNum = GetMsgNum(sizeof(KFCtaskAndTilingTraceData));
     227            2 :     TraceAttr attr = {};
     228            2 :     attr = {false, taskAndTilingDataMsgNum, sizeof(KFCtaskAndTilingTraceData), {nullptr}, 0, {0}};
     229            2 :     g_traceKFCtaskAndTilingTraceDataSt = g_traceStructEntryCreate("KFCtaskAndTilingTraceData");
     230            2 :     g_traceStructItemFieldSet(
     231              :         g_traceKFCtaskAndTilingTraceDataSt, "inputA", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     232              :         8); // 8 uint64
     233            2 :     g_traceStructItemFieldSet(
     234              :         g_traceKFCtaskAndTilingTraceDataSt, "outputC", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     235              :         8); // 8 uint64
     236            2 :     g_traceStructItemFieldSet(
     237              :         g_traceKFCtaskAndTilingTraceDataSt, "commOut", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     238              :         8); // 8 uint64
     239            2 :     g_traceStructItemFieldSet(
     240              :         g_traceKFCtaskAndTilingTraceDataSt, "context", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     241              :         8); // 8 uint64
     242            2 :     g_traceStructItemFieldSet(
     243              :         g_traceKFCtaskAndTilingTraceDataSt, "workSpace", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     244              :         8); // 8 uint64
     245            2 :     g_traceStructItemFieldSet(
     246              :         g_traceKFCtaskAndTilingTraceDataSt, "tilingData", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     247              :         8); // 8 uint64
     248            2 :     SetHcclKFCTilingDataOne();
     249            2 :     SetHcclKFCTilingDataTwo();
     250            2 :     g_traceStructSetAttr(g_traceKFCtaskAndTilingTraceDataSt, 0, &attr);
     251            2 :     g_traceTaskAndTilingDataHandle = g_traceCreateWithAttr(TRACER_TYPE_SCHEDULE, "KFCtaskAndTilingTraceData", &attr);
     252            2 :     if (g_traceTaskAndTilingDataHandle < 0) {
     253            1 :         HCCL_ERROR("Create g_traceTaskAndTilingDataHandle failed, ret:%d", g_traceTaskAndTilingDataHandle);
     254            1 :         g_traceStructEntryDestroy(g_traceKFCtaskAndTilingTraceDataSt);
     255            1 :         return HCCL_E_INTERNAL;
     256              :     }
     257            1 :     TraStatus ret = g_traceEventBindTrace(g_eventHandle, g_traceTaskAndTilingDataHandle);
     258            1 :     if (ret != TRACE_SUCCESS) {
     259            0 :         HCCL_ERROR("Bind g_traceTaskAndTilingDataHandle failed, ret:%d", ret);
     260            0 :         return HCCL_E_INTERNAL;
     261              :     }
     262            1 :     return HCCL_SUCCESS;
     263              : }
     264              : 
     265            2 : HcclResult MC2TraceUtils::InitAicpuComDataHandle()
     266              : {
     267            2 :     uint16_t aicpuComMsgNum = GetMsgNum(sizeof(AicpuComTraceData));
     268            2 :     TraceAttr attr = {};
     269            2 :     attr = {false, aicpuComMsgNum, sizeof(AicpuComTraceData), {nullptr}, 0, {0}};
     270            2 :     g_traceAicpuComTraceSt = g_traceStructEntryCreate("AicpuComTraceData");
     271            2 :     g_traceStructItemFieldSet(
     272              :         g_traceAicpuComTraceSt, "devId", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     273            2 :     g_traceStructItemFieldSet(
     274              :         g_traceAicpuComTraceSt, "ssid", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     275            2 :     g_traceStructItemFieldSet(
     276              :         g_traceAicpuComTraceSt, "rankId", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     277            2 :     g_traceStructItemFieldSet(
     278              :         g_traceAicpuComTraceSt, "rankNum", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     279            2 :     g_traceStructItemFieldSet(
     280              :         g_traceAicpuComTraceSt, "windowSize", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_DEC,
     281              :         8); // 8 uint64
     282            2 :     g_traceStructItemFieldSet(
     283              :         g_traceAicpuComTraceSt, "workSpaceAddr", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     284              :         8); // 8 uint64
     285            2 :     g_traceStructItemFieldSet(
     286              :         g_traceAicpuComTraceSt, "kfcNotifyId", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_DEC,
     287              :         8); // 8 uint64
     288            2 :     g_traceStructItemArraySet(
     289              :         g_traceAicpuComTraceSt, "eventIds", TRACE_STRUCT_ARRAY_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC,
     290              :         128); // 4 uint32 128 AC_MAX_RANK_NUM*uint32
     291            2 :     g_traceStructItemArraySet(
     292              :         g_traceAicpuComTraceSt, "windowIn", TRACE_STRUCT_ARRAY_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     293              :         256); // 8 uint64 256 AC_MAX_RANK_NUM*uint64
     294            2 :     g_traceStructItemArraySet(
     295              :         g_traceAicpuComTraceSt, "windowOut", TRACE_STRUCT_ARRAY_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     296              :         256); // 8 uint64 256 AC_MAX_RANK_NUM*uint64
     297            2 :     g_traceStructItemArraySet(
     298              :         g_traceAicpuComTraceSt, "actualStreamId", TRACE_STRUCT_ARRAY_TYPE_INT32, TRACE_STRUCT_SHOW_MODE_DEC,
     299              :         128); // 4 uint32 128 AC_MAX_RANK_NUM*uint32
     300            2 :     g_traceStructItemArraySet(
     301              :         g_traceAicpuComTraceSt, "sqId", TRACE_STRUCT_ARRAY_TYPE_INT32, TRACE_STRUCT_SHOW_MODE_DEC,
     302              :         128); // 4 uint32 128 AC_MAX_RANK_NUM*uint32
     303            2 :     g_traceStructItemArraySet(
     304              :         g_traceAicpuComTraceSt, "aicpuOpNotifyAddress", TRACE_STRUCT_ARRAY_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX,
     305              :         16); // 8 uint64 16 2*uint64
     306            2 :     g_traceStructItemArraySet(
     307              :         g_traceAicpuComTraceSt, "aicpuOpNotifyActualNotifyId", TRACE_STRUCT_ARRAY_TYPE_INT32,
     308              :         TRACE_STRUCT_SHOW_MODE_DEC, 8); // 4 uint32 8 2*uint32
     309            2 :     g_traceStructItemFieldSet(
     310              :         g_traceAicpuComTraceSt, "clusterId", TRACE_STRUCT_FIELD_TYPE_INT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     311            2 :     g_traceStructSetAttr(g_traceAicpuComTraceSt, 0, &attr);
     312            2 :     g_traceAicpuComDataHandle = g_traceCreateWithAttr(TRACER_TYPE_SCHEDULE, "AicpuComTraceData", &attr);
     313            2 :     if (g_traceAicpuComDataHandle < 0) {
     314            1 :         HCCL_ERROR("Create g_traceAicpuComDataHandle failed, ret:%d", g_traceAicpuComDataHandle);
     315            1 :         g_traceStructEntryDestroy(g_traceAicpuComTraceSt);
     316            1 :         return HCCL_E_INTERNAL;
     317              :     }
     318            1 :     TraStatus ret = g_traceEventBindTrace(g_eventHandle, g_traceAicpuComDataHandle);
     319            1 :     if (ret != TRACE_SUCCESS) {
     320            0 :         HCCL_ERROR("Bind g_traceAicpuComDataHandle failed, ret:%d", ret);
     321            0 :         return HCCL_E_INTERNAL;
     322              :     }
     323            1 :     return HCCL_SUCCESS;
     324              : }
     325              : 
     326            2 : void MC2TraceUtils::SetTraceMsgInfo()
     327              : {
     328            2 :     g_traceStructItemFieldSet(
     329              :         g_traceMsgInfoSt, "commType", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     330            2 :     g_traceStructItemFieldSet(
     331              :         g_traceMsgInfoSt, "opType", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     332            2 :     g_traceStructItemFieldSet(
     333              :         g_traceMsgInfoSt, "sendBuffer", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX, 8); // 8 uint64
     334            2 :     g_traceStructItemFieldSet(
     335              :         g_traceMsgInfoSt, "recvBuffer", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_HEX, 8); // 8 uint64
     336            2 :     g_traceStructItemFieldSet(
     337              :         g_traceMsgInfoSt, "count", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_DEC, 8); // 8 uint64
     338            2 :     g_traceStructItemFieldSet(
     339              :         g_traceMsgInfoSt, "strideLen", TRACE_STRUCT_FIELD_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_DEC, 8); // 8 uint64
     340            2 :     g_traceStructItemFieldSet(
     341              :         g_traceMsgInfoSt, "hcclDataType", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     342            2 :     g_traceStructItemFieldSet(
     343              :         g_traceMsgInfoSt, "valid", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     344            2 :     g_traceStructItemFieldSet(
     345              :         g_traceMsgInfoSt, "isLast", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     346            2 :     g_traceStructItemFieldSet(
     347              :         g_traceMsgInfoSt, "funID", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     348            2 :     g_traceStructItemFieldSet(
     349              :         g_traceMsgInfoSt, "sendCnt", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     350            2 :     g_traceStructItemFieldSet(
     351              :         g_traceMsgInfoSt, "rcvCnt", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     352            2 :     g_traceStructItemFieldSet(
     353              :         g_traceMsgInfoSt, "everyTurnRsp", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     354            2 :     g_traceStructItemFieldSet(
     355              :         g_traceMsgInfoSt, "everyTurnWait", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     356            2 :     g_traceStructItemFieldSet(
     357              :         g_traceMsgInfoSt, "totalTurnCnt", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     358            2 :     g_traceStructItemFieldSet(
     359              :         g_traceMsgInfoSt, "useBufferType", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     360            2 :     g_traceStructItemFieldSet(
     361              :         g_traceMsgInfoSt, "winOffset", TRACE_STRUCT_ARRAY_TYPE_UINT64, TRACE_STRUCT_SHOW_MODE_DEC, 8); // 8 uint64
     362            2 :     g_traceStructItemArraySet(
     363              :         g_traceMsgInfoSt, "res", TRACE_STRUCT_ARRAY_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 2); // 1 uint8 2 2*uint8
     364            2 : }
     365              : 
     366            2 : HcclResult MC2TraceUtils::InitMsgInfoHandle()
     367              : {
     368            2 :     uint16_t msgInfoNum = GetMsgNum(sizeof(AivAicpuOpParam));
     369            2 :     TraceAttr attr = {};
     370            2 :     attr = {false, msgInfoNum, sizeof(AivAicpuOpParam), {nullptr}, 0, {0}};
     371            2 :     g_traceMsgInfoSt = g_traceStructEntryCreate("AivAicpuOpParam");
     372            2 :     MC2TraceUtils::SetTraceMsgInfo();
     373            2 :     g_traceStructSetAttr(g_traceMsgInfoSt, 0, &attr);
     374            2 :     g_traceMsgInfoHandle = g_traceCreateWithAttr(TRACER_TYPE_SCHEDULE, "AivAicpuOpParam", &attr);
     375            2 :     if (g_traceMsgInfoHandle < 0) {
     376            1 :         HCCL_ERROR("Create g_traceMsgInfoHandle failed, ret:%d", g_traceMsgInfoHandle);
     377            1 :         g_traceStructEntryDestroy(g_traceMsgInfoSt);
     378            1 :         return HCCL_E_INTERNAL;
     379              :     }
     380            1 :     TraStatus ret = g_traceEventBindTrace(g_eventHandle, g_traceMsgInfoHandle);
     381            1 :     if (ret != TRACE_SUCCESS) {
     382            0 :         HCCL_ERROR("Bind g_traceMsgInfoHandle failed, ret:%d", ret);
     383            0 :         return HCCL_E_INTERNAL;
     384              :     }
     385            1 :     return HCCL_SUCCESS;
     386              : }
     387              : 
     388           32 : void MC2TraceUtils::SetTraceSqeBatchInfo()
     389              : {
     390           32 :     g_traceStructItemFieldSet(
     391              :         g_traceSqeBatchInfoSt, "addr1High", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_HEX, 4); // 4 uint32
     392           32 :     g_traceStructItemFieldSet(
     393              :         g_traceSqeBatchInfoSt, "addr1Low", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_HEX, 4); // 4 uint32
     394           32 :     g_traceStructItemFieldSet(
     395              :         g_traceSqeBatchInfoSt, "addr2High", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_HEX, 4); // 4 uint32
     396           32 :     g_traceStructItemFieldSet(
     397              :         g_traceSqeBatchInfoSt, "addr2Low", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_HEX, 4); // 4 uint32
     398           32 :     g_traceStructItemFieldSet(
     399              :         g_traceSqeBatchInfoSt, "sqeHeadIdx", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     400           32 :     g_traceStructItemFieldSet(
     401              :         g_traceSqeBatchInfoSt, "notifyId", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     402           32 :     g_traceStructItemFieldSet(
     403              :         g_traceSqeBatchInfoSt, "length", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     404           32 :     g_traceStructItemFieldSet(
     405              :         g_traceSqeBatchInfoSt, "partId", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     406           32 :     g_traceStructItemFieldSet(
     407              :         g_traceSqeBatchInfoSt, "remoteRank", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     408           32 :     g_traceStructItemFieldSet(
     409              :         g_traceSqeBatchInfoSt, "dataType", TRACE_STRUCT_FIELD_TYPE_UINT32, TRACE_STRUCT_SHOW_MODE_DEC, 4); // 4 uint32
     410           32 :     g_traceStructItemFieldSet(
     411              :         g_traceSqeBatchInfoSt, "streamId", TRACE_STRUCT_FIELD_TYPE_UINT16, TRACE_STRUCT_SHOW_MODE_DEC, 2); // 2 uint16
     412           32 :     g_traceStructItemFieldSet(
     413              :         g_traceSqeBatchInfoSt, "eventId", TRACE_STRUCT_FIELD_TYPE_UINT16, TRACE_STRUCT_SHOW_MODE_DEC, 2); // 2 uint16
     414           32 :     g_traceStructItemFieldSet(
     415              :         g_traceSqeBatchInfoSt, "taskId", TRACE_STRUCT_FIELD_TYPE_UINT16, TRACE_STRUCT_SHOW_MODE_DEC, 2); // 2 uint16
     416           32 :     g_traceStructItemFieldSet(
     417              :         g_traceSqeBatchInfoSt, "condValue", TRACE_STRUCT_FIELD_TYPE_UINT16, TRACE_STRUCT_SHOW_MODE_DEC, 2); // 2 uint16
     418           32 :     g_traceStructItemFieldSet(
     419              :         g_traceSqeBatchInfoSt, "isLast", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     420           32 :     g_traceStructItemFieldSet(
     421              :         g_traceSqeBatchInfoSt, "opCode", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     422           32 :     g_traceStructItemFieldSet(
     423              :         g_traceSqeBatchInfoSt, "sqeNum", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     424           32 :     g_traceStructItemFieldSet(
     425              :         g_traceSqeBatchInfoSt, "type", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     426           32 :     g_traceStructItemFieldSet(
     427              :         g_traceSqeBatchInfoSt, "subType", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     428           32 :     g_traceStructItemFieldSet(
     429              :         g_traceSqeBatchInfoSt, "valid", TRACE_STRUCT_FIELD_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC, 1); // 1 uint8
     430           32 :     g_traceStructItemArraySet(
     431              :         g_traceSqeBatchInfoSt, "reverse", TRACE_STRUCT_ARRAY_TYPE_UINT8, TRACE_STRUCT_SHOW_MODE_DEC,
     432              :         10); // 1 uint8 10 10*uint8
     433           32 : }
     434              : 
     435            2 : HcclResult MC2TraceUtils::InitSqeBatchInfoHandle()
     436              : {
     437            2 :     uint16_t sqeBatchInfoMsgNum = GetMsgNum(sizeof(SqeBatchInfo));
     438            2 :     TraceAttr attr = {};
     439            2 :     attr = {false, sqeBatchInfoMsgNum, sizeof(SqeBatchInfo), {nullptr}, 0, {0}};
     440            2 :     g_traceSqeBatchInfoSt = g_traceStructEntryCreate("SqeBatchInfo");
     441           34 :     for (uint32_t i = 0; i < MAX_SQE_BATCH_SIZE; i++) {
     442           32 :         SetTraceSqeBatchInfo();
     443              :     }
     444            2 :     g_traceStructSetAttr(g_traceSqeBatchInfoSt, 0, &attr);
     445            2 :     g_traceSqeBatchInfoHandle = g_traceCreateWithAttr(TRACER_TYPE_SCHEDULE, "SqeBatchInfo", &attr);
     446            2 :     if (g_traceSqeBatchInfoHandle < 0) {
     447            1 :         HCCL_ERROR("Create g_traceSqeBatchInfoHandle failed, ret:%d", g_traceSqeBatchInfoHandle);
     448            1 :         g_traceStructEntryDestroy(g_traceSqeBatchInfoSt);
     449            1 :         return HCCL_E_INTERNAL;
     450              :     }
     451            1 :     TraStatus ret = g_traceEventBindTrace(g_eventHandle, g_traceSqeBatchInfoHandle);
     452            1 :     if (ret != TRACE_SUCCESS) {
     453            0 :         HCCL_ERROR("Bind g_traceSqeBatchInfoHandle failed, ret:%d", ret);
     454            0 :         return HCCL_E_INTERNAL;
     455              :     }
     456            1 :     return HCCL_SUCCESS;
     457              : }
     458              : 
     459            1 : HcclResult MC2TraceUtils::InitTraceHandle()
     460              : {
     461            1 :     g_eventHandle = g_traceEventCreate("mc2_dfx");
     462            1 :     if (g_eventHandle < 0) {
     463            0 :         HCCL_ERROR("Create mc2_dfx event handle failed");
     464            0 :         return HCCL_E_INTERNAL;
     465              :     }
     466            1 :     CHK_RET(InitTaskAndTilingDataHandle());
     467            1 :     CHK_RET(InitAicpuComDataHandle());
     468            1 :     CHK_RET(InitTraceStrHandle());
     469            1 :     CHK_RET(InitMsgInfoHandle());
     470            1 :     CHK_RET(InitSqeBatchInfoHandle());
     471            1 :     return HCCL_SUCCESS;
     472              : }
     473              : 
     474            2 : HcclResult MC2TraceUtils::GetTraceFunc(const std::string& traceName)
     475              : {
     476            2 :     g_traceEventBindTrace = reinterpret_cast<TraceEventBindTraceFunc>(
     477            2 :         mmDlsym(g_soHandle, std::string(traceName + "EventBindTrace").c_str()));
     478            2 :     CHK_PRT_RET(
     479              :         g_traceEventBindTrace == nullptr, HCCL_ERROR("Get g_traceEventBindTrace error: %s", mmDlerror()),
     480              :         HCCL_E_SYSCALL);
     481              :     g_traceEventReport
     482            2 :         = reinterpret_cast<TraceEventReportFunc>(mmDlsym(g_soHandle, std::string(traceName + "EventReport").c_str()));
     483            2 :     CHK_PRT_RET(
     484              :         g_traceEventReport == nullptr, HCCL_ERROR("Get g_traceEventReport error: %s", mmDlerror()), HCCL_E_SYSCALL);
     485            2 :     g_traceSetGlobalAttr = reinterpret_cast<TraceSetGlobalAttrFunc>(
     486            2 :         mmDlsym(g_soHandle, std::string(traceName + "SetGlobalAttr").c_str()));
     487            2 :     CHK_PRT_RET(
     488              :         g_traceSetGlobalAttr == nullptr, HCCL_ERROR("Get g_traceSetGlobalAttr error: %s", mmDlerror()), HCCL_E_SYSCALL);
     489            2 :     g_traceStructEntryCreate = reinterpret_cast<TraceStructEntryCreateFunc>(
     490            2 :         mmDlsym(g_soHandle, std::string(traceName + "StructEntryCreate").c_str()));
     491            2 :     CHK_PRT_RET(
     492              :         g_traceStructEntryCreate == nullptr, HCCL_ERROR("Get g_traceStructEntryCreate error: %s", mmDlerror()),
     493              :         HCCL_E_SYSCALL);
     494            2 :     g_traceStructItemFieldSet = reinterpret_cast<TraceStructItemFieldSetFunc>(
     495            2 :         mmDlsym(g_soHandle, std::string(traceName + "StructItemFieldSet").c_str()));
     496            2 :     CHK_PRT_RET(
     497              :         g_traceStructItemFieldSet == nullptr, HCCL_ERROR("Get g_traceStructItemFieldSet error: %s", mmDlerror()),
     498              :         HCCL_E_SYSCALL);
     499            2 :     g_traceStructItemArraySet = reinterpret_cast<TraceStructItemArraySetFunc>(
     500            2 :         mmDlsym(g_soHandle, std::string(traceName + "StructItemArraySet").c_str()));
     501            2 :     CHK_PRT_RET(
     502              :         g_traceStructItemArraySet == nullptr, HCCL_ERROR("Get g_traceStructItemArraySet error: %s", mmDlerror()),
     503              :         HCCL_E_SYSCALL);
     504            2 :     g_traceStructSetAttr = reinterpret_cast<TraceStructSetAttrFunc>(
     505            2 :         mmDlsym(g_soHandle, std::string(traceName + "StructSetAttr").c_str()));
     506            2 :     CHK_PRT_RET(
     507              :         g_traceStructSetAttr == nullptr, HCCL_ERROR("Get g_traceStructSetAttr error: %s", mmDlerror()), HCCL_E_SYSCALL);
     508            2 :     g_traceStructEntryDestroy = reinterpret_cast<TraceStructEntryDestroyFunc>(
     509            2 :         mmDlsym(g_soHandle, std::string(traceName + "StructEntryDestroy").c_str()));
     510            2 :     CHK_PRT_RET(
     511              :         g_traceStructEntryDestroy == nullptr, HCCL_ERROR("Get g_traceStructEntryDestroy error: %s", mmDlerror()),
     512              :         HCCL_E_SYSCALL);
     513            2 :     return HCCL_SUCCESS;
     514              : }
     515              : 
     516            2 : HcclResult MC2TraceUtils::InitFuncHandle()
     517              : {
     518            2 :     std::string traceName = g_isAtrace ? "Atrace" : "Utrace";
     519            2 :     HCCL_INFO("Start mmDlsym %s funcHandle", traceName.c_str());
     520            2 :     g_traceCreateWithAttr = reinterpret_cast<TraceCreateWithAttrFunc>(
     521            2 :         mmDlsym(g_soHandle, std::string(traceName + "CreateWithAttr").c_str()));
     522            2 :     CHK_PRT_RET(
     523              :         g_traceCreateWithAttr == nullptr, HCCL_ERROR("Get g_traceCreateWithAttr error: %s", mmDlerror()),
     524              :         HCCL_E_SYSCALL);
     525              :     g_traceGetHandle
     526            2 :         = reinterpret_cast<TraceGetHandleFunc>(mmDlsym(g_soHandle, std::string(traceName + "GetHandle").c_str()));
     527            2 :     CHK_PRT_RET(g_traceGetHandle == nullptr, HCCL_ERROR("Get g_traceGetHandle error: %s", mmDlerror()), HCCL_E_SYSCALL);
     528            2 :     g_traceSubmit = reinterpret_cast<TraceSubmitFunc>(mmDlsym(g_soHandle, std::string(traceName + "Submit").c_str()));
     529            2 :     CHK_PRT_RET(g_traceSubmit == nullptr, HCCL_ERROR("Get g_traceSubmit error: %s", mmDlerror()), HCCL_E_SYSCALL);
     530              :     g_traceEventCreate
     531            2 :         = reinterpret_cast<TraceEventCreateFunc>(mmDlsym(g_soHandle, std::string(traceName + "EventCreate").c_str()));
     532            2 :     CHK_PRT_RET(
     533              :         g_traceEventCreate == nullptr, HCCL_ERROR("Get g_traceEventCreate error: %s", mmDlerror()), HCCL_E_SYSCALL);
     534              :     g_traceEventDestroy
     535            2 :         = reinterpret_cast<TraceEventDestroyFunc>(mmDlsym(g_soHandle, std::string(traceName + "EventDestroy").c_str()));
     536            2 :     CHK_PRT_RET(
     537              :         g_traceEventDestroy == nullptr, HCCL_ERROR("Get g_traceEventDestroy error: %s", mmDlerror()), HCCL_E_SYSCALL);
     538              :     g_traceHandleDestroy
     539            2 :         = reinterpret_cast<TraceHandleDestroyFunc>(mmDlsym(g_soHandle, std::string(traceName + "Destroy").c_str()));
     540            2 :     CHK_PRT_RET(
     541              :         g_traceHandleDestroy == nullptr, HCCL_ERROR("Get g_traceHandleDestroy error: %s", mmDlerror()), HCCL_E_SYSCALL);
     542            2 :     CHK_RET(GetTraceFunc(traceName));
     543            2 :     return HCCL_SUCCESS;
     544            2 : }
     545              : 
     546           47 : __attribute__((constructor)) void DlopenTraceSo()
     547              : {
     548           47 :     if (g_soHandle == nullptr) {
     549           47 :         g_soHandle = mmDlopen(ATRACE_SO, RTLD_NOW | RTLD_GLOBAL);
     550           47 :         if (g_soHandle == nullptr) {
     551           47 :             g_soHandle = mmDlopen(UTRACE_SO, RTLD_NOW | RTLD_GLOBAL);
     552           47 :             g_isAtrace = false;
     553              :         }
     554           47 :         HCCL_INFO("mmDlopen success");
     555              :     }
     556           47 : }
     557              : 
     558           84 : HcclResult MC2TraceUtils::Init()
     559              : {
     560           84 :     if (g_soHandle == nullptr) {
     561           84 :         HCCL_WARNING("Cannot find so file: %s", UTRACE_SO);
     562           84 :         return HCCL_SUCCESS;
     563              :     }
     564            0 :     CHK_RET(InitFuncHandle());
     565            0 :     CHK_RET(InitTraceHandle());
     566            0 :     unsigned int hostpid = 0;
     567            0 :     unsigned int cpType = DEVDRV_PROCESS_CPTYPE_MAX;
     568            0 :     CHK_RET(HrtHalDrvQueryProcessHostPid(getpid(), nullptr, nullptr, &hostpid, &cpType));
     569              : 
     570            0 :     TraceGlobalAttr traceGlobalAttr = {};
     571            0 :     traceGlobalAttr.saveMode = 1;
     572            0 :     traceGlobalAttr.deviceId = AicpuGetComContext()->devId;
     573            0 :     traceGlobalAttr.pid = hostpid;
     574            0 :     TraStatus ret = g_traceSetGlobalAttr(&traceGlobalAttr);
     575            0 :     if (ret != TRACE_SUCCESS) {
     576            0 :         HCCL_ERROR("TraceSetGlobalAttrFunc failed, ret:%d", ret);
     577            0 :         return HCCL_E_INTERNAL;
     578              :     }
     579            0 :     return HCCL_SUCCESS;
     580              : }
     581              : 
     582              : template <typename T>
     583            1 : HcclResult MC2TraceUtils::Submit(const T* const traceData)
     584              : {
     585            1 :     if (g_soHandle == nullptr || g_traceGetHandle == nullptr || g_traceSubmit == nullptr) {
     586            1 :         return HCCL_SUCCESS;
     587              :     }
     588            0 :     CHK_PTR_NULL(traceData);
     589            0 :     std::string typeName;
     590              :     if (std::is_same<T, KFCtaskAndTilingTraceData>::value) {
     591            0 :         typeName = "KFCtaskAndTilingTraceData";
     592              :     } else if (std::is_same<T, AicpuComTraceData>::value) {
     593            0 :         typeName = "AicpuComTraceData";
     594              :     } else if (std::is_same<T, AivAicpuOpParam>::value) {
     595              :         typeName = "AivAicpuOpParam";
     596              :     } else if (std::is_same<T, SqeBatchInfo>::value) {
     597            0 :         typeName = "SqeBatchInfo";
     598              :     } else {
     599              :         HCCL_ERROR("find typename: %s failed", typeid(T).name());
     600              :         return HCCL_E_INTERNAL;
     601              :     }
     602              : 
     603            0 :     auto traceHandle = g_traceGetHandle(TRACER_TYPE_SCHEDULE, typeName.c_str());
     604            0 :     if (traceHandle < 0) {
     605            0 :         HCCL_ERROR("getHandle %s failed, ret:%d", typeName.c_str(), traceHandle);
     606            0 :         return HCCL_E_INTERNAL;
     607              :     }
     608            0 :     auto traceRet = g_traceSubmit(traceHandle, reinterpret_cast<const void*>(traceData), sizeof(T));
     609            0 :     if (traceRet != TRACE_SUCCESS) {
     610            0 :         HCCL_ERROR("submit %s failed, ret:%d", typeName.c_str(), traceRet);
     611            0 :         return HCCL_E_INTERNAL;
     612              :     }
     613            0 :     return HCCL_SUCCESS;
     614            0 : }
     615              : 
     616           64 : HcclResult MC2TraceUtils::Submit(AicpuComContext* ctx)
     617              : {
     618           64 :     if (g_soHandle == nullptr) {
     619           64 :         return HCCL_SUCCESS;
     620              :     }
     621            0 :     CHK_PTR_NULL(ctx);
     622            0 :     uint64_t startUsec = GetCurCpuTimestamp();
     623              :     AicpuComTraceData comTraceData;
     624            0 :     comTraceData.devId = ctx->devId;
     625            0 :     comTraceData.ssid = ctx->ssid;
     626            0 :     comTraceData.rankId = ctx->rankId;
     627            0 :     comTraceData.rankNum = ctx->rankNum;
     628            0 :     comTraceData.windowSize = ctx->windowSize;
     629            0 :     comTraceData.workSpaceAddr = ctx->workSpaceAddr;
     630            0 :     comTraceData.kfcNotifyId = ctx->kfcNotifyId;
     631            0 :     for (uint32_t i = 0; i < AC_MAX_RANK_NUM; i++) {
     632            0 :         comTraceData.eventIds[i] = ctx->eventIds[i];
     633            0 :         comTraceData.windowIn[i] = ctx->rankInfo[i].window;
     634            0 :         comTraceData.windowOut[i] = ctx->rankInfo[i].windowOut;
     635            0 :         comTraceData.actualStreamId[i] = ctx->streamInfo[i].actualStreamId;
     636            0 :         comTraceData.sqId[i] = ctx->streamInfo[i].sqId;
     637              :     }
     638            0 :     for (uint32_t i = 0; i < 2; i++) { // 2 aicpuOpNotify size
     639            0 :         comTraceData.aicpuOpNotifyAddress[i] = ctx->aicpuOpNotify[i].address;
     640            0 :         comTraceData.aicpuOpNotifyActualNotifyId[i] = ctx->aicpuOpNotify[i].actualNotifyId;
     641              :     }
     642            0 :     comTraceData.clusterId = ctx->clusterId;
     643            0 :     CHK_RET(Submit<AicpuComTraceData>(&comTraceData));
     644            0 :     if (AicpuKfcUtils::IsDebugModeEquals(*ctx, MC2_DEBUG_TIME_TAKEN)) {
     645            0 :         AicpuKfcProf::GetProInst(*ctx).traceCtxTime += GetCurCpuTimestamp() - startUsec;
     646              :     }
     647            0 :     return HCCL_SUCCESS;
     648              : }
     649              : 
     650           61 : HcclResult MC2TraceUtils::Submit(const KFCTask* const task, const HcclKFCTilingData* const tilingData)
     651              : {
     652           61 :     if (g_soHandle == nullptr) {
     653           61 :         return HCCL_SUCCESS;
     654              :     }
     655            0 :     CHK_PTR_NULL(task);
     656            0 :     CHK_PTR_NULL(tilingData);
     657            0 :     uint64_t startUsec = GetCurCpuTimestamp();
     658              :     KFCtaskAndTilingTraceData taskAndTilingData;
     659            0 :     error_t ret = memcpy_s(&taskAndTilingData, sizeof(KFCtaskAndTilingTraceData), task, sizeof(KFCTask));
     660            0 :     if (ret != EOK) {
     661            0 :         HCCL_ERROR("task memcpy_s fail ret:%d", ret);
     662            0 :         return HCCL_E_MEMORY;
     663              :     }
     664            0 :     ret = memcpy_s(
     665              :         reinterpret_cast<uint8_t*>(&taskAndTilingData) + sizeof(KFCTask),
     666              :         sizeof(KFCtaskAndTilingTraceData) - sizeof(KFCTask), tilingData, sizeof(HcclKFCTilingData));
     667            0 :     if (ret != EOK) {
     668            0 :         HCCL_ERROR("tilingData memcpy_s fail ret:%d", ret);
     669            0 :         return HCCL_E_MEMORY;
     670              :     }
     671            0 :     CHK_RET(Submit<KFCtaskAndTilingTraceData>(&taskAndTilingData));
     672            0 :     auto ctx = AicpuGetComContext();
     673            0 :     if (AicpuKfcUtils::IsDebugModeEquals(*ctx, MC2_DEBUG_TIME_TAKEN)) {
     674            0 :         AicpuKfcProf::GetProInst(*ctx).traceSubmitTime += GetCurCpuTimestamp() - startUsec;
     675              :     }
     676            0 :     return HCCL_SUCCESS;
     677              : }
     678              : 
     679            1 : HcclResult MC2TraceUtils::Submit(const std::string& traceStr)
     680              : {
     681            1 :     if (g_soHandle == nullptr) {
     682            1 :         return HCCL_SUCCESS;
     683              :     }
     684            0 :     return Submit(traceStr.c_str());
     685              : }
     686              : 
     687            1 : HcclResult MC2TraceUtils::Submit(const char* traceStr)
     688              : {
     689            1 :     if (g_soHandle == nullptr || g_traceSubmit == nullptr) {
     690            1 :         return HCCL_SUCCESS;
     691              :     }
     692            0 :     uint64_t startUsec = GetCurCpuTimestamp();
     693            0 :     uint32_t strSize = strlen(traceStr);
     694            0 :     uint32_t posSize = 0U;
     695            0 :     TraceStr singleTraceStr;
     696            0 :     while (posSize < strSize) {
     697            0 :         uint32_t traceStrLen = std::min<uint32_t>(strSize - posSize, sizeof(singleTraceStr.transmit) - 1);
     698            0 :         CHK_SAFETY_FUNC_RET(memset_s(
     699              :             reinterpret_cast<void*>(&singleTraceStr.transmit), sizeof(singleTraceStr.transmit), 0,
     700              :             sizeof(singleTraceStr.transmit)));
     701            0 :         error_t ret = memcpy_s(singleTraceStr.transmit, traceStrLen, traceStr + posSize, traceStrLen);
     702            0 :         if (ret != EOK) {
     703            0 :             HCCL_ERROR("traceStr memcpy_s fail ret:%d", ret);
     704            0 :             return HCCL_E_MEMORY;
     705              :         }
     706            0 :         posSize += traceStrLen;
     707              :         auto traceStrRet
     708            0 :             = g_traceSubmit(g_traceStrHandle, reinterpret_cast<const void*>(&singleTraceStr), sizeof(singleTraceStr));
     709            0 :         if (traceStrRet != TRACE_SUCCESS) {
     710            0 :             HCCL_ERROR("submittraceStr failed, ret:%d", traceStrRet);
     711            0 :             return HCCL_E_INTERNAL;
     712              :         }
     713            0 :         HCCL_INFO("Submit string: %s", singleTraceStr.transmit);
     714              :     }
     715            0 :     auto ctx = AicpuGetComContext();
     716            0 :     if (AicpuKfcUtils::IsDebugModeEquals(*ctx, MC2_DEBUG_TIME_TAKEN)) {
     717            0 :         AicpuKfcProf::GetProInst(*ctx).traceSubmitTime += GetCurCpuTimestamp() - startUsec;
     718              :     }
     719            0 :     return HCCL_SUCCESS;
     720              : }
     721              : 
     722            0 : HcclResult MC2TraceUtils::SubmitBatchSqeInfo()
     723              : {
     724            0 :     if (g_soHandle == nullptr) {
     725            0 :         return HCCL_SUCCESS;
     726              :     }
     727            0 :     uint64_t startUsec = GetCurCpuTimestamp();
     728            0 :     SqeContext* context = GetSqeContext();
     729            0 :     CHK_PTR_NULL(context->buffPtr);
     730            0 :     for (uint32_t streamId = 0U; streamId < AC_MAX_RANK_NUM; streamId++) {
     731            0 :         auto& buff = context->buffPtr[streamId];
     732            0 :         HCCL_INFO(
     733              :             "sqTail: %u, sqHead: %u, sqeCnt: %u, tailSqeTaskId: %u, tailSqeIdx: %u", buff.sqTail, buff.sqHead,
     734              :             buff.sqeCnt, buff.tailSqeTaskId, buff.tailSqeIdx);
     735            0 :         auto submitNum = std::min<uint32_t>(buff.tailSqeIdx - buff.sqeCnt, MAX_SQE_SUBMIT_NUM);
     736            0 :         for (uint32_t i = 0U; i <= submitNum / MAX_SQE_BATCH_SIZE; i++) {
     737            0 :             SqeBatchInfo sqeBatchInfo;
     738            0 :             for (uint32_t j = 0U; j < MAX_SQE_BATCH_SIZE; j++) {
     739            0 :                 const auto idx = i * MAX_SQE_BATCH_SIZE + j;
     740            0 :                 if (idx >= submitNum) {
     741            0 :                     break;
     742              :                 }
     743            0 :                 if (AicpuSqeContext::QuerySqeInfoByTaskId(
     744            0 :                         streamId, buff.tailSqeTaskId - submitNum + idx, &sqeBatchInfo.sqeInfos[j])
     745            0 :                     != HCCL_SUCCESS) {
     746            0 :                     HCCL_WARNING("Query sqe info failed, stream:%u, id:%u", streamId, idx);
     747            0 :                     break;
     748              :                 }
     749              :             }
     750            0 :             CHK_RET(Submit<SqeBatchInfo>(&sqeBatchInfo));
     751              :         }
     752              :     }
     753            0 :     auto ctx = AicpuGetComContext();
     754            0 :     if (AicpuKfcUtils::IsDebugModeEquals(*ctx, MC2_DEBUG_TIME_TAKEN)) {
     755            0 :         AicpuKfcProf::GetProInst(*ctx).traceSqeTime += GetCurCpuTimestamp() - startUsec;
     756              :     }
     757            0 :     return HCCL_SUCCESS;
     758              : }
     759              : 
     760           10 : HcclResult MC2TraceUtils::Save()
     761              : {
     762           10 :     if (g_soHandle == nullptr) {
     763           10 :         return HCCL_SUCCESS;
     764              :     }
     765            0 :     TraStatus ret = g_traceEventReport(g_eventHandle);
     766            0 :     if (ret != TRACE_SUCCESS) {
     767            0 :         HCCL_ERROR("TraceEventReport failed, ret:%d", ret);
     768            0 :         return HCCL_E_INTERNAL;
     769              :     }
     770            0 :     return HCCL_SUCCESS;
     771              : }
     772              : 
     773            2 : HcclResult MC2TraceUtils::DestoryHandles()
     774              : {
     775            2 :     if (g_soHandle == nullptr) {
     776            2 :         return HCCL_SUCCESS;
     777              :     }
     778            0 :     g_traceStructEntryDestroy(g_traceStrSt);
     779            0 :     g_traceStructEntryDestroy(g_traceAicpuComTraceSt);
     780            0 :     g_traceStructEntryDestroy(g_traceKFCtaskAndTilingTraceDataSt);
     781            0 :     g_traceStructEntryDestroy(g_traceMsgInfoSt);
     782            0 :     g_traceStructEntryDestroy(g_traceSqeBatchInfoSt);
     783            0 :     g_traceHandleDestroy(g_traceStrHandle);
     784            0 :     g_traceHandleDestroy(g_traceTaskAndTilingDataHandle);
     785            0 :     g_traceHandleDestroy(g_traceAicpuComDataHandle);
     786            0 :     g_traceHandleDestroy(g_traceMsgInfoHandle);
     787            0 :     g_traceHandleDestroy(g_traceSqeBatchInfoHandle);
     788            0 :     g_traceEventDestroy(g_eventHandle);
     789              : 
     790            0 :     return HCCL_SUCCESS;
     791              : }
     792              : 
     793           47 : __attribute__((destructor)) void Finalize()
     794              : {
     795           47 :     if (g_soHandle != nullptr) {
     796            0 :         (void)mmDlclose(g_soHandle);
     797              :     }
     798           47 :     g_soHandle = nullptr;
     799           47 : }
     800              : 
     801              : // 显式实例化
     802              : template HcclResult MC2TraceUtils::Submit(const SqeBatchInfo* const);
        

Generated by: LCOV version 2.0-1