Changeset: 0133cd60b9bf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0133cd60b9bf
Modified Files:
        monetdb5/mal/mal_recycle.c
        monetdb5/mal/mal_recycle.h
Branch: default
Log Message:

Minor memory footprint improvements


diffs (112 lines):

diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -268,7 +268,6 @@ static void RECYCLEcleanCache(Client cnt
        int k, *leaves, *vm;
        int limit, idx;
        size_t mem;
-       int cont;
        lng oldclk,wr;
        dbl minben, ben;
        bte *used;
@@ -277,12 +276,8 @@ static void RECYCLEcleanCache(Client cnt
 newpass:
        if (recycleBlk->stop == 0)
                return;
-       cont = 0;
-       wr = GDKmem_cursize() -  MEMORY_THRESHOLD * monet_memory;
-       if ( wr < 0 && recycleBlk->stop < recycleCacheLimit)
+       if ( GDKmem_cursize() <  MEMORY_THRESHOLD * monet_memory && 
recycleBlk->stop < recycleCacheLimit)
                return;
-       if ( wr < 0)
-               wr=0;
 
        used = (bte*)GDKzalloc(recycleBlk->vtop);
 
@@ -338,6 +333,7 @@ newpass:
 
 
 #ifdef _DEBUG_CACHE_
+               wr = recyclerMemoryUsed - MEMORY_THRESHOLD * monet_memory;
         mnstr_printf(cntxt->fdout,"#RECYCLEcleanCache: usedmem="LLFMT" target 
memory freed "LLFMT"\n", recyclerMemoryUsed, wr);
         mnstr_printf(cntxt->fdout,"#Candidates for 
eviction\n#LRU\t\tTicks\tLife\tSZ\tCnt\tWgt\tBen\tProf)\n");
                for (l = 0; l < ltop; l++)
@@ -367,6 +363,7 @@ newpass:
                }
                vm[vtop++] = leaves[idx];
        } else {        /* evict several to get enough memory */
+               wr = recyclerMemoryUsed - MEMORY_THRESHOLD * monet_memory;
                k = 0;  /* exclude binds that don't free memory */
                for (l = 0; l < ltop; l++) {
                        // also discard leaves that are more expensive to find 
then compute
@@ -377,7 +374,7 @@ newpass:
                }
                if ( k > 0 )
                        ltop = k;
-               vtop = chooseVictims(cntxt,leaves, ltop, (wr<0?0:wr) );
+               vtop = chooseVictims(cntxt,leaves, ltop, wr);
                wr=0;
                for (v = 0; v < vtop; v++){
                        vm[v] = leaves[v];
@@ -385,10 +382,6 @@ newpass:
                }
        }
 
-       /* check if a new pass of cache cleaning is needed */
-       if ( (size_t)(recyclerMemoryUsed - wr) > MEMORY_THRESHOLD * 
monet_memory )
-               cont = 1;
-
 #ifdef _DEBUG_CACHE_
        mnstr_printf(cntxt->fdout,"#Evicted %d instruction(s) \n",vtop);
        for(v=0; v<vtop;v++){
@@ -430,13 +423,16 @@ newpass:
                }
        }
 
+
        GDKfree(old);
        GDKfree(used);
        /* remove all un-used variables as well */
        trimMalVariables(recycleBlk);
 
        GDKfree(dmask);
-       if (cont) goto newpass;
+       /* check if a new pass of cache cleaning is needed */
+       if ( (size_t)recyclerMemoryUsed > MEMORY_THRESHOLD * monet_memory )
+       goto newpass;
 }
 
 #ifdef _DEBUG_CACHE_
@@ -925,7 +921,8 @@ RECYCLEexitImpl(Client cntxt, MalBlkPtr 
                return;
 
        MT_lock_set(&recycleLock, "recycle");
-       RECYCLEcleanCache(cntxt, mb->profiler[0].clk);
+       if ( (GDKmem_cursize() >  MEMORY_THRESHOLD * monet_memory  && 
recyclerMemoryUsed > MEMORY_THRESHOLD * monet_memory) || recycleBlk->stop == 
recycleCacheLimit)
+               RECYCLEcleanCache(cntxt, mb->profiler[0].clk);
 
        if ( RECYCLEinterest(p)){
                /* infinite case, admit all new instructions */
@@ -1134,8 +1131,8 @@ RECYCLEdumpInternal(stream *s)
 
     if (!recycleBlk) return;
 
-    mnstr_printf(s,"#RECYCLER CATALOG cache limit= %d cached %d memory "SZFMT" 
\n", recycleCacheLimit, recycleBlk->stop,monet_memory);
-    mnstr_printf(s,"#MAL recycled = "LLFMT" savings= "LLFMT"(usec) total MAL 
executed = "LLFMT" memory(KB)= "LLFMT" searchtime="LLFMT"(usec)\n",
+    mnstr_printf(s,"#RECYCLER CATALOG cached %d memory ", recycleBlk->stop);
+    mnstr_printf(s,"MAL recycled = "LLFMT" savings= "LLFMT"(usec) total MAL 
executed = "LLFMT" memory(KB)= "LLFMT" searchtime="LLFMT"(usec)\n",
          recycled, recyclerSavings, statements, 
recyclerMemoryUsed,recycleSearchTime);
 
 #ifdef _DEBUG_CACHE_
diff --git a/monetdb5/mal/mal_recycle.h b/monetdb5/mal/mal_recycle.h
--- a/monetdb5/mal/mal_recycle.h
+++ b/monetdb5/mal/mal_recycle.h
@@ -33,7 +33,7 @@
 /*
  * We need some hard limits to not run out of datastructure spaces.
  */
-#define HARDLIMIT_STMT 5000            /* roughly 5/line needed */
+#define HARDLIMIT_STMT 5000
 
 #define NO_RECYCLING -1
 #define RECYCLING 1
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to