From: Sridhar Seshasayee Date: Wed, 29 Apr 2020 14:02:35 +0000 (+0530) Subject: mon/OSDMonitor: Always tune priority cache manager memory on all mons X-Git-Tag: v15.2.2~5^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=60a90bc9b2dc3cd4285b50d43f8210f9c57d67d2;p=ceph.git 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 (cherry picked from commit 5083e21192c3cfdec274c8bafdc4d73e7c843af9) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index b4cc322b9f0b5..7b9b382b8929a 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -4929,6 +4929,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; @@ -5061,27 +5083,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()