[enhancement](memtracker) Fix Brpc mem count and refactored thread context macro (#13469)

This commit is contained in:
Xinyi Zou
2022-10-21 12:01:38 +08:00
committed by GitHub
parent b861b66bef
commit 9dc5dd382a
18 changed files with 183 additions and 55 deletions

View File

@ -56,13 +56,13 @@ void ThreadMemTrackerMgr::exceeded(const std::string& failed_msg) {
if (_cb_func != nullptr) {
_cb_func();
}
auto cancel_msg = _limiter_tracker_raw->mem_limit_exceeded(
fmt::format("exec node:<{}>", last_consumer_tracker()),
_limiter_tracker_raw->parent().get(), failed_msg);
if (is_attach_query()) {
auto cancel_msg = _limiter_tracker_raw->mem_limit_exceeded(
fmt::format("exec node:<{}>", last_consumer_tracker()),
_limiter_tracker_raw->parent().get(), failed_msg);
exceeded_cancel_task(cancel_msg);
_check_limit = false; // Make sure it will only be canceled once
}
_check_limit = false; // Make sure it will only be canceled once
}
} // namespace doris

View File

@ -84,6 +84,17 @@ public:
return _consumer_tracker_stack.empty() ? "" : _consumer_tracker_stack.back()->label();
}
void start_count_scope_mem() {
_scope_mem = 0;
_count_scope_mem = true;
}
int64_t stop_count_scope_mem() {
flush_untracked_mem<false>();
_count_scope_mem = false;
return _scope_mem;
}
void set_exceed_call_back(ExceedCallBack cb_func) { _cb_func = cb_func; }
// Note that, If call the memory allocation operation in TCMalloc new/delete Hook,
@ -135,6 +146,10 @@ private:
// Frequent calls to unordered_map _untracked_mems[] in consume will degrade performance.
int64_t _untracked_mem = 0;
int64_t old_untracked_mem = 0;
bool _count_scope_mem = false;
int64_t _scope_mem = 0;
std::string failed_msg = std::string();
// _limiter_tracker_stack[0] = orphan_mem_tracker
@ -216,6 +231,7 @@ inline void ThreadMemTrackerMgr::flush_untracked_mem() {
if (!_init) init();
DCHECK(_limiter_tracker_raw);
old_untracked_mem = _untracked_mem;
if (_count_scope_mem) _scope_mem += _untracked_mem;
if (CheckLimit) {
#ifndef BE_TEST
// When all threads are started, `attach_limiter_tracker` is expected to be called to bind the limiter tracker.