From 5083e21192c3cfdec274c8bafdc4d73e7c843af9 Mon Sep 17 00:00:00 2001 From: Sridhar Seshasayee Date: Wed, 29 Apr 2020 19:32:35 +0530 Subject: [PATCH] mon/OSDMonitor: Always tune priority cache manager memory on all mons Always call into priority cache manager (pcm) to tune the memory on the leader and on all the followers (peons) as part of each tick(). This ensures that the pcm on all the mons continuously tunes the tcmalloc memory thereby ensuring that the peons don't run out of memory eventually. Fixes: https://tracker.ceph.com/issues/45266 Signed-off-by: Sridhar Seshasayee --- src/mon/OSDMonitor.cc | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 73725fe7a16..498059d919b 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -4981,6 +4981,28 @@ void OSDMonitor::tick() // always update osdmap manifest, regardless of being the leader. load_osdmap_manifest(); + // always tune priority cache manager memory on leader and peons + if (ceph_using_tcmalloc() && mon_memory_autotune) { + std::lock_guard l(balancer_lock); + if (pcm != nullptr) { + pcm->tune_memory(); + pcm->balance(); + _set_new_cache_sizes(); + dout(10) << "tick balancer " + << " inc cache_bytes: " << inc_cache->get_cache_bytes() + << " inc comtd_bytes: " << inc_cache->get_committed_size() + << " inc used_bytes: " << inc_cache->_get_used_bytes() + << " inc num_osdmaps: " << inc_cache->_get_num_osdmaps() + << dendl; + dout(10) << "tick balancer " + << " full cache_bytes: " << full_cache->get_cache_bytes() + << " full comtd_bytes: " << full_cache->get_committed_size() + << " full used_bytes: " << full_cache->_get_used_bytes() + << " full num_osdmaps: " << full_cache->_get_num_osdmaps() + << dendl; + } + } + if (!mon->is_leader()) return; bool do_propose = false; @@ -5113,27 +5135,6 @@ void OSDMonitor::tick() if (do_propose || !pending_inc.new_pg_temp.empty()) // also propose if we adjusted pg_temp propose_pending(); - - { - std::lock_guard l(balancer_lock); - if (ceph_using_tcmalloc() && mon_memory_autotune && pcm != nullptr) { - pcm->tune_memory(); - pcm->balance(); - _set_new_cache_sizes(); - dout(10) << "tick balancer " - << " inc cache_bytes: " << inc_cache->get_cache_bytes() - << " inc comtd_bytes: " << inc_cache->get_committed_size() - << " inc used_bytes: " << inc_cache->_get_used_bytes() - << " inc num_osdmaps: " << inc_cache->_get_num_osdmaps() - << dendl; - dout(10) << "tick balancer " - << " full cache_bytes: " << full_cache->get_cache_bytes() - << " full comtd_bytes: " << full_cache->get_committed_size() - << " full used_bytes: " << full_cache->_get_used_bytes() - << " full num_osdmaps: " << full_cache->_get_num_osdmaps() - << dendl; - } - } } void OSDMonitor::_set_new_cache_sizes() -- 2.39.5