diff --git a/msmonitor/dynolog_npu/dynolog/src/tracing/IPCMonitor.cpp b/msmonitor/dynolog_npu/dynolog/src/tracing/IPCMonitor.cpp index 85a71d957f9054fccff233843cbeb79cab2f6362..b8ccd7aa023c146f12187473179838875287a05d 100644 --- a/msmonitor/dynolog_npu/dynolog/src/tracing/IPCMonitor.cpp +++ b/msmonitor/dynolog_npu/dynolog/src/tracing/IPCMonitor.cpp @@ -102,6 +102,10 @@ void IPCMonitor::LogData(const nlohmann::json& result) auto domain = result["domain"].get(); logger_->logStr("domain", domain); } + if (result.contains("name") && result["name"].is_string()) { + auto name = result["name"].get(); + logger_->logStr("name", name); + } logger_->finalize(); } diff --git a/msmonitor/plugin/ipc_monitor/DynoLogNpuMonitor.cpp b/msmonitor/plugin/ipc_monitor/DynoLogNpuMonitor.cpp index 7774358177b087019ed3c5c64b2adc981bc11b73..12da158ade7b0b1b263359569fe0cc663f50c06e 100644 --- a/msmonitor/plugin/ipc_monitor/DynoLogNpuMonitor.cpp +++ b/msmonitor/plugin/ipc_monitor/DynoLogNpuMonitor.cpp @@ -36,6 +36,7 @@ DynoLogNpuMonitor::DynoLogNpuMonitor() fprintf(stderr, "Failed to create log path, log will not record\n"); } } + msptiActivityDisableMarkerDomain("communication"); // filter inner communication marker data for now } bool DynoLogNpuMonitor::Init() diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp index e39d119a238352a27d1bcffb751f7216014139f1..3998d2d5c22fb798d2bf605c38e6909d83b8e3f1 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp @@ -57,6 +57,9 @@ std::vector MetricApiProcess::AggregatedData() copyRecords = std::move(records); records.clear(); } + if (copyRecords.empty()) { + return {}; + } ApiMetric apiMetric{}; auto ans = std::accumulate(copyRecords.begin(), copyRecords.end(), 0ULL, [](uint64_t acc, std::shared_ptr api) { diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp index 2e92ee736b5d3e4cde19e369a73ee7d1a019169b..458be03f3cdd9b6f959fb2fe1c4e579f1f46b045 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp @@ -34,6 +34,7 @@ std::string MarkMetric::seriesToJson() jsonMsg["kind"] = "Marker"; jsonMsg["deviceId"] = deviceId; jsonMsg["domain"] = domain; + jsonMsg["name"] = name; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; return jsonMsg.dump(); @@ -53,6 +54,7 @@ bool MetricMarkProcess::TransMarkData2Range(const std::vectortimestamp; } else { rangemarkData.start = activityMarker->timestamp; + rangemarkData.name = activityMarker->name; } } if (activityMarker->flag == MSPTI_ACTIVITY_FLAG_MARKER_END_WITH_DEVICE) { @@ -117,23 +119,23 @@ std::vector MetricMarkProcess::AggregatedData() } } - std::unordered_map> domain2RangeData = - groupby(rangeDatas, [](const RangeMarkData& data) -> std::string { - return data.domain + std::to_string(data.deviceId); - }); std::vector ans; - for (auto& pair: domain2RangeData) { - MarkMetric markMetric{}; - auto domainName = pair.first; - auto rangeDatas = pair.second; - markMetric.deviceId = rangeDatas[0].deviceId; - markMetric.domain = domainName; - markMetric.timestamp = getCurrentTimestamp64(); - markMetric.duration = std::accumulate(rangeDatas.begin(), rangeDatas.end(), 0ULL, - [](uint64_t acc, const RangeMarkData& rangeData) { - return acc + rangeData.deviceEnd - rangeData.deviceStart; - }); - ans.emplace_back(markMetric); + MarkMetric hostMarkMetric{}; + MarkMetric devMarkMetric{}; + for (const auto& data : rangeDatas) { + hostMarkMetric.name = data.name; + hostMarkMetric.domain = data.domain; + hostMarkMetric.deviceId = -1; + hostMarkMetric.duration = data.end - data.start; + hostMarkMetric.timestamp = data.start; + ans.emplace_back(hostMarkMetric); + + devMarkMetric.name = data.name; + devMarkMetric.domain = data.domain; + devMarkMetric.deviceId = data.deviceId; + devMarkMetric.duration = data.deviceEnd - data.deviceStart; + devMarkMetric.timestamp = data.deviceStart; + ans.emplace_back(devMarkMetric); } return ans; } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.h b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.h index 3835bda859b9e4f7a530f1165684146a122f4b4e..35c9ddf700e349283e6b1b1880dffe2fed5a4090 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.h +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.h @@ -36,6 +36,7 @@ public: }; struct RangeMarkData { + std::string name; std::string domain; uint64_t duration; uint64_t start{0}; diff --git a/msmonitor/plugin/ipc_monitor/mspti_monitor/mspti.h b/msmonitor/plugin/ipc_monitor/mspti_monitor/mspti.h index 17831575c821c00c52772618e7c698d76d8448e0..baa8a201dd2840852bfce5c407fa43412077aeab 100644 --- a/msmonitor/plugin/ipc_monitor/mspti_monitor/mspti.h +++ b/msmonitor/plugin/ipc_monitor/mspti_monitor/mspti.h @@ -286,6 +286,8 @@ msptiResult msptiActivityEnable(msptiActivityKind kind); msptiResult msptiActivityDisable(msptiActivityKind kind); msptiResult msptiActivityGetNextRecord(uint8_t *buffer, size_t validBufferSizeBytes, msptiActivity **record); msptiResult msptiActivityFlushAll(uint32_t flag); +msptiResult msptiActivityEnableMarkerDomain(const char* name); +msptiResult msptiActivityDisableMarkerDomain(const char* name); #ifdef __cplusplus } diff --git a/msmonitor/plugin/stub/mspti.cpp b/msmonitor/plugin/stub/mspti.cpp index db05f209275f0702f50f6d33fe5d5fb6aa1b2732..566b4b83f9e9a9f79645a9c6e21cbaa0584af2a6 100644 --- a/msmonitor/plugin/stub/mspti.cpp +++ b/msmonitor/plugin/stub/mspti.cpp @@ -50,3 +50,13 @@ msptiResult msptiActivityFlushAll(uint32_t flag) { return MSPTI_SUCCESS; } + +msptiResult msptiActivityEnableMarkerDomain(const char* name) +{ + return MSPTI_SUCCESS; +} + +msptiResult msptiActivityDisableMarkerDomain(const char* name) +{ + return MSPTI_SUCCESS; +}