diff --git a/deps/oblib/src/lib/alloc/alloc_struct.cpp b/deps/oblib/src/lib/alloc/alloc_struct.cpp index 314dd376dd..be8766d6f5 100644 --- a/deps/oblib/src/lib/alloc/alloc_struct.cpp +++ b/deps/oblib/src/lib/alloc/alloc_struct.cpp @@ -12,6 +12,7 @@ #include "lib/alloc/alloc_struct.h" #include "lib/ob_define.h" +#include "lib/allocator/ob_mod_define.h" #include "lib/coro/co_var.h" #include "lib/oblog/ob_log.h" #include "lib/utility/ob_fast_convert.h" @@ -20,6 +21,10 @@ using namespace oceanbase; using namespace lib; using namespace common; +thread_local ObMemAttr ObMallocHookAttrGuard::tl_mem_attr(OB_SERVER_TENANT_ID, + "glibc_malloc", + ObCtxIds::GLIBC); + bool ObLabel::operator==(const ObLabel &other) const { bool bret = false; diff --git a/deps/oblib/src/lib/alloc/alloc_struct.h b/deps/oblib/src/lib/alloc/alloc_struct.h index 0299bd629c..cab4ac1731 100644 --- a/deps/oblib/src/lib/alloc/alloc_struct.h +++ b/deps/oblib/src/lib/alloc/alloc_struct.h @@ -588,6 +588,27 @@ private: char buf_[MAX_LEN + 1]; }; +class ObMallocHookAttrGuard +{ +public: + ObMallocHookAttrGuard(const ObMemAttr& attr) + : old_attr_(tl_mem_attr) + { + tl_mem_attr = attr; + } + ~ObMallocHookAttrGuard() + { + tl_mem_attr = old_attr_; + } + static ObMemAttr get_tl_mem_attr() + { + return tl_mem_attr; + } +private: + static thread_local ObMemAttr tl_mem_attr; + ObMemAttr old_attr_; +}; + } // end of namespace lib } // end of namespace oceanbase diff --git a/deps/oblib/src/lib/alloc/malloc_hook.cpp b/deps/oblib/src/lib/alloc/malloc_hook.cpp index 44336d2132..843e306388 100644 --- a/deps/oblib/src/lib/alloc/malloc_hook.cpp +++ b/deps/oblib/src/lib/alloc/malloc_hook.cpp @@ -20,9 +20,7 @@ using namespace oceanbase::common; using namespace oceanbase::lib; bool g_malloc_hook_inited = false; -thread_local ObMemAttr ObMallocHookAttrGuard::tl_mem_attr(OB_SERVER_TENANT_ID, - "glibc_malloc", - ObCtxIds::GLIBC); + void init_malloc_hook() { g_malloc_hook_inited = true; diff --git a/deps/oblib/src/lib/alloc/malloc_hook.h b/deps/oblib/src/lib/alloc/malloc_hook.h index 783e16036a..a8bdf57acf 100644 --- a/deps/oblib/src/lib/alloc/malloc_hook.h +++ b/deps/oblib/src/lib/alloc/malloc_hook.h @@ -20,31 +20,5 @@ inline bool& in_hook() thread_local bool in_hook = false; return in_hook; } -namespace oceanbase -{ -namespace lib -{ -class ObMallocHookAttrGuard -{ -public: - ObMallocHookAttrGuard(ObMemAttr& attr) - : old_attr_(tl_mem_attr) - { - tl_mem_attr = attr; - } - ~ObMallocHookAttrGuard() - { - tl_mem_attr = old_attr_; - } - static ObMemAttr get_tl_mem_attr() - { - return tl_mem_attr; - } -private: - static thread_local ObMemAttr tl_mem_attr; - ObMemAttr old_attr_; -}; -} -} #endif /* MALLOC_HOOK_H */ diff --git a/src/objit/src/CMakeLists.txt b/src/objit/src/CMakeLists.txt index 1e4c367dc7..9adc1cde51 100644 --- a/src/objit/src/CMakeLists.txt +++ b/src/objit/src/CMakeLists.txt @@ -9,7 +9,7 @@ file(GLOB_RECURSE objit_SRC "*.h" "*.cpp" "${CMAKE_CURRENT_SROUCE_DIR}/../includ add_definitions(-std=gnu++14) add_library(objit_objects OBJECT ${objit_SRC}) -target_link_libraries(objit_objects PRIVATE oblib_base_base objit_base) +target_link_libraries(objit_objects PRIVATE oblib_base_base ob_share objit_base) # Define a static library target named OBJIT_RAW. add_library(objit STATIC dummy.cpp) diff --git a/src/objit/src/ob_llvm_helper.cpp b/src/objit/src/ob_llvm_helper.cpp index 0588f93b14..18518e91cf 100644 --- a/src/objit/src/ob_llvm_helper.cpp +++ b/src/objit/src/ob_llvm_helper.cpp @@ -29,6 +29,8 @@ #include "lib/utility/ob_macro_utils.h" #include "lib/allocator/ob_malloc.h" #include "lib/container/ob_se_array.h" +#include "share/rc/ob_tenant_base.h" +#include "lib/alloc/malloc_hook.h" using namespace llvm; @@ -477,6 +479,7 @@ int ObLLVMSwitch::add_case(const ObLLVMValue &value, ObLLVMBasicBlock &block) ObLLVMHelper::~ObLLVMHelper() { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlJit")); final(); if (nullptr != jit_) { jit_->~ObOrcJit(); @@ -486,6 +489,7 @@ ObLLVMHelper::~ObLLVMHelper() int ObLLVMHelper::init() { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlJit")); int ret = OB_SUCCESS; if (nullptr == (jc_ = OB_NEWx(core::JitContext, (&allocator_)))) { @@ -507,6 +511,7 @@ int ObLLVMHelper::init() void ObLLVMHelper::final() { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlJit")); if (nullptr != jc_) { jc_->~JitContext(); allocator_.free(jc_); @@ -525,15 +530,18 @@ int ObLLVMHelper::initialize() void ObLLVMHelper::compile_module(bool optimization) { if (optimization) { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlCodeGen")); jc_->optimize(); LOG_INFO("================Optimized LLVM Module================"); dump_module(); } + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlJit")); jc_->compile(); } void ObLLVMHelper::dump_module() { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlCodeGen")); if (OB_ISNULL(jc_)) { //do nothing } else { @@ -546,6 +554,7 @@ void ObLLVMHelper::dump_module() void ObLLVMHelper::dump_debuginfo() { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlCodeGen")); if (OB_ISNULL(jit_) || jit_->get_debug_info_size() <= 0) { // do nothing ... } else { @@ -555,6 +564,7 @@ void ObLLVMHelper::dump_debuginfo() int ObLLVMHelper::verify_function(ObLLVMFunction &function) { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlCodeGen")); int ret = OB_SUCCESS; if (OB_ISNULL(jc_)) { ret = OB_NOT_INIT; @@ -571,6 +581,7 @@ int ObLLVMHelper::verify_function(ObLLVMFunction &function) int ObLLVMHelper::verify_module() { + lib::ObMallocHookAttrGuard malloc_guard(ObMemAttr(MTL_ID(), "PlCodeGen")); int ret = OB_SUCCESS; std::string verify_error; llvm::raw_string_ostream verify_raw_os(verify_error); @@ -586,6 +597,7 @@ int ObLLVMHelper::verify_module() uint64_t ObLLVMHelper::get_function_address(const ObString &name) { + lib::ObMallocHookAttrGuard guard(ObMemAttr(MTL_ID(), "PlJit")); return jc_->TheJIT->get_function_address(std::string(name.ptr(), name.length())); } diff --git a/src/pl/ob_pl_code_generator.h b/src/pl/ob_pl_code_generator.h index e91eac552e..b72bf3924b 100644 --- a/src/pl/ob_pl_code_generator.h +++ b/src/pl/ob_pl_code_generator.h @@ -194,7 +194,7 @@ public: debug_mode_(session_info_.is_pl_debug_on() && func_ast.is_routine()), oracle_mode_(oracle_mode) { - goto_label_map_.create(func_ast.get_body()->get_stmts().count(), ObModIds::OB_PL); + goto_label_map_.create(func_ast.get_body()->get_stmts().count(), "PlCodeGen"); } virtual ~ObPLCodeGenerator() {} diff --git a/src/pl/ob_pl_compile.cpp b/src/pl/ob_pl_compile.cpp index 29777af043..27023a2fdd 100644 --- a/src/pl/ob_pl_compile.cpp +++ b/src/pl/ob_pl_compile.cpp @@ -23,6 +23,7 @@ #include "pl/ob_pl_resolver.h" #include "pl/ob_pl_code_generator.h" #include "pl/ob_pl_package.h" +#include "lib/alloc/malloc_hook.h" namespace oceanbase { using namespace common; @@ -159,6 +160,7 @@ int ObPLCompiler::compile( func.get_di_helper(), lib::is_oracle_mode()) { #endif + lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "PlCodeGen")); if (OB_FAIL(cg.init())) { LOG_WARN("failed to init code generator", K(ret)); } else if (OB_FAIL(cg.generate(func))) { @@ -385,6 +387,7 @@ int ObPLCompiler::compile(const uint64_t id, ObPLFunction &func) func.get_di_helper(), lib::is_oracle_mode()) { #endif + lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "PlCodeGen")); if (OB_FAIL(cg.init())) { LOG_WARN("failed to init code generator", K(ret)); } else if (OB_FAIL(cg.generate(func))) { @@ -704,6 +707,7 @@ int ObPLCompiler::compile_package(const ObPackageInfo &package_info, package.get_di_helper(), lib::is_oracle_mode()) { #endif + lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "PlCodeGen")); OZ (cg.init()); OZ (cg.generate(package)); } @@ -1121,6 +1125,7 @@ int ObPLCompiler::compile_subprogram_table(common::ObIAllocator &allocator, routine->get_di_helper(), lib::is_oracle_mode()) { #endif + lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), "PlCodeGen")); if (OB_FAIL(cg.init())) { LOG_WARN("init code generator failed", K(ret)); } else if (OB_FAIL(cg.generate(*routine))) {