Changeset: 2a307af114a0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2a307af114a0 Modified Files: monetdb5/mal/mal_dataflow.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_recycle.c monetdb5/mal/mal_resource.c monetdb5/mal/mal_resource.h Branch: default Log Message:
Catch timer and update resource management diffs (137 lines): diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c --- a/monetdb5/mal/mal_dataflow.c +++ b/monetdb5/mal/mal_dataflow.c @@ -255,7 +255,6 @@ DFLOWworker(void *t) str error = 0; int i; - lng usec = 0; thr = THRnew("DFLOWworker"); @@ -280,7 +279,6 @@ DFLOWworker(void *t) continue; } - usec = GDKusec(); /* skip all instructions when we have encontered an error */ if (flow->error == 0) { #ifdef USE_MAL_ADMISSION @@ -350,7 +348,8 @@ DFLOWworker(void *t) if (todo->last == 0) profilerHeartbeatEvent("wait"); else - MALresourceFairness(usec); + if ( flow->cntxt->idx > 1 ) + MALresourceFairness(GDKusec()- flow->mb->starttime); } } GDKfree(GDKerrbuf); diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -145,6 +145,7 @@ typedef struct MALBLK { lng recid; /* Recycler identifier */ lng legid; /* Octopus control */ sht trap; /* call debugger when called */ + lng starttime; /* track when the query started, for resource management */ lng runtime; /* average execution time of block in ticks */ int calls; /* number of calls */ lng optimize; /* total optimizer time */ diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c --- a/monetdb5/mal/mal_interpreter.c +++ b/monetdb5/mal/mal_interpreter.c @@ -379,9 +379,8 @@ str runMAL(Client cntxt, MalBlkPtr mb, M env->cmd = stk->cmd; if (!stk->keepAlive && garbageControl(getInstrPtr(mb, 0))) garbageCollector(cntxt, mb, stk, env != stk); - if (stk && stk != env) { + if (stk && stk != env) GDKfree(stk); - } if (cntxt->qtimeout && GDKms() > cntxt->qtimeout) throw(MAL, "mal.interpreter", RUNTIME_QRY_TIMEOUT); return ret; @@ -519,6 +518,7 @@ str runMALsequence(Client cntxt, MalBlkP if ( startpc == 1 ){ runtimeProfileInit(cntxt, mb, stk); runtimeProfileBegin(cntxt, mb, stk, 0, &runtimeProfileFunction, 1); + mb->starttime = GDKusec(); } stkpc = startpc; exceptionVar = -1; @@ -545,6 +545,7 @@ str runMALsequence(Client cntxt, MalBlkP } } + //Ensure we spread system resources over multiple users as well. runtimeProfileBegin(cntxt, mb, stk, stkpc, &runtimeProfile, 1); if (!RECYCLEentry(cntxt, mb, stk, pci,&runtimeProfile)){ /* The interpreter loop @@ -765,9 +766,10 @@ str runMALsequence(Client cntxt, MalBlkP } /* If needed recycle intermediate result */ - if (pci->recycle > 0) { + if (pci->recycle > 0) RECYCLEexit(cntxt, mb, stk, pci, &runtimeProfile); - } + if ( cntxt->idx > 1 ) + MALresourceFairness(GDKusec()- mb->starttime); /* general garbage collection */ if (ret == MAL_SUCCEED && garbageControl(pci)) { 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 @@ -922,7 +922,7 @@ RECYCLEexitImpl(Client cntxt, MalBlkPtr MT_lock_set(&recycleLock, "recycle"); if ( (GDKmem_cursize() > MEMORY_THRESHOLD * monet_memory && recyclerMemoryUsed > MEMORY_THRESHOLD * monet_memory) || recycleBlk->stop == recycleCacheLimit) - RECYCLEcleanCache(cntxt, mb->profiler[0].clk); + RECYCLEcleanCache(cntxt, mb->starttime); if ( RECYCLEinterest(p)){ /* infinite case, admit all new instructions */ diff --git a/monetdb5/mal/mal_resource.c b/monetdb5/mal/mal_resource.c --- a/monetdb5/mal/mal_resource.c +++ b/monetdb5/mal/mal_resource.c @@ -196,15 +196,12 @@ MALresourceFairness(lng usec) #endif #endif - if ( usec > 0 && ( (usec = GDKusec()-usec)) <= TIMESLICE ) - return; - threads = GDKnr_threads > 0 ? GDKnr_threads : 1; - /* use GDKmem_cursize as MT_getrss(); is to expensive */ rss = GDKmem_cursize(); /* ample of memory available*/ - if ( rss < MEMORY_THRESHOLD * monet_memory) + if ( rss < MEMORY_THRESHOLD * monet_memory && usec <= TIMESLICE) return; + threads = GDKnr_threads > 0 ? GDKnr_threads : 1; /* worker reporting time spent in usec! */ clk = usec / 1000; @@ -226,7 +223,7 @@ MALresourceFairness(lng usec) } MT_sleep_ms(delay); rss = GDKmem_cursize(); - } + } else break; clk -= DELAYUNIT; } ATOMIC_INC_int(running, runningLock, "MALresourceFairness"); diff --git a/monetdb5/mal/mal_resource.h b/monetdb5/mal/mal_resource.h --- a/monetdb5/mal/mal_resource.h +++ b/monetdb5/mal/mal_resource.h @@ -22,7 +22,7 @@ #include "mal_interpreter.h" -#define TIMESLICE 2000 /* ms */ +#define TIMESLICE 2000000 /* usec */ #define DELAYUNIT 5 /* ms delay in parallel processing decisions */ #define USE_MAL_ADMISSION _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list