From 990c90994588b4ac9c49f342a94e1935e7c763a5 Mon Sep 17 00:00:00 2001 From: Liangliang He Date: Thu, 11 Jan 2018 13:00:09 +0800 Subject: [PATCH] Add memory usage logging --- mace/core/BUILD | 2 + mace/core/net.cc | 2 + .../core/runtime/opencl/opencl_development.cc | 1 + mace/core/runtime/opencl/opencl_production.cc | 1 + mace/utils/BUILD | 1 + mace/utils/memory_logging.h | 98 +++++++++++++++++++ tools/bazel-adb-run.sh | 1 + 7 files changed, 106 insertions(+) create mode 100644 mace/utils/memory_logging.h diff --git a/mace/core/BUILD b/mace/core/BUILD index 97cf8dd1..81b731d7 100644 --- a/mace/core/BUILD +++ b/mace/core/BUILD @@ -97,6 +97,7 @@ cc_library( deps = [ ":opencl_headers", "//mace/codegen:generated_opencl_dev", + "//mace/utils:logging", "//mace/utils:utils_hdrs", ], ) @@ -108,5 +109,6 @@ cc_library( deps = [ ":opencl_headers", "//mace/codegen:generated_opencl_prod", + "//mace/utils:logging", ], ) diff --git a/mace/core/net.cc b/mace/core/net.cc index 515d0e98..9afb008f 100644 --- a/mace/core/net.cc +++ b/mace/core/net.cc @@ -5,6 +5,7 @@ #include "mace/core/net.h" #include "mace/core/workspace.h" #include "mace/utils/utils.h" +#include "mace/utils/memory_logging.h" namespace mace { @@ -36,6 +37,7 @@ SimpleNet::SimpleNet(const std::shared_ptr op_registry, } bool SimpleNet::Run(RunMetadata *run_metadata) { + MACE_MEMORY_LOGGING_GUARD(); VLOG(1) << "Running net " << name_; for (auto iter = operators_.begin(); iter != operators_.end(); ++iter) { bool future_wait = (device_type_ == DeviceType::OPENCL && diff --git a/mace/core/runtime/opencl/opencl_development.cc b/mace/core/runtime/opencl/opencl_development.cc index b0ebcd24..266eceba 100644 --- a/mace/core/runtime/opencl/opencl_development.cc +++ b/mace/core/runtime/opencl/opencl_development.cc @@ -6,6 +6,7 @@ #include "mace/core/runtime/opencl/cl2_header.h" #include "mace/utils/utils.h" +#include "mace/utils/logging.h" namespace mace { diff --git a/mace/core/runtime/opencl/opencl_production.cc b/mace/core/runtime/opencl/opencl_production.cc index 11a793e7..265fcbef 100644 --- a/mace/core/runtime/opencl/opencl_production.cc +++ b/mace/core/runtime/opencl/opencl_production.cc @@ -4,6 +4,7 @@ #include #include "mace/core/runtime/opencl/cl2_header.h" +#include "mace/utils/logging.h" namespace mace { diff --git a/mace/utils/BUILD b/mace/utils/BUILD index fbd6e037..17883990 100644 --- a/mace/utils/BUILD +++ b/mace/utils/BUILD @@ -16,6 +16,7 @@ cc_library( ], hdrs = [ "logging.h", + "memory_logging.h", ], linkopts = if_android([ "-llog", diff --git a/mace/utils/memory_logging.h b/mace/utils/memory_logging.h new file mode 100644 index 00000000..e9d540bc --- /dev/null +++ b/mace/utils/memory_logging.h @@ -0,0 +1,98 @@ +// +// Copyright (c) 2017 XiaoMi All rights reserved. +// + +#ifndef MACE_UTILS_MEMORY_LOGGING_H_ +#define MACE_UTILS_MEMORY_LOGGING_H_ + +#include +#include "mace/utils/logging.h" + +namespace mace { + +class MallinfoChangeLogger { + public: + MallinfoChangeLogger(const std::string &name) : name_(name) { + prev_ = mallinfo(); + } + ~MallinfoChangeLogger() { + struct mallinfo curr = mallinfo(); + LogMallinfoChange(name_, curr, prev_); + } + + private: + const std::string name_; + struct mallinfo prev_; + + struct mallinfo LogMallinfoChange(const std::string &name, + const struct mallinfo curr, + const struct mallinfo prev) { + if (prev.arena != curr.arena) { + LOG(INFO) << "[" << name << "] " + << "Non-mmapped space allocated (bytes): " << curr.arena + << ", diff: " << ((int64_t)curr.arena - (int64_t)prev.arena); + } + if (prev.ordblks != curr.ordblks) { + LOG(INFO) << "[" << name << "] " + << "Number of free chunks: " << curr.ordblks << ", diff: " + << ((int64_t)curr.ordblks - (int64_t)prev.ordblks); + } + if (prev.smblks != curr.smblks) { + LOG(INFO) << "[" << name << "] " + << "Number of free fastbin blocks: " << curr.smblks + << ", diff: " << ((int64_t)curr.smblks - (int64_t)prev.smblks); + } + if (prev.hblks != curr.hblks) { + LOG(INFO) << "[" << name << "] " + << "Number of mmapped regions: " << curr.hblks + << ", diff: " << ((int64_t)curr.hblks - (int64_t)prev.hblks); + } + if (prev.hblkhd != curr.hblkhd) { + LOG(INFO) << "[" << name << "] " + << "Space allocated in mmapped regions (bytes): " << curr.hblkhd + << ", diff: " << ((int64_t)curr.hblkhd - (int64_t)prev.hblkhd); + } + if (prev.usmblks != curr.usmblks) { + LOG(INFO) << "[" << name << "] " + << "Maximum total allocated space (bytes): " << curr.usmblks + << ", diff: " + << ((int64_t)curr.usmblks - (int64_t)prev.usmblks); + } + if (prev.fsmblks != curr.fsmblks) { + LOG(INFO) << "[" << name << "] " + << "Space in freed fastbin blocks (bytes): " << curr.fsmblks + << ", diff: " + << ((int64_t)curr.fsmblks - (int64_t)prev.fsmblks); + } + if (prev.uordblks != curr.uordblks) { + LOG(INFO) << "[" << name << "] " + << "Total allocated space (bytes): " << curr.uordblks + << ", diff: " + << ((int64_t)curr.uordblks - (int64_t)prev.uordblks); + } + if (prev.fordblks != curr.fordblks) { + LOG(INFO) << "[" << name << "] " + << "Total free space (bytes): " << curr.fordblks << ", diff: " + << ((int64_t)curr.fordblks - (int64_t)prev.fordblks); + } + if (prev.keepcost != curr.keepcost) { + LOG(INFO) << "[" << name << "] " + << "Top-most, releasable space (bytes): " << curr.keepcost + << ", diff: " + << ((int64_t)curr.keepcost - (int64_t)prev.keepcost); + } + return curr; + } +}; + +#ifdef MACE_ENABLE_MEMORY_LOGGING +#define MACE_MEMORY_LOGGING_GUARD() \ + MallinfoChangeLogger mem_logger_##__line__(std::string(__FILE__) + ":" + \ + std::string(__func__)); +#else +#define MACE_MEMORY_LOGGING_GUARD() +#endif + +} // namespace mace + +#endif // MACE_UTILS_MEMORY_LOGGING_H_ diff --git a/tools/bazel-adb-run.sh b/tools/bazel-adb-run.sh index 0a418841..9c9033b1 100755 --- a/tools/bazel-adb-run.sh +++ b/tools/bazel-adb-run.sh @@ -29,6 +29,7 @@ python mace/python/tools/encrypt_opencl_codegen.py \ --cl_kernel_dir=./mace/kernels/opencl/cl/ --output_path=${CODEGEN_DIR}/opencl/opencl_encrypt_program.cc echo "Step 2: Generate version source" +mkdir -p ${CODEGEN_DIR}/version bash mace/tools/git/gen_version_source.sh ${CODEGEN_DIR}/version/version.cc echo "Step 3: Build target" -- GitLab