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

Reply via email to