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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]