This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 11ca738261297bc95f83b2e99d313af6cba8b962 Author: Xinyi Zou <[email protected]> AuthorDate: Mon May 6 19:21:21 2024 +0800 [fix](memory) Fix thread context init in MacOS and not use memory tracker (#34125) --- be/src/runtime/thread_context.h | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/be/src/runtime/thread_context.h b/be/src/runtime/thread_context.h index 25a8ee33388..84b24e79657 100644 --- a/be/src/runtime/thread_context.h +++ b/be/src/runtime/thread_context.h @@ -40,7 +40,7 @@ // including MemTracker, QueryID, etc. Use CONSUME_THREAD_MEM_TRACKER/RELEASE_THREAD_MEM_TRACKER in the code segment where // the macro is located to record the memory into MemTracker. // Not use it in rpc done.run(), because bthread_setspecific may have errors when UBSAN compiles. -#if defined(USE_MEM_TRACKER) && !defined(UNDEFINED_BEHAVIOR_SANITIZER) && !defined(BE_TEST) +#if defined(USE_MEM_TRACKER) && !defined(BE_TEST) // Attach to query/load/compaction/e.g. when thread starts. // This will save some info about a working thread in the thread context. // Looking forward to tracking memory during thread execution into MemTrackerLimiter. @@ -59,18 +59,6 @@ #define SCOPED_CONSUME_MEM_TRACKER(mem_tracker) \ auto VARNAME_LINENUM(add_mem_consumer) = doris::AddThreadMemTrackerConsumer(mem_tracker) -#define SCOPED_SKIP_MEMORY_CHECK() \ - auto VARNAME_LINENUM(scope_skip_memory_check) = doris::ScopeSkipMemoryCheck() -#else -#define SCOPED_ATTACH_TASK(arg1, ...) (void)0 -#define SCOPED_ATTACH_TASK_WITH_ID(arg1, arg2) (void)0 -#define SCOPED_SWITCH_THREAD_MEM_TRACKER_LIMITER(arg1) (void)0 -#define SCOPED_CONSUME_MEM_TRACKER(mem_tracker) (void)0 -#define SCOPED_SKIP_MEMORY_CHECK() (void)0 -#endif - -// Used to tracking the memory usage of the specified code segment use by mem hook. -#if defined(USE_MEM_TRACKER) // Count a code segment memory (memory malloc - memory free) to int64_t // Usage example: int64_t scope_mem = 0; { SCOPED_MEM_COUNT(&scope_mem); xxx; xxx; } #define SCOPED_MEM_COUNT_BY_HOOK(scope_mem) \ @@ -92,12 +80,26 @@ DCHECK(doris::k_doris_exit || !doris::config::enable_memory_orphan_check) \ << doris::memory_orphan_check_msg; #else -#define SCOPED_MEM_COUNT_BY_HOOK(scope_mem) (void)0 -#define SCOPED_CONSUME_MEM_TRACKER_BY_HOOK(mem_tracker) (void)0 +// thread context need to be initialized, required by Allocator and elsewhere. +#define SCOPED_ATTACH_TASK(arg1, ...) \ + auto VARNAME_LINENUM(scoped_tls_at) = doris::ScopedInitThreadContext() +#define SCOPED_ATTACH_TASK_WITH_ID(arg1, arg2) \ + auto VARNAME_LINENUM(scoped_tls_atwi) = doris::ScopedInitThreadContext() +#define SCOPED_SWITCH_THREAD_MEM_TRACKER_LIMITER(arg1) \ + auto VARNAME_LINENUM(scoped_tls_stmtl) = doris::ScopedInitThreadContext() +#define SCOPED_CONSUME_MEM_TRACKER(mem_tracker) \ + auto VARNAME_LINENUM(scoped_tls_cmt) = doris::ScopedInitThreadContext() +#define SCOPED_MEM_COUNT_BY_HOOK(scope_mem) \ + auto VARNAME_LINENUM(scoped_tls_mcbh) = doris::ScopedInitThreadContext() +#define SCOPED_CONSUME_MEM_TRACKER_BY_HOOK(mem_tracker) \ + auto VARNAME_LINENUM(scoped_tls_cmtbh) = doris::ScopedInitThreadContext() #define ORPHAN_TRACKER_CHECK() (void)0 #define MEMORY_ORPHAN_CHECK() (void)0 #endif +#define SCOPED_SKIP_MEMORY_CHECK() \ + auto VARNAME_LINENUM(scope_skip_memory_check) = doris::ScopeSkipMemoryCheck() + #define SKIP_LARGE_MEMORY_CHECK(...) \ do { \ doris::ThreadLocalHandle::create_thread_local_if_not_exits(); \ @@ -325,6 +327,14 @@ private: int64_t* _scope_mem = nullptr; }; +// only hold thread context in scope. +class ScopedInitThreadContext { +public: + explicit ScopedInitThreadContext() { ThreadLocalHandle::create_thread_local_if_not_exits(); } + + ~ScopedInitThreadContext() { ThreadLocalHandle::del_thread_local_if_count_is_zero(); } +}; + class AttachTask { public: explicit AttachTask(const std::shared_ptr<MemTrackerLimiter>& mem_tracker, --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
