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
The following commit(s) were added to refs/heads/branch-2.1 by this push: new 13b882a4cca [branch-2.1](memory) Add memory metrics to bvar (#39763) 13b882a4cca is described below commit 13b882a4cca7cd9b89e5c3c1bf51741755c79274 Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Thu Aug 22 17:34:30 2024 +0800 [branch-2.1](memory) Add memory metrics to bvar (#39763) pick #38391 --- be/src/common/daemon.cpp | 1 + be/src/runtime/memory/mem_tracker_limiter.cpp | 80 ++++++++++++++++++++------- be/src/util/mem_info.cpp | 43 ++++++++++++++ be/src/util/mem_info.h | 2 + 4 files changed, 107 insertions(+), 19 deletions(-) diff --git a/be/src/common/daemon.cpp b/be/src/common/daemon.cpp index 61845db775a..59f68c40674 100644 --- a/be/src/common/daemon.cpp +++ b/be/src/common/daemon.cpp @@ -209,6 +209,7 @@ void Daemon::memory_maintenance_thread() { DorisMetrics::instance()->system_metrics()->update_allocator_metrics(); } #endif + MemInfo::refresh_memory_bvar(); // Update and print memory stat when the memory changes by 256M. if (abs(last_print_proc_mem - PerfCounters::get_vm_rss()) > 268435456) { diff --git a/be/src/runtime/memory/mem_tracker_limiter.cpp b/be/src/runtime/memory/mem_tracker_limiter.cpp index 1c0ab863e6c..494645d56b5 100644 --- a/be/src/runtime/memory/mem_tracker_limiter.cpp +++ b/be/src/runtime/memory/mem_tracker_limiter.cpp @@ -42,7 +42,17 @@ namespace doris { -bvar::Adder<int64_t> g_memtrackerlimiter_cnt("memtrackerlimiter_cnt"); +static bvar::Adder<int64_t> memory_memtrackerlimiter_cnt("memory_memtrackerlimiter_cnt"); +static bvar::Adder<int64_t> memory_all_trackers_sum_bytes("memory_all_trackers_sum_bytes"); +static bvar::Adder<int64_t> memory_global_trackers_sum_bytes("memory_global_trackers_sum_bytes"); +static bvar::Adder<int64_t> memory_query_trackers_sum_bytes("memory_query_trackers_sum_bytes"); +static bvar::Adder<int64_t> memory_load_trackers_sum_bytes("memory_load_trackers_sum_bytes"); +static bvar::Adder<int64_t> memory_compaction_trackers_sum_bytes( + "memory_compaction_trackers_sum_bytes"); +static bvar::Adder<int64_t> memory_schema_change_trackers_sum_bytes( + "memory_schema_change_trackers_sum_bytes"); +static bvar::Adder<int64_t> memory_other_trackers_sum_bytes("memory_other_trackers_sum_bytes"); + constexpr auto GC_MAX_SEEK_TRACKER = 1000; std::atomic<bool> MemTrackerLimiter::_enable_print_log_process_usage {true}; @@ -79,7 +89,7 @@ MemTrackerLimiter::MemTrackerLimiter(Type type, const std::string& label, int64_ if (_type == Type::LOAD || _type == Type::QUERY) { _query_statistics = std::make_shared<QueryStatistics>(); } - g_memtrackerlimiter_cnt << 1; + memory_memtrackerlimiter_cnt << 1; } std::shared_ptr<MemTrackerLimiter> MemTrackerLimiter::create_shared(MemTrackerLimiter::Type type, @@ -126,7 +136,7 @@ MemTrackerLimiter::~MemTrackerLimiter() { } _consumption->set(0); } - g_memtrackerlimiter_cnt << -1; + memory_memtrackerlimiter_cnt << -1; } MemTracker::Snapshot MemTrackerLimiter::make_snapshot() const { @@ -153,9 +163,40 @@ void MemTrackerLimiter::refresh_global_counter() { } } } + int64_t all_trackers_mem_sum = 0; for (auto it : type_mem_sum) { MemTrackerLimiter::TypeMemSum[it.first]->set(it.second); + all_trackers_mem_sum += it.second; + switch (it.first) { + case Type::GLOBAL: + memory_global_trackers_sum_bytes + << it.second - memory_global_trackers_sum_bytes.get_value(); + break; + case Type::QUERY: + memory_query_trackers_sum_bytes + << it.second - memory_query_trackers_sum_bytes.get_value(); + break; + case Type::LOAD: + memory_load_trackers_sum_bytes + << it.second - memory_load_trackers_sum_bytes.get_value(); + break; + case Type::COMPACTION: + memory_compaction_trackers_sum_bytes + << it.second - memory_compaction_trackers_sum_bytes.get_value(); + break; + case Type::SCHEMA_CHANGE: + memory_schema_change_trackers_sum_bytes + << it.second - memory_schema_change_trackers_sum_bytes.get_value(); + break; + case Type::OTHER: + memory_other_trackers_sum_bytes + << it.second - memory_other_trackers_sum_bytes.get_value(); + } } + all_trackers_mem_sum += MemInfo::allocator_cache_mem(); + all_trackers_mem_sum += MemInfo::allocator_metadata_mem(); + memory_all_trackers_sum_bytes << all_trackers_mem_sum - + memory_all_trackers_sum_bytes.get_value(); } void MemTrackerLimiter::clean_tracker_limiter_group() { @@ -178,7 +219,7 @@ void MemTrackerLimiter::clean_tracker_limiter_group() { void MemTrackerLimiter::make_process_snapshots(std::vector<MemTracker::Snapshot>* snapshots) { MemTrackerLimiter::refresh_global_counter(); - int64_t all_tracker_mem_sum = 0; + int64_t all_trackers_mem_sum = 0; Snapshot snapshot; for (auto it : MemTrackerLimiter::TypeMemSum) { snapshot.type = "overview"; @@ -187,7 +228,7 @@ void MemTrackerLimiter::make_process_snapshots(std::vector<MemTracker::Snapshot> snapshot.cur_consumption = it.second->current_value(); snapshot.peak_consumption = it.second->peak_value(); (*snapshots).emplace_back(snapshot); - all_tracker_mem_sum += it.second->current_value(); + all_trackers_mem_sum += it.second->current_value(); } snapshot.type = "overview"; @@ -196,7 +237,7 @@ void MemTrackerLimiter::make_process_snapshots(std::vector<MemTracker::Snapshot> snapshot.cur_consumption = MemInfo::allocator_cache_mem(); snapshot.peak_consumption = -1; (*snapshots).emplace_back(snapshot); - all_tracker_mem_sum += MemInfo::allocator_cache_mem(); + all_trackers_mem_sum += MemInfo::allocator_cache_mem(); snapshot.type = "overview"; snapshot.label = "tc/jemalloc_metadata"; @@ -204,20 +245,28 @@ void MemTrackerLimiter::make_process_snapshots(std::vector<MemTracker::Snapshot> snapshot.cur_consumption = MemInfo::allocator_metadata_mem(); snapshot.peak_consumption = -1; (*snapshots).emplace_back(snapshot); - all_tracker_mem_sum += MemInfo::allocator_metadata_mem(); + all_trackers_mem_sum += MemInfo::allocator_metadata_mem(); + + snapshot.type = "overview"; + snapshot.label = "reserved_memory"; + snapshot.limit = -1; + snapshot.cur_consumption = GlobalMemoryArbitrator::process_reserved_memory(); + snapshot.peak_consumption = -1; + (*snapshots).emplace_back(snapshot); + all_trackers_mem_sum += GlobalMemoryArbitrator::process_reserved_memory(); snapshot.type = "overview"; - snapshot.label = "sum of all trackers"; // is virtual memory + snapshot.label = "sum_of_all_trackers"; // is virtual memory snapshot.limit = -1; - snapshot.cur_consumption = all_tracker_mem_sum; + snapshot.cur_consumption = all_trackers_mem_sum; snapshot.peak_consumption = -1; (*snapshots).emplace_back(snapshot); snapshot.type = "overview"; #ifdef ADDRESS_SANITIZER - snapshot.label = "[ASAN]process resident memory"; // from /proc VmRSS VmHWM + snapshot.label = "[ASAN]VmRSS(process resident memory)"; // from /proc VmRSS VmHWM #else - snapshot.label = "process resident memory"; // from /proc VmRSS VmHWM + snapshot.label = "VmRSS(process resident memory)"; // from /proc VmRSS VmHWM #endif snapshot.limit = -1; snapshot.cur_consumption = PerfCounters::get_vm_rss(); @@ -225,14 +274,7 @@ void MemTrackerLimiter::make_process_snapshots(std::vector<MemTracker::Snapshot> (*snapshots).emplace_back(snapshot); snapshot.type = "overview"; - snapshot.label = "reserve_memory"; - snapshot.limit = -1; - snapshot.cur_consumption = GlobalMemoryArbitrator::process_reserved_memory(); - snapshot.peak_consumption = -1; - (*snapshots).emplace_back(snapshot); - - snapshot.type = "overview"; - snapshot.label = "process virtual memory"; // from /proc VmSize VmPeak + snapshot.label = "VmSize(process virtual memory)"; // from /proc VmSize VmPeak snapshot.limit = -1; snapshot.cur_consumption = PerfCounters::get_vm_size(); snapshot.peak_consumption = PerfCounters::get_vm_peak(); diff --git a/be/src/util/mem_info.cpp b/be/src/util/mem_info.cpp index baddefcc27f..d0703c985ea 100644 --- a/be/src/util/mem_info.cpp +++ b/be/src/util/mem_info.cpp @@ -39,6 +39,7 @@ #include "common/config.h" #include "common/status.h" #include "gutil/strings/split.h" +#include "runtime/memory/global_memory_arbitrator.h" #include "util/cgroup_util.h" #include "util/parse_util.h" #include "util/pretty_printer.h" @@ -46,6 +47,21 @@ namespace doris { +static bvar::Adder<int64_t> memory_jemalloc_cache_bytes("memory_jemalloc_cache_bytes"); +static bvar::Adder<int64_t> memory_jemalloc_dirty_pages_bytes("memory_jemalloc_dirty_pages_bytes"); +static bvar::Adder<int64_t> memory_jemalloc_metadata_bytes("memory_jemalloc_metadata_bytes"); +static bvar::Adder<int64_t> memory_jemalloc_virtual_bytes("memory_jemalloc_virtual_bytes"); +static bvar::Adder<int64_t> memory_cgroup_usage_bytes("memory_cgroup_usage_bytes"); +static bvar::Adder<int64_t> memory_sys_available_bytes("memory_sys_available_bytes"); +static bvar::Adder<int64_t> memory_arbitrator_sys_available_bytes( + "memory_arbitrator_sys_available_bytes"); +static bvar::Adder<int64_t> memory_arbitrator_process_usage_bytes( + "memory_arbitrator_process_usage_bytes"); +static bvar::Adder<int64_t> memory_arbitrator_reserve_memory_bytes( + "memory_arbitrator_reserve_memory_bytes"); +static bvar::Adder<int64_t> memory_arbitrator_refresh_interval_growth_bytes( + "memory_arbitrator_refresh_interval_growth_bytes"); + bool MemInfo::_s_initialized = false; std::atomic<int64_t> MemInfo::_s_physical_mem = std::numeric_limits<int64_t>::max(); std::atomic<int64_t> MemInfo::_s_mem_limit = std::numeric_limits<int64_t>::max(); @@ -116,6 +132,33 @@ void MemInfo::refresh_allocator_mem() { #endif } +void MemInfo::refresh_memory_bvar() { + memory_jemalloc_cache_bytes << MemInfo::allocator_cache_mem() - + memory_jemalloc_cache_bytes.get_value(); + memory_jemalloc_dirty_pages_bytes + << MemInfo::je_dirty_pages_mem() - memory_jemalloc_dirty_pages_bytes.get_value(); + memory_jemalloc_metadata_bytes + << MemInfo::allocator_metadata_mem() - memory_jemalloc_metadata_bytes.get_value(); + memory_jemalloc_virtual_bytes << MemInfo::allocator_virtual_mem() - + memory_jemalloc_virtual_bytes.get_value(); + + memory_cgroup_usage_bytes << _s_cgroup_mem_usage - memory_cgroup_usage_bytes.get_value(); + memory_sys_available_bytes << _s_sys_mem_available - memory_sys_available_bytes.get_value(); + + memory_arbitrator_sys_available_bytes + << GlobalMemoryArbitrator::sys_mem_available() - + memory_arbitrator_sys_available_bytes.get_value(); + memory_arbitrator_process_usage_bytes + << GlobalMemoryArbitrator::process_memory_usage() - + memory_arbitrator_process_usage_bytes.get_value(); + memory_arbitrator_reserve_memory_bytes + << GlobalMemoryArbitrator::process_reserved_memory() - + memory_arbitrator_reserve_memory_bytes.get_value(); + memory_arbitrator_refresh_interval_growth_bytes + << GlobalMemoryArbitrator::refresh_interval_memory_growth - + memory_arbitrator_refresh_interval_growth_bytes.get_value(); +} + #ifndef __APPLE__ void MemInfo::refresh_proc_meminfo() { std::ifstream meminfo("/proc/meminfo", std::ios::in); diff --git a/be/src/util/mem_info.h b/be/src/util/mem_info.h index ee83239c128..8a76ce520cf 100644 --- a/be/src/util/mem_info.h +++ b/be/src/util/mem_info.h @@ -73,6 +73,8 @@ public: static void refresh_proc_meminfo(); + static void refresh_memory_bvar(); + static inline int64_t sys_mem_available_low_water_mark() { return _s_sys_mem_available_low_water_mark; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org