From 980dc15df9eb11c59638e2337410866074119769 Mon Sep 17 00:00:00 2001 From: Gallium Date: Mon, 21 Jul 2025 15:41:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=85=A8=E9=97=AE=E9=A2=98=E6=95=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynolog/src/DynologTensorBoardLogger.cpp | 21 ++++++++++++++----- .../ipc_monitor/metric/MetricApiProcess.cpp | 10 ++++----- .../metric/MetricCommunicationProcess.cpp | 10 ++++----- .../ipc_monitor/metric/MetricHcclProcess.cpp | 10 ++++----- .../metric/MetricKernelProcess.cpp | 10 ++++----- .../ipc_monitor/metric/MetricMarkProcess.cpp | 10 ++++----- .../metric/MetricMemCpyProcess.cpp | 10 ++++----- .../ipc_monitor/metric/MetricMemProcess.cpp | 10 ++++----- .../metric/MetricMemSetProcess.cpp | 10 ++++----- msmonitor/plugin/ipc_monitor/utils.h | 15 +++++++++++++ 10 files changed, 71 insertions(+), 45 deletions(-) diff --git a/msmonitor/dynolog_npu/dynolog/src/DynologTensorBoardLogger.cpp b/msmonitor/dynolog_npu/dynolog/src/DynologTensorBoardLogger.cpp index a707cf9b91..5d6ae0d03e 100644 --- a/msmonitor/dynolog_npu/dynolog/src/DynologTensorBoardLogger.cpp +++ b/msmonitor/dynolog_npu/dynolog/src/DynologTensorBoardLogger.cpp @@ -38,12 +38,10 @@ DynologTensorBoardLogger::DynologTensorBoardLogger(const std::string& metric_log : logPath_(metric_log_dir) { if (!validateLogDir(logPath_)) { - std::runtime_error("Unable to record logs in the target folder"); + throw std::runtime_error("Unable to record logs in the target folder"); } - - // logger = std::make_unique(FLAGS_metric_log_dir); - LOG(INFO) << "Initialized tensorboard logger on = " - << FLAGS_metric_log_dir; + + LOG(INFO) << "Initialized tensorboard logger on = " << logPath_; } void DynologTensorBoardLogger::finalize() @@ -65,6 +63,19 @@ bool DynologTensorBoardLogger::validateLogDir(const std::string& path) { std::filesystem::path log_path(path); + static const std::unordered_map INVALID_CHAR = { + {"\n", "\\n"}, {"\f", "\\f"}, {"\r", "\\r"}, {"\b", "\\b"}, {"\t", "\\t"}, + {"\v", "\\v"}, {"\u007F", "\\u007F"}, {"\"", "\\\""}, {"'", "\'"}, + {"\\", "\\\\"}, {"%", "\\%"}, {">", "\\>"}, {"<", "\\<"}, {"|", "\\|"}, + {"&", "\\&"}, {"$", "\\$"}, {";", "\\;"}, {"`", "\\`"} + }; + for (auto &item: INVALID_CHAR) { + if (path.find(item.first) != std::string::npos) { + LOG(ERROR) << "The path contains invalid character: " << item.second; + return false; + } + } + if (!std::filesystem::exists(log_path)) { LOG(ERROR) << "Error: Path does not exist: " << path; return false; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp index fea6c99e47..e39d119a23 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricApiProcess.cpp @@ -37,15 +37,15 @@ std::string ApiMetric::seriesToJson() void MetricApiProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityApi* apiData = ReinterpretConvert(record); - msptiActivityApi* tmp = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityApi), ALIGN_SIZE)); - if (tmp == nullptr || memcpy_s(tmp, sizeof(msptiActivityApi), apiData, sizeof(msptiActivityApi)) != EOK) { - MsptiFree(ReinterpretConvert(tmp)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityApi), apiData, sizeof(msptiActivityApi)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(tmp); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp index f9f8068092..9126b1dfd1 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricCommunicationProcess.cpp @@ -35,15 +35,15 @@ std::string CommunicationMetric::seriesToJson() void MetricCommunicationProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityCommunication* communicationData = ReinterpretConvert(record); - msptiActivityCommunication* tmp = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityCommunication), ALIGN_SIZE)); - if (tmp == nullptr || memcpy_s(tmp, sizeof(msptiActivityCommunication), communicationData, sizeof(msptiActivityCommunication)) != EOK) { - MsptiFree(ReinterpretConvert(tmp)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityCommunication), communicationData, sizeof(msptiActivityCommunication)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(tmp); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp index 9f19c602cd..4ebf7d7b6f 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricHcclProcess.cpp @@ -35,15 +35,15 @@ std::string HcclMetric::seriesToJson() void MetricHcclProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityHccl* hcclData = ReinterpretConvert(record); - msptiActivityHccl* tmp = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityHccl), ALIGN_SIZE)); - if (tmp == nullptr || memcpy_s(tmp, sizeof(msptiActivityHccl), hcclData, sizeof(msptiActivityHccl)) != EOK) { - MsptiFree(ReinterpretConvert(tmp)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityHccl), hcclData, sizeof(msptiActivityHccl)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(tmp); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp index 359931ca99..4013d841b4 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricKernelProcess.cpp @@ -34,15 +34,15 @@ std::string KernelMetric::seriesToJson() void MetricKernelProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityKernel* kernel = ReinterpretConvert(record); - msptiActivityKernel* ptr = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityKernel), ALIGN_SIZE)); - if (ptr == nullptr || memcpy_s(ptr, sizeof(msptiActivityKernel), kernel, sizeof(msptiActivityKernel)) != EOK) { - MsptiFree(ReinterpretConvert(ptr)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityKernel), kernel, sizeof(msptiActivityKernel)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(ptr); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp index ac83a3fd06..2e92ee736b 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMarkProcess.cpp @@ -78,15 +78,15 @@ bool MetricMarkProcess::TransMarkData2Range(const std::vector(record); - msptiActivityMarker* tmp = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityMarker), ALIGN_SIZE)); - if (tmp == nullptr || memcpy_s(tmp, sizeof(msptiActivityMarker), markerData, sizeof(msptiActivityMarker)) != EOK) { - MsptiFree(ReinterpretConvert(tmp)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityMarker), markerData, sizeof(msptiActivityMarker)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(tmp); + records.emplace_back(std::move(tmp)); if (markerData->flag == MSPTI_ACTIVITY_FLAG_MARKER_START_WITH_DEVICE && markerData->sourceKind == MSPTI_ACTIVITY_SOURCE_KIND_HOST) { std::string domainStr = markerData->domain; diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp index ea2e3cff26..aaa4fd6268 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMemCpyProcess.cpp @@ -34,15 +34,15 @@ std::string MemCpyMetric::seriesToJson() void MetricMemCpyProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityMemcpy* kernel = ReinterpretConvert(record); - msptiActivityMemcpy* ptr = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityMemcpy), ALIGN_SIZE)); - if (ptr == nullptr || memcpy_s(ptr, sizeof(msptiActivityMemcpy), kernel, sizeof(msptiActivityMemcpy)) != EOK) { - MsptiFree(ReinterpretConvert(ptr)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityMemcpy), kernel, sizeof(msptiActivityMemcpy)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(ptr); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp index 71f81c4517..3f51476595 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMemProcess.cpp @@ -34,15 +34,15 @@ std::string MemMetric::seriesToJson() void MetricMemProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityMemory* mem = ReinterpretConvert(record); - msptiActivityMemory* ptr = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityMemory), ALIGN_SIZE)); - if (ptr == nullptr || memcpy_s(ptr, sizeof(msptiActivityMemory), mem, sizeof(msptiActivityMemory)) != EOK) { - MsptiFree(ReinterpretConvert(ptr)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityMemory), mem, sizeof(msptiActivityMemory)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(ptr); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp b/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp index 34a1e52894..f165ae2d7b 100644 --- a/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp +++ b/msmonitor/plugin/ipc_monitor/metric/MetricMemSetProcess.cpp @@ -34,15 +34,15 @@ std::string MemSetMetric::seriesToJson() void MetricMemSetProcess::ConsumeMsptiData(msptiActivity *record) { msptiActivityMemset* memSet = ReinterpretConvert(record); - msptiActivityMemset* ptr = ReinterpretConvert(MsptiMalloc(sizeof(msptiActivityMemset), ALIGN_SIZE)); - if (ptr == nullptr || memcpy_s(ptr, sizeof(msptiActivityMemset), memSet, sizeof(msptiActivityMemset)) != EOK) { - MsptiFree(ReinterpretConvert(ptr)); - LOG(ERROR) << "memcpy_s failed" << IPC_ERROR(ErrCode::MEMORY); + std::shared_ptr tmp; + MakeSharedPtr(tmp); + if (tmp == nullptr || memcpy_s(tmp.get(), sizeof(msptiActivityMemset), memSet, sizeof(msptiActivityMemset)) != EOK) { + LOG(ERROR) << "memcpy_s failed " << IPC_ERROR(ErrCode::MEMORY); return; } { std::unique_lock lock(dataMutex); - records.emplace_back(ptr); + records.emplace_back(std::move(tmp)); } } diff --git a/msmonitor/plugin/ipc_monitor/utils.h b/msmonitor/plugin/ipc_monitor/utils.h index da517ba9df..e92fe9c956 100644 --- a/msmonitor/plugin/ipc_monitor/utils.h +++ b/msmonitor/plugin/ipc_monitor/utils.h @@ -23,6 +23,7 @@ #include #include #include +#include namespace dynolog_npu { namespace ipc_monitor { @@ -75,6 +76,20 @@ inline T ReinterpretConvert(V ptr) { return reinterpret_cast(ptr); } + +template +inline void MakeSharedPtr(std::shared_ptr& ptr, Args&&... args) +{ + try { + ptr = std::make_shared(std::forward(args)...); + } catch(std::bad_alloc& e) { + throw; + } catch (...) { + ptr = nullptr; + return; + } +} + template auto groupby(const Container& vec, KeyFunc keyFunc) { -- Gitee