LCOV - code coverage report
Current view: top level - aicpu_schedule/core/dfx - aicpusd_monitor.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 22 22
Test Date: 2026-07-28 10:54:05 Functions: 100.0 % 9 9

            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 CORE_AICPUSD_MONITOR_H
      12              : #define CORE_AICPUSD_MONITOR_H
      13              : 
      14              : #include <map>
      15              : #include <atomic>
      16              : #include <mutex>
      17              : #include <functional>
      18              : #include <string>
      19              : #include <memory>
      20              : #include <thread>
      21              : #include <sstream>
      22              : #include <semaphore.h>
      23              : #include <vector>
      24              : #include "aicpusd_status.h"
      25              : #include "aicpu_timer.h"
      26              : #include "profiling_adp.h"
      27              : #include "aicpusd_common.h"
      28              : 
      29              : namespace AicpuSchedule {
      30              : class TaskTimer {
      31              : public:
      32        29732 :     TaskTimer() : startTick(0UL), runFlag(false), timeInTick(0UL) {}
      33         1027 :     TaskTimer(const uint64_t tick, const bool isRun) : startTick(tick), runFlag(isRun), timeInTick(0UL) {}
      34              :     ~TaskTimer() = default;
      35              : 
      36         5140 :     inline uint64_t GetStartTick() const
      37              :     {
      38        10280 :         return startTick.load();
      39              :     };
      40         6163 :     inline bool GetRunFlag() const
      41              :     {
      42         6163 :         return runFlag.load();
      43              :     };
      44          134 :     inline void SetStartTick(const uint64_t tick)
      45              :     {
      46          134 :         startTick = tick;
      47          134 :     };
      48          264 :     inline void SetRunFlag(const bool isRun)
      49              :     {
      50          264 :         runFlag = isRun;
      51          268 :     };
      52            2 :     inline void SetTimeTick(const uint32_t timeS)
      53              :     {
      54            2 :         timeInTick = timeS * aicpu::GetSystemTickFreq();
      55            2 :     };
      56            2 :     inline uint64_t GetTimeTick() const
      57              :     {
      58            2 :         return timeInTick;
      59              :     };
      60              : 
      61              : private:
      62              :     std::atomic<uint64_t> startTick;
      63              :     std::atomic<bool> runFlag;
      64              :     std::atomic<uint64_t> timeInTick;
      65              : };
      66              : 
      67              : struct TaskInfoForMonitor {
      68              :     uint64_t serialNo;
      69              :     uint64_t taskId;
      70              :     uint32_t streamId;
      71              :     bool isHwts;
      72              : };
      73              : 
      74              : class MonitorDebug {
      75              : public:
      76            1 :     static std::string MonitorDebugString(const TaskInfoForMonitor &monitor)
      77              :     {
      78            1 :         std::ostringstream oss;
      79            1 :         oss << "serialNo=" << monitor.serialNo << ", stream_id=" << monitor.streamId << ", task_id=" << monitor.taskId;
      80            2 :         return oss.str();
      81            1 :     }
      82              : };
      83              : 
      84              : class AicpuMonitor {
      85              : public:
      86              :     static AicpuMonitor &GetInstance();
      87              : 
      88              :     int32_t InitMonitor(const uint32_t devId, const bool isOnline);
      89              : 
      90              :     void SetTaskInfo(const uint32_t threadIndex, const TaskInfoForMonitor &taskInfo) const;
      91              : 
      92              :     void SetTaskStartTime(const uint32_t taskId);
      93              :     void SetTaskEndTime(const uint32_t taskId);
      94              :     void SetAicpuStreamTaskStartTime(const uint32_t taskId);
      95              :     void SetAicpuStreamTaskEndTime(const uint32_t taskId);
      96              :     void SetModelStartTime(const uint32_t modelId);
      97              :     void SetModelEndTime(const uint32_t modelId);
      98              :     void SetOpTimerStartTime(const aicpu::TimerHandle timerId, const uint32_t timeInS);
      99              :     void SetOpTimerEndTime(const aicpu::TimerHandle timerId);
     100              :     uint32_t GetTaskDefaultTimeout() const;
     101              :     void SendKillMsgToTsd() const;
     102              : 
     103              :     void SetOpExecuteTimeOut(const uint32_t timeOutEn, const uint32_t opExecuteTimeOut);
     104              :     void SetOpTimeoutFlag(const bool flag);
     105              :     int32_t Run();
     106              :     void StopMonitor();
     107              :     ~AicpuMonitor();
     108              :     void DisableModelTimeout();
     109              : 
     110              : private:
     111              :     AicpuMonitor();
     112              : 
     113              :     AicpuMonitor(const AicpuMonitor &) = delete;
     114              : 
     115              :     AicpuMonitor &operator = (const AicpuMonitor &) = delete;
     116              : 
     117              :     int32_t InitTimer();
     118              :     int32_t SetTaskTimeoutFlag();
     119              :     int32_t SetModelTimeoutFlag();
     120              :     void InitAsyncOpTimer();
     121              :     static void Work(AicpuMonitor *const monitor);
     122              :     void HandleTaskTimeout();
     123              :     void HandleModelTimeout();
     124              :     void HandleOpTimeout();
     125              : 
     126              :     uint32_t deviceId_;
     127              :     std::atomic<bool> taskTimeoutFlag_;
     128              :     bool modelTimeoutFlag_;
     129              :     std::unique_ptr<TaskInfoForMonitor[]> monitorTaskInfo_;
     130              : 
     131              :     // aicpu-cust-sd need too
     132              :     std::mutex mutex_;
     133              :     std::atomic<bool> done_;
     134              :     // op execute time out set by ts enable flag
     135              :     std::mutex setTimeOutMut_;
     136              :     std::atomic<bool> tsTimeoutEnable_;
     137              :     // op execute time out value set by ts
     138              :     std::atomic<uint32_t> tsOpTimeOut_;
     139              : 
     140              :     uint64_t taskTimeout_;
     141              :     std::atomic<uint64_t> taskTimeoutTick_;
     142              :     uint64_t modelTimeoutTick_;
     143              :     std::unique_ptr<TaskTimer[]> aicpuTaskTimer_;
     144              :     std::unique_ptr<TaskTimer[]> aicpuStreamTaskTimer_;
     145              :     std::unique_ptr<TaskTimer[]> modelTimer_;
     146              :     std::map<aicpu::TimerHandle, std::shared_ptr<TaskTimer>> opTimer_;
     147              : 
     148              :     std::vector<std::thread> th_;
     149              :     sem_t sem_;
     150              :     bool running_;
     151              :     uint32_t aicpuCoreNum_;
     152              :     bool online_; // true when exist in process mode; false when exist in thread mode
     153              :     std::atomic<bool> opTimeoutFlag_;
     154              :     std::mutex opTimerMapMutex_;
     155              : };
     156              : }
     157              : 
     158              : #endif // CORE_AICPUSD_MONITOR_H
        

Generated by: LCOV version 2.0-1