diff --git a/msmonitor/dynolog_npu/dynolog/src/DynologTensorBoardLogger.cpp b/msmonitor/dynolog_npu/dynolog/src/DynologTensorBoardLogger.cpp index a707cf9b91bb86826262cbe6a2b94e1cc3187172..5d6ae0d03edf1f74ae4f6537e2206c0527d7a581 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 fea6c99e4717a1c4a7a19a5536d8a350bd8e2222..e39d119a238352a27d1bcffb751f7216014139f1 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 f9f80680926242b112be6d5d0577c73bc77856f5..9126b1dfd13721e4f679c6cebe887dcfa47e125f 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 9f19c602cd479fe13baed43ee34b798771310b64..4ebf7d7b6faea5a457466bc2aab369e089c58a27 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 359931ca991a4db3000b9d0644927c46a305ba98..4013d841b4cff860d4934a618b3c64a9b32ee718 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 ac83a3fd06d4c8c499ecfdc6cd9041d30e9258e1..2e92ee736b5d3e4cde19e369a73ee7d1a019169b 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 ea2e3cff26404d76546c2bd2ac75b840b7c03f2c..aaa4fd62682a07442b3bd2dcb21462affa5244e8 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 71f81c45170264609500c0366506abf97529da7a..3f51476595a4fcfe29e4938c1e64d94a35815913 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 34a1e52894eec58997d367845b1cda26f0bd3853..f165ae2d7bdf8b82d0028a604c80fe617168c55c 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 da517ba9df60eb645b4b43d816e005147315eb2a..e92fe9c956ee0f1b51387eb6f183e0c19d4d29ec 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) {