]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Remove Mem::Report() and polish memory_pools_limit storage (#1184)
authorAmos Jeffries <yadij@users.noreply.github.com>
Mon, 21 Nov 2022 05:20:32 +0000 (05:20 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Tue, 22 Nov 2022 03:35:43 +0000 (03:35 +0000)
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.

src/Makefile.am
src/main.cc
src/mem/Pool.cc
src/mem/Pool.h
src/mem/forward.h
src/mem/old_api.cc
src/tests/stub_libmem.cc

index d1498f260f484921fb77417a5615b2d2b2613ef0..99738cd9088686cacdf3b0d055e86caf83457c39 100644 (file)
@@ -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 \
index f940f48982c46c97d78a8d7573c05a31e773b826..4037be325f1eef825fcc1b664ab9fc1dde2d6003 100644 (file)
@@ -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;
     }
index 7d2979d6d0180ea37fa8f69e4655076a2fc50c3d..259d09514e9c450cd2648f5e003afb37f0886694 100644 (file)
@@ -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;
 }
index a02f5b36d237244a730ead7ba5cdcce12c4b4460..84cf99ed6aa8d431e5b6be47236f675866f8bb28 100644 (file)
@@ -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);
 };
 
 /**
index 8a372a6dc960202ab355c5c4c5a4b2f2fdf38e74..82600c6e578f7b921e656d16fa28d09970b3653f 100644 (file)
@@ -23,7 +23,6 @@ class MemPoolMeter;
 namespace Mem
 {
 void Init();
-void Report();
 void Stats(StoreEntry *);
 void CleanIdlePools(void *unused);
 void Report(std::ostream &);
index d071654eb610c13bea0df255e1e0caa5e2da738d..5607ed00aa336c1f6d3b24e20563c55d4181b3b5 100644 (file)
@@ -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)
 {
index f5f94c99b89ba130bbd3f3750b7f1b141e166c06..843db0b95de9e221938ec9e48730b260b2bc2bd2 100644 (file)
@@ -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