]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
finetune memory release logics on objects being swapped out
authorHenrik Nordstrom <henrik@henriknordstrom.net>
Tue, 4 Aug 2009 02:31:27 +0000 (04:31 +0200)
committerHenrik Nordstrom <henrik@henriknordstrom.net>
Tue, 4 Aug 2009 02:31:27 +0000 (04:31 +0200)
src/MemObject.cc
src/MemObject.h
src/cache_cf.cc
src/store.cc

index 0c588056c2825dab3f5c705690c1c57a51dce72f..815bf9bbee4d04c94180f44b33b9e3c9bfd0452a 100644 (file)
@@ -313,7 +313,7 @@ MemObject::objectBytesOnDisk() const
 }
 
 int64_t
-MemObject::policyLowestOffsetToKeep() const
+MemObject::policyLowestOffsetToKeep(bool swap) const
 {
     /*
      * Careful.  lowest_offset can be greater than endOffset(), such
@@ -323,7 +323,7 @@ MemObject::policyLowestOffsetToKeep() const
 
     if (endOffset() < lowest_offset ||
             endOffset() - inmem_lo > (int64_t)Config.Store.maxInMemObjSize ||
-            !Config.onoff.memory_cache_first)
+            (swap && !Config.onoff.memory_cache_first))
         return lowest_offset;
 
     return inmem_lo;
@@ -332,7 +332,7 @@ MemObject::policyLowestOffsetToKeep() const
 void
 MemObject::trimSwappable()
 {
-    int64_t new_mem_lo = policyLowestOffsetToKeep();
+    int64_t new_mem_lo = policyLowestOffsetToKeep(1);
     /*
      * We should only free up to what we know has been written
      * to disk, not what has been queued for writing.  Otherwise
@@ -357,7 +357,7 @@ MemObject::trimSwappable()
 void
 MemObject::trimUnSwappable()
 {
-    int64_t new_mem_lo = policyLowestOffsetToKeep();
+    int64_t new_mem_lo = policyLowestOffsetToKeep(0);
     assert (new_mem_lo > 0);
 
     data_hdr.freeDataUpto(new_mem_lo);
index 5464ccb1972b9e5a935c02ffe916ebf5b78e5a61..3631db6d56f6d1f16e6a05d48c43692f8b27ec45 100644 (file)
@@ -73,7 +73,7 @@ public:
      * better
      */
     int64_t objectBytesOnDisk() const;
-    int64_t policyLowestOffsetToKeep() const;
+    int64_t policyLowestOffsetToKeep(bool swap) const;
     void trimSwappable();
     void trimUnSwappable();
     bool isContiguous() const;
index 188a115ad39067b9c696f65938ade00742a53510..19dd089d92a8d3bb9fe250d2b0850050cdae4622 100644 (file)
@@ -2784,16 +2784,16 @@ parse_memcachemode(SquidConfig * config)
     if (!token)
        self_destruct();
 
-    if (strcmp(token, "always")) {
+    if (strcmp(token, "always") == 0) {
        Config.onoff.memory_cache_first = 1;
        Config.onoff.memory_cache_disk = 1;
-    } else if (strcmp(token, "disk")) {
+    } else if (strcmp(token, "disk") == 0) {
        Config.onoff.memory_cache_first = 0;
        Config.onoff.memory_cache_disk = 1;
     } else if (strncmp(token, "net", 3) == 0) {
        Config.onoff.memory_cache_first = 1;
        Config.onoff.memory_cache_disk = 0;
-    } else if (strncmp(token, "none", 3) == 0) {
+    } else if (strcmp(token, "never") == 0) {
        Config.onoff.memory_cache_first = 0;
        Config.onoff.memory_cache_disk = 0;
     } else
index 2be8cc53602f5ba8ae5982b632a91257daa8469f..29c097384a6631b3f7100c7ce7b292dcbaf1c3f0 100644 (file)
@@ -1839,11 +1839,11 @@ StoreEntry::trimMemory()
     if (mem_status == IN_MEMORY)
         return;
 
-    if (mem_obj->policyLowestOffsetToKeep() == 0)
-        /* Nothing to do */
-        return;
-
     if (!swapOutAble()) {
+       if (mem_obj->policyLowestOffsetToKeep(0) == 0) {
+           /* Nothing to do */
+           return;
+       }
         /*
          * Its not swap-able, and we're about to delete a chunk,
          * so we must make it PRIVATE.  This is tricky/ugly because