From: Amos Jeffries Date: Mon, 21 Nov 2022 05:20:32 +0000 (+0000) Subject: Remove Mem::Report() and polish memory_pools_limit storage (#1184) X-Git-Tag: SQUID_6_0_1~76 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81e5e2532921c3c75502190d2aea48a2602d593f;p=thirdparty%2Fsquid.git Remove Mem::Report() and polish memory_pools_limit storage (#1184) The official code should not call Mem::Report(). There is no justification for main.cc treating memory module in such a special way. The reporting code itself has problems. Removing all this code is better than leaving or polishing it. --- diff --git a/src/Makefile.am b/src/Makefile.am index d1498f260f..99738cd908 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2084,6 +2084,7 @@ tests_testHttpReply_SOURCES = \ tests/stub_libcomm.cc \ tests/stub_liberror.cc \ tests/stub_libformat.cc \ + tests/stub_libmem.cc \ tests/stub_libmgr.cc \ tests/stub_libsecurity.cc \ tests/stub_libsslsquid.cc \ @@ -2113,7 +2114,6 @@ tests_testHttpReply_LDADD=\ ip/libip.la \ base/libbase.la \ ipc/libipc.la \ - mem/libmem.la \ sbuf/libsbuf.la \ $(top_builddir)/lib/libmisccontainers.la \ $(top_builddir)/lib/libmiscencoding.la \ diff --git a/src/main.cc b/src/main.cc index f940f48982..4037be325f 100644 --- a/src/main.cc +++ b/src/main.cc @@ -924,7 +924,6 @@ mainReconfigureFinish(void *) CpuAffinityReconfigure(); setUmask(Config.umask); - Mem::Report(); setEffectiveUser(); Debug::UseCacheLog(); ipcache_restart(); /* clear stuck entries */ @@ -1559,8 +1558,6 @@ SquidMain(int argc, char **argv) parse_err = 1; } - Mem::Report(); - if (opt_parse_cfg_only || parse_err > 0) return parse_err; } diff --git a/src/mem/Pool.cc b/src/mem/Pool.cc index 7d2979d6d0..259d09514e 100644 --- a/src/mem/Pool.cc +++ b/src/mem/Pool.cc @@ -64,18 +64,6 @@ memPoolIterateNext(MemPoolIterator * iter) return pool; } -void -MemPools::setIdleLimit(ssize_t new_idle_limit) -{ - mem_idle_limit = new_idle_limit; -} - -ssize_t -MemPools::idleLimit() const -{ - return mem_idle_limit; -} - /* Change the default value of defaultIsChunked to override * all pools - including those used before main() starts where * MemPools::GetInstance().setDefaultPoolChunking() can be called. @@ -206,7 +194,7 @@ MemImplementingAllocator::freeOne(void *obj) { assert(obj != nullptr); (void) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(obj, obj_size); - deallocate(obj, MemPools::GetInstance().mem_idle_limit == 0); + deallocate(obj, MemPools::GetInstance().idleLimit() == 0); ++free_calls; } @@ -223,11 +211,11 @@ void MemPools::clean(time_t maxage) { flushMeters(); - if (mem_idle_limit < 0) // no limit to enforce + if (idleLimit() < 0) // no limit to enforce return; int shift = 1; - if (TheMeter.idle.currentLevel() > mem_idle_limit) + if (TheMeter.idle.currentLevel() > idleLimit()) maxage = shift = 0; MemImplementingAllocator *pool; @@ -280,7 +268,7 @@ memPoolGetGlobalStats(MemPoolGlobalStats * stats) stats->tot_items_idle = pp_stats.items_idle; stats->tot_overhead += pp_stats.overhead + MemPools::GetInstance().poolCount * sizeof(MemAllocator *); - stats->mem_idle_limit = MemPools::GetInstance().mem_idle_limit; + stats->mem_idle_limit = MemPools::GetInstance().idleLimit(); return pools_inuse; } diff --git a/src/mem/Pool.h b/src/mem/Pool.h index a02f5b36d2..84cf99ed6a 100644 --- a/src/mem/Pool.h +++ b/src/mem/Pool.h @@ -129,11 +129,11 @@ public: /** * Sets upper limit in bytes to amount of free ram kept in pools. This is * not strict upper limit, but a hint. When MemPools are over this limit, - * totally free chunks are immediately considered for release. Otherwise - * only chunks that have not been referenced for a long time are checked. + * deallocate attempts to release memory to the system instead of pooling. */ - void setIdleLimit(ssize_t new_idle_limit); - ssize_t idleLimit() const; + void setIdleLimit(const ssize_t newLimit) { idleLimit_ = newLimit; } + /// \copydoc idleLimit_ + ssize_t idleLimit() const { return idleLimit_; } /** \par @@ -166,9 +166,14 @@ public: void setDefaultPoolChunking(bool const &); MemImplementingAllocator *pools = nullptr; - ssize_t mem_idle_limit = (2 << 20) /* 2MB */; int poolCount = 0; bool defaultIsChunked = false; + +private: + /// Limits the cumulative size of allocated (but unused) memory in all pools. + /// Initial value is 2MB until first configuration, + /// See squid.conf memory_pools_limit directive. + ssize_t idleLimit_ = (2 << 20); }; /** diff --git a/src/mem/forward.h b/src/mem/forward.h index 8a372a6dc9..82600c6e57 100644 --- a/src/mem/forward.h +++ b/src/mem/forward.h @@ -23,7 +23,6 @@ class MemPoolMeter; namespace Mem { void Init(); -void Report(); void Stats(StoreEntry *); void CleanIdlePools(void *unused); void Report(std::ostream &); diff --git a/src/mem/old_api.cc b/src/mem/old_api.cc index d071654eb6..5607ed00aa 100644 --- a/src/mem/old_api.cc +++ b/src/mem/old_api.cc @@ -456,15 +456,6 @@ Mem::Init(void) Mgr::RegisterAction("mem", "Memory Utilization", Mem::Stats, 0, 1); } -void -Mem::Report() -{ - debugs(13, 3, "Memory pools are '" << - (Config.onoff.mem_pools ? "on" : "off") << "'; limit: " << - std::setprecision(3) << toMB(MemPools::GetInstance().idleLimit()) << - " MB"); -} - static mem_type & operator++(mem_type &aMem) { diff --git a/src/tests/stub_libmem.cc b/src/tests/stub_libmem.cc index f5f94c99b8..843db0b95d 100644 --- a/src/tests/stub_libmem.cc +++ b/src/tests/stub_libmem.cc @@ -23,7 +23,6 @@ int Mem::AllocatorProxy::getStats(MemPoolStats *) STUB_RETVAL(0) #include "mem/forward.h" void Mem::Init() STUB_NOP -void Mem::Report() STUB_NOP void Mem::Stats(StoreEntry *) STUB_NOP void Mem::CleanIdlePools(void *) STUB_NOP void Mem::Report(std::ostream &) STUB_NOP @@ -82,16 +81,9 @@ MemPoolMeter::MemPoolMeter() STUB_NOP void MemPoolMeter::flush() STUB static MemPools tmpMemPools; MemPools &MemPools::GetInstance() {return tmpMemPools;} -MemPools::MemPools() : - pools(nullptr), - mem_idle_limit(0), - poolCount(0), - defaultIsChunked(false) -{} +MemPools::MemPools() STUB_NOP void MemPools::flushMeters() STUB MemImplementingAllocator * MemPools::create(const char *, size_t) STUB_RETVAL(nullptr); -void MemPools::setIdleLimit(ssize_t) STUB -ssize_t MemPools::idleLimit() const STUB_RETVAL(0) void MemPools::clean(time_t) STUB void MemPools::setDefaultPoolChunking(bool const &) STUB