diff --git a/systrace/src/cann/cann_hook.c b/systrace/src/cann/cann_hook.c index 754c1b2f7db4dcd17f16447547455de35171ccbb..a74b2cb45627629a17190c2b15ba386f7ef23cfc 100644 --- a/systrace/src/cann/cann_hook.c +++ b/systrace/src/cann/cann_hook.c @@ -357,6 +357,10 @@ static void collect_stack_frames(MemAllocEntry *entry) static void add_mem_alloc_entry(void *pp, size_t size) { + if (!checkAndUpdateTimer(2)) + { + return; + } ThreadData *td = get_thread_data(); MemAllocEntry *entry = malloc(sizeof(MemAllocEntry)); @@ -380,6 +384,10 @@ static void add_mem_alloc_entry(void *pp, size_t size) static void add_mem_free_entry(void *pp) { + if (!checkAndUpdateTimer(2)) + { + return; + } ThreadData *td = get_thread_data(); MemFreeEntry *entry = malloc(sizeof(MemFreeEntry)); @@ -427,110 +435,5 @@ drvError_t halMemFree(void *pp) write_protobuf_to_file(); - return ret; -} - -drvError_t aclrtMalloc(void **devPtr, size_t size, aclrtMemMallocPolicy policy) -{ - if (!orig_aclrtMalloc) - { - init_mem_trace(); - } - int ret = orig_aclrtMalloc(devPtr, size, policy); - if (ret == 0 && devPtr && *devPtr) - { - add_mem_alloc_entry(*devPtr, size); - } - - write_protobuf_to_file(); - - return ret; -} - -drvError_t aclrtMallocCached(void **devPtr, size_t size, - aclrtMemMallocPolicy policy) -{ - if (!orig_aclrtMallocCached) - { - init_mem_trace(); - } - int ret = orig_aclrtMallocCached(devPtr, size, policy); - if (ret == 0 && devPtr && *devPtr) - { - add_mem_alloc_entry(*devPtr, size); - } - - write_protobuf_to_file(); - - return ret; -} - -drvError_t aclrtMallocAlign32(void **devPtr, size_t size, - aclrtMemMallocPolicy policy) -{ - if (!orig_aclrtMallocAlign32) - { - init_mem_trace(); - } - int ret = orig_aclrtMallocAlign32(devPtr, size, policy); - if (ret == 0 && devPtr && *devPtr) - { - add_mem_alloc_entry(*devPtr, size); - } - - write_protobuf_to_file(); - - return ret; -} - -drvError_t aclrtFree(void *devPtr) -{ - if (!orig_aclrtFree) - { - init_mem_trace(); - } - int ret = orig_aclrtFree(devPtr); - if (ret == 0 && devPtr) - { - add_mem_free_entry(devPtr); - } - - write_protobuf_to_file(); - - return ret; -} - -drvError_t halMemCreate(void **handle, size_t size, void *prop, uint64_t flag) -{ - if (!orig_halMemCreate) - { - init_mem_trace(); - } - int ret = orig_halMemCreate(handle, size, prop, flag); - if (ret == 0 && handle && *handle) - { - add_mem_alloc_entry(*handle, size); - } - - write_protobuf_to_file(); - - return ret; -} - -drvError_t halMemRelease(void *handle) -{ - if (!orig_halMemRelease) - { - init_mem_trace(); - } - - int ret = orig_halMemRelease(handle); - if (ret == 0 && handle) - { - add_mem_free_entry(handle); - } - - write_protobuf_to_file(); - return ret; } \ No newline at end of file diff --git a/systrace/src/mspti/mspti_tracker.cpp b/systrace/src/mspti/mspti_tracker.cpp index 4f85ecd3a57f1b8579542e20accd04355f7b6671..15c596a0654f4b5a1254014597b13bda08f10bb2 100644 --- a/systrace/src/mspti/mspti_tracker.cpp +++ b/systrace/src/mspti/mspti_tracker.cpp @@ -25,7 +25,24 @@ MSPTITracker::MSPTITracker() std::make_unique(file_name); msptiSubscribe(&subscriber, nullptr, nullptr); msptiActivityRegisterCallbacks(UserBufferRequest, UserBufferComplete); - msptiActivityEnable(MSPTI_ACTIVITY_KIND_MARKER); + mspti_monitor_thread = std::thread(&MSPTITracker::collect, this); +} + +void MSPTITracker::collect() +{ + while (should_run_) { + bool should_collect = checkAndUpdateTimer(1); + if (should_collect && !is_collecting_.load()) { + msptiActivityEnable(MSPTI_ACTIVITY_KIND_MARKER); + is_collecting_.store(true); + } + else if (!should_collect && is_collecting_.load()) { + msptiActivityDisable(MSPTI_ACTIVITY_KIND_MARKER); + is_collecting_.store(false); + } + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } } MSPTITracker::~MSPTITracker() @@ -33,6 +50,10 @@ MSPTITracker::~MSPTITracker() msptiActivityFlushAll(1); msptiActivityDisable(MSPTI_ACTIVITY_KIND_MARKER); finish(); + should_run_ = false; + if (mspti_monitor_thread.joinable()) { + mspti_monitor_thread.join(); + } } MSPTITracker &MSPTITracker::getInstance() diff --git a/systrace/src/mspti/mspti_tracker.hpp b/systrace/src/mspti/mspti_tracker.hpp index a1c75bcda7e0aead480b0d09e5b43cf42f012775..1109fdc3c31a3aa819408c77df94f38a4da18df7 100644 --- a/systrace/src/mspti/mspti_tracker.hpp +++ b/systrace/src/mspti/mspti_tracker.hpp @@ -12,6 +12,9 @@ class MSPTITracker msptiSubscriberHandle subscriber; std::unique_ptr hcclFileWriter; std::atomic requestedCount{0}; + std::thread mspti_monitor_thread; + std::atomic is_collecting_{false}; + std::atomic should_run_{true}; MSPTITracker(); ~MSPTITracker(); @@ -30,4 +33,5 @@ class MSPTITracker size_t *maxNumRecords); static void UserBufferComplete(uint8_t *buffer, size_t size, size_t validSize); + void collect(); }; \ No newline at end of file