From 95634b5ec4960df018e282467dfeb7eb823610fa Mon Sep 17 00:00:00 2001 From: mei-feiyao <1332490378@qq.com> Date: Wed, 20 Aug 2025 17:09:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=95=C3=A8=E4=B8=8A=E6=8A=A5=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E6=95=B0=E6=8D=AE=EF=BC=8C=E8=80=8C=E9=9D=9E=E6=B1=87?= =?UTF-8?q?=E6=80=BB=E6=8E=A5=C3=A5=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynolog/src/tracing/IPCMonitor.cpp | 4 +++ .../ipc_monitor/metric/MetricApiProcess.cpp | 21 ++++++----- .../ipc_monitor/metric/MetricApiProcess.h | 1 + .../metric/MetricCommunicationProcess.cpp | 21 ++++------- .../metric/MetricCommunicationProcess.h | 2 +- .../ipc_monitor/metric/MetricHcclProcess.cpp | 21 ++++------- .../ipc_monitor/metric/MetricHcclProcess.h | 2 +- .../metric/MetricKernelProcess.cpp | 23 ++++-------- .../ipc_monitor/metric/MetricKernelProcess.h | 1 + .../ipc_monitor/metric/MetricMarkProcess.cpp | 35 ++++++++++--------- .../ipc_monitor/metric/MetricMarkProcess.h | 1 + .../metric/MetricMemCpyProcess.cpp | 19 +++------- .../ipc_monitor/metric/MetricMemProcess.cpp | 20 ++++------- .../metric/MetricMemSetProcess.cpp | 20 ++++------- 14 files changed, 78 insertions(+), 113 deletions(-) diff --git a/msmonitor/dynolog_npu/dynolog/src/tracing/IPCMonitor.cpp b/msmonitor/dynolog_npu/dynolog/src/tracing/IPCMonitor.cpp index 85a71d957f..b8ccd7aa02 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/metric/MetricApiProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp index e39d119a23..fe20ab8632 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp @@ -28,6 +28,7 @@ std::string ApiMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "API"; + jsonMsg["name"] = apiName; jsonMsg["deviceId"] = -1; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -57,15 +58,19 @@ std::vector MetricApiProcess::AggregatedData() copyRecords = std::move(records); records.clear(); } + if (copyRecords.empty()) { + return {}; + } + std::vector ans; ApiMetric apiMetric{}; - auto ans = std::accumulate(copyRecords.begin(), copyRecords.end(), 0ULL, - [](uint64_t acc, std::shared_ptr api) { - return acc + api->end - api->start; - }); - apiMetric.duration = ans; - apiMetric.deviceId = -1; - apiMetric.timestamp = getCurrentTimestamp64(); - return {apiMetric}; + for (const auto& record : copyRecords) { + apiMetric.apiName = record->name ? record->name : "Unknown"; + apiMetric.duration = record->end - record->start; + apiMetric.timestamp = record->start; + apiMetric.deviceId = -1; + ans.emplace_back(apiMetric); + } + return ans; } void MetricApiProcess::SendProcessMessage() diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.h b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.h index c9357e58ee..d065fea654 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.h +++ b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.h @@ -26,6 +26,7 @@ namespace ipc_monitor { namespace metric { struct ApiMetric { + std::string apiName; uint64_t duration; uint64_t timestamp; uint32_t deviceId; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp index 9126b1dfd1..b234bddd5e 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp @@ -26,6 +26,7 @@ std::string CommunicationMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "Communication"; + jsonMsg["name"] = commOpName; jsonMsg["deviceId"] = deviceId; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -58,21 +59,13 @@ std::vector MetricCommunicationProcess::AggregatedData() if (copyRecords.empty()) { return {}; } - std::unordered_map>> deviceId2CommunicationData = - groupby(copyRecords, [](const std::shared_ptr& data) -> std::uint32_t { - return data->ds.deviceId; - }); std::vector ans; - auto curTimestamp = getCurrentTimestamp64(); - for (auto& pair: deviceId2CommunicationData) { - CommunicationMetric communicationMetric{}; - auto& communicationDatas = pair.second; - communicationMetric.duration = std::accumulate(communicationDatas.begin(), communicationDatas.end(), 0ULL, - [](uint64_t acc, std::shared_ptr communication) { - return acc + communication->end - communication->start; - }); - communicationMetric.deviceId = pair.first; - communicationMetric.timestamp = curTimestamp; + CommunicationMetric communicationMetric{}; + for (const auto& record : copyRecords) { + communicationMetric.commOpName = record->commName ? record->commName : "Unknown"; + communicationMetric.duration = record->end - record->start; + communicationMetric.deviceId = record->ds.deviceId; + communicationMetric.timestamp = record->start; ans.emplace_back(communicationMetric); } return ans; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.h b/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.h index 745652f8ef..9bf0b11d30 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.h +++ b/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.h @@ -26,7 +26,7 @@ namespace ipc_monitor { namespace metric { struct CommunicationMetric { - std::string kindName; + std::string commOpName; uint64_t duration; uint64_t timestamp; uint32_t deviceId; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp index 4ebf7d7b6f..14cc27faee 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp @@ -26,6 +26,7 @@ std::string HcclMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "Hccl"; + jsonMsg["name"] = hcclOpName; jsonMsg["deviceId"] = deviceId; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -58,21 +59,13 @@ std::vector MetricHcclProcess::AggregatedData() if (copyRecords.empty()) { return {}; } - std::unordered_map>> deviceId2HcclData = - groupby(copyRecords, [](const std::shared_ptr& data) -> std::uint32_t { - return data->ds.deviceId; - }); std::vector ans; - auto curTimestamp = getCurrentTimestamp64(); - for (auto& pair: deviceId2HcclData) { - HcclMetric hcclMetric{}; - auto& hcclDatas = pair.second; - hcclMetric.duration = std::accumulate(hcclDatas.begin(), hcclDatas.end(), 0ULL, - [](uint64_t acc, std::shared_ptr hccl) { - return acc + hccl->end - hccl->start; - }); - hcclMetric.deviceId = pair.first; - hcclMetric.timestamp = curTimestamp; + HcclMetric hcclMetric{}; + for (const auto& record : copyRecords) { + hcclMetric.hcclOpName = record->name ? record->name : "Unknown"; + hcclMetric.duration = record->end - record->start; + hcclMetric.deviceId = record->ds.deviceId; + hcclMetric.timestamp = record->start; ans.emplace_back(hcclMetric); } return ans; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.h b/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.h index 2c846949d3..25bc40fb18 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.h +++ b/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.h @@ -26,7 +26,7 @@ namespace ipc_monitor { namespace metric { struct HcclMetric { - std::string kindName; + std::string hcclOpName; uint64_t duration; uint64_t timestamp; uint32_t deviceId; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp index 4013d841b4..f28fa20b9a 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp @@ -25,6 +25,7 @@ std::string KernelMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "Kernel"; + jsonMsg["name"] = kernelName; jsonMsg["deviceId"] = deviceId; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -57,25 +58,15 @@ std::vector MetricKernelProcess::AggregatedData() if (copyRecords.empty()) { return {}; } - std::unordered_map>> deviceId2KernelData = - groupby(copyRecords, [](const std::shared_ptr& data) -> std::uint32_t { - return data->ds.deviceId; - }); std::vector ans; - auto curTimestamp = getCurrentTimestamp64(); - for (auto& pair: deviceId2KernelData) { - auto deviceId = pair.first; - auto& kernelDatas = pair.second; - KernelMetric kernelMetric{}; - kernelMetric.duration = std::accumulate(kernelDatas.begin(), kernelDatas.end(), 0ULL, - [](uint64_t acc, std::shared_ptr kernel) { - return acc + kernel->end - kernel->start; - }); - kernelMetric.deviceId = deviceId; - kernelMetric.timestamp = curTimestamp; + KernelMetric kernelMetric{}; + for (const auto& record : copyRecords) { + kernelMetric.kernelName = record->name ? record->name : "Unknown"; + kernelMetric.duration = record->end - record->start; + kernelMetric.deviceId = record->ds.deviceId; + kernelMetric.timestamp = record->start; ans.emplace_back(kernelMetric); } - return ans; } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.h b/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.h index 9bd034283e..b2804c2afc 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.h +++ b/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.h @@ -25,6 +25,7 @@ namespace ipc_monitor { namespace metric { struct KernelMetric { + std::string kernelName; uint64_t duration; uint64_t timestamp; uint32_t deviceId; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp index 2e92ee736b..75dc9ee60e 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) { @@ -116,24 +118,23 @@ std::vector MetricMarkProcess::AggregatedData() rangeDatas.emplace_back(rangeMark); } } - - 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 3835bda859..35c9ddf700 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/metric/MetricMemCpyProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp index aaa4fd6268..0eeabf82af 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp @@ -25,6 +25,7 @@ std::string MemCpyMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "MemCpy"; + jsonMsg["name"] = "MemCpy"; jsonMsg["deviceId"] = deviceId; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -57,22 +58,12 @@ std::vector MetricMemCpyProcess::AggregatedData() if (copyRecords.empty()) { return {}; } - std::unordered_map>> deviceId2Memcpy = - groupby(copyRecords, [](const std::shared_ptr& data) -> std::uint32_t { - return data->deviceId; - }); std::vector ans; - auto curTimestamp = getCurrentTimestamp64(); - for (auto& pair: deviceId2Memcpy) { - auto deviceId = pair.first; + for (const auto& record : copyRecords) { MemCpyMetric memCpyMetric{}; - auto& memCpyDatas = pair.second; - memCpyMetric.duration = std::accumulate(memCpyDatas.begin(), memCpyDatas.end(), 0ULL, - [](uint64_t acc, std::shared_ptr memcpy) { - return acc + memcpy->end - memcpy->start; - }); - memCpyMetric.deviceId = deviceId; - memCpyMetric.timestamp = curTimestamp; + memCpyMetric.duration = record->end - record->start; + memCpyMetric.deviceId = record->deviceId; + memCpyMetric.timestamp = record->start; ans.emplace_back(memCpyMetric); } return ans; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp index 3f51476595..4a77325842 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp @@ -25,6 +25,7 @@ std::string MemMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "Memory"; + jsonMsg["name"] = "Memory"; jsonMsg["deviceId"] = deviceId; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -57,22 +58,13 @@ std::vector MetricMemProcess::AggregatedData() if (copyRecords.empty()) { return {}; } - std::unordered_map>> deviceId2MemData = - groupby(copyRecords, [](const std::shared_ptr& data) -> std::uint32_t { - return data->deviceId; - }); std::vector ans; - auto curTimestamp = getCurrentTimestamp64(); - for (auto& pair: deviceId2MemData) { - auto deviceId = pair.first; - auto& memDatas = pair.second; + for (const auto& record : copyRecords) { MemMetric memMetric{}; - memMetric.duration = std::accumulate(memDatas.begin(), memDatas.end(), 0ULL, - [](uint64_t acc, std::shared_ptr mem) { - return acc + mem->end - mem->start; - }); - memMetric.deviceId = deviceId; - memMetric.timestamp = curTimestamp; + memMetric.name = "Memory"; + memMetric.duration = record->end - record->start; + memMetric.timestamp = record->start; + memMetric.deviceId = record->deviceId; ans.emplace_back(memMetric); } return ans; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp index f165ae2d7b..17f85d306b 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp @@ -25,6 +25,7 @@ std::string MemSetMetric::seriesToJson() { nlohmann::json jsonMsg; jsonMsg["kind"] = "MemSet"; + jsonMsg["name"] = "MemSet"; jsonMsg["deviceId"] = deviceId; jsonMsg["duration"] = duration; jsonMsg["timestamp"] = timestamp; @@ -57,22 +58,13 @@ std::vector MetricMemSetProcess::AggregatedData() if (copyRecords.empty()) { return {}; } - std::unordered_map>> deviceId2MemsetData = - groupby(copyRecords, [](const std::shared_ptr& data) -> std::uint32_t { - return data->deviceId; - }); std::vector ans; - auto curTimestamp = getCurrentTimestamp64(); - for (auto& pair: deviceId2MemsetData) { + for (const auto& record : copyRecords) { MemSetMetric memSetMetric{}; - auto deviceId = pair.first; - auto& memSetDatas = pair.second; - memSetMetric.duration = std::accumulate(memSetDatas.begin(), memSetDatas.end(), 0ULL, - [](uint64_t acc, std::shared_ptr memSet) { - return acc + memSet->end - memSet->start; - }); - memSetMetric.deviceId = deviceId; - memSetMetric.timestamp = curTimestamp; + memSetMetric.name = "MemSet"; + memSetMetric.duration = record->end - record->start; + memSetMetric.timestamp = record->start; + memSetMetric.deviceId = record->deviceId; ans.emplace_back(memSetMetric); } return ans; -- Gitee