Changeset: 2de4e6285792 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2de4e6285792
Modified Files:
        monetdb5/mal/mal_client.h
        monetdb5/mal/mal_instruction.h
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_profiler.h
        monetdb5/mal/mal_runtime.c
        monetdb5/mal/mal_stack.h
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/profiler.c
        monetdb5/modules/mal/profiler.mal
Branch: mutation
Log Message:

Merge with Default


diffs (truncated from 304 to 300 lines):

diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -89,10 +89,9 @@ typedef struct CLIENT {
         * For program debugging we need information on the timer and memory
         * usage patterns.
         */
-       sht     flags;   /* resource tracing flags */
+       sht     flags;   /* resource tracing flags, should be done using 
profiler */
        BUN     cnt;    /* bat count */
 
-#define footprintFlag  16
        time_t      login;  
        time_t      lastcmd;    /* set when input is received */
        lng         qtimeout;   /* query abort after x milliseconds */
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
@@ -107,9 +107,9 @@ typedef struct PERF {
        struct tms timer;                       /* timing information */
 #endif
        struct timeval clock;           /* clock */
-       lng clk;                                        /* microseconds clock */
+       lng clk;                                        /* time when 
instruction started */
        lng ticks;                                      /* micro seconds spent 
on last call */
-       lng totalticks;                         /* accumulate micro seconds 
send on this call */
+       lng totalticks;                         /* accumulate micro seconds 
send on this instruction */
        int calls;                                      /* number of calls seen 
*/
        bit trace;                                      /* facilitate 
filter-based profiling */
        lng rbytes;                                     /* bytes read by an 
instruction */
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
@@ -492,6 +492,7 @@ str runMALsequence(Client cntxt, MalBlkP
        int exceptionVar;
        str ret = 0, localGDKerrbuf= GDKerrbuf;
        int stamp = -1;
+       lng clk=0;
        ValRecord backups[16];
        ValPtr backup;
        int garbages[16], *garbage;
@@ -544,7 +545,7 @@ str runMALsequence(Client cntxt, MalBlkP
 
                runtimeProfileBegin(cntxt, mb, stk, stkpc, &runtimeProfile, 1);
                if (pci->recycle > 0)
-                       stk->clk = GDKms();
+                       clk = GDKms();
                if (!RECYCLEentry(cntxt, mb, stk, pci)){
 /* The interpreter loop
  * The interpreter is geared towards execution a MAL procedure together
@@ -758,7 +759,7 @@ str runMALsequence(Client cntxt, MalBlkP
 
                                /* If needed recycle intermediate result */
                                if (pci->recycle > 0) {
-                                       RECYCLEexit(cntxt, mb, stk, pci, 
stk->clk);
+                                       RECYCLEexit(cntxt, mb, stk, pci, clk);
                                }
 
                                /* general garbage collection */
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -65,29 +65,6 @@ static int profileAll = 0;  /* all instr
 static int delayswitch = 0; /* to wait before sending the profile info */
 static int eventcounter = 0;
 
-#define PROFevent   0
-#define PROFtime    1
-#define PROFthread  2
-#define PROFpc      3
-#define PROFfunc    4
-#define PROFticks   5
-#define PROFcpu     6
-#define PROFmemory  7
-#define PROFreads   8
-#define PROFwrites  9
-#define PROFrbytes  10
-#define PROFwbytes  11
-#define PROFstmt    12
-#define PROFaggr    13
-#define PROFprocess 14
-#define PROFuser    15
-#define PROFstart   16
-#define PROFtype    17
-#define PROFdot     18
-#define PROFflow   19
-#define PROFping   20  /* heartbeat ping messages */
-#define PROFfootprint 21
-
 static struct {
        str name;               /* which logical counter is needed */
        int status;             /* trace it or not */
@@ -117,6 +94,11 @@ static struct {
        /*  21 */  { 0, 0}
 };
 
+int
+getProfileCounter(int idx){
+       return profileCounter[idx].status ==1;
+}
+
 /*
  * The counters can be set individually.
  */
diff --git a/monetdb5/mal/mal_profiler.h b/monetdb5/mal/mal_profiler.h
--- a/monetdb5/mal/mal_profiler.h
+++ b/monetdb5/mal/mal_profiler.h
@@ -57,8 +57,32 @@ typedef struct RECSTAT {
        int RPreset0;     /* Number of instructions evicted from RP by reset() 
due to updates*/
 } *RecPtr, RecStat;
 
+#define PROFevent   0
+#define PROFtime    1
+#define PROFthread  2
+#define PROFpc      3
+#define PROFfunc    4
+#define PROFticks   5
+#define PROFcpu     6
+#define PROFmemory  7
+#define PROFreads   8
+#define PROFwrites  9
+#define PROFrbytes  10
+#define PROFwbytes  11
+#define PROFstmt    12
+#define PROFaggr    13
+#define PROFprocess 14
+#define PROFuser    15
+#define PROFstart   16
+#define PROFtype    17
+#define PROFdot     18
+#define PROFflow   19
+#define PROFping   20  /* heartbeat ping messages */
+#define PROFfootprint 21
+
 mal_export str activateCounter(str name);
 mal_export str deactivateCounter(str name);
+mal_export int getProfileCounter(int idx);
 mal_export str openProfilerStream(stream *fd);
 mal_export str closeProfilerStream(void);
 
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -127,33 +127,42 @@ runtimeProfileFinish(Client cntxt, MalBl
 void
 runtimeProfileBegin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, int stkpc, 
RuntimeProfile prof, int start)
 {
+       if ( mb->profiler == NULL)
+               return;
+
        /* always collect the MAL instruction execution time */
-       if ( mb->profiler)
-               mb->profiler[stkpc].ticks = GDKusec();
        prof->stkpc = stkpc;
+       mb->profiler[stkpc].clk = GDKusec();
 
        if (malProfileMode == 0)
                return; /* mostly true */
        
-       if (stk && mb->profiler != NULL && mb->profiler[stkpc].trace) {
+       if (stk && mb->profiler[stkpc].trace) {
                gettimeofday(&mb->profiler[stkpc].clock, NULL);
                /* emit the instruction upon start as well */
                profilerEvent(cntxt->idx, mb, stk, stkpc, start);
 #ifdef HAVE_TIMES
-               times(&stk->timer);
-               mb->profiler[stkpc].timer = stk->timer;
+               times(&mb->profiler[stkpc].timer);
 #endif
-               mb->profiler[stkpc].clk = mb->profiler[stkpc].ticks;
        }
 }
 
-
 void
 runtimeProfileExit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, 
RuntimeProfile prof)
 {
-       int i,j,fnd, stkpc = prof->stkpc;
+       int i,j,fnd, stkpc;
 
-       if (cntxt->flags & footprintFlag && pci){
+       if ( mb->profiler == NULL)
+               return;
+
+       /* always collect the MAL instruction execution time */
+       stkpc= prof->stkpc;
+       mb->profiler[stkpc].ticks = GDKusec() - mb->profiler[stkpc].clk;
+
+       if (malProfileMode == 0)
+               return; /* mostly true */
+
+       if (getProfileCounter(PROFfootprint) && pci){
                for (i = 0; i < pci->retc; i++)
                        if ( isaBatType(getArgType(mb,pci,i)) && 
stk->stk[getArg(pci,i)].val.bval){
                                /* avoid simple alias operations */
@@ -166,21 +175,16 @@ runtimeProfileExit(Client cntxt, MalBlkP
                        }
        }
 
-       /* always collect the MAL instruction execution time */
-       if ( mb->profiler)
-               mb->profiler[stkpc].ticks = GDKusec() - 
mb->profiler[stkpc].ticks;
-
-       if (malProfileMode == 0)
-               return; /* mostly true */
-
-       if (stk != NULL && prof->stkpc >= 0 && mb->profiler != NULL && 
mb->profiler[stkpc].trace ) {
+       if (stk != NULL && stkpc >= 0 && mb->profiler[stkpc].trace ) {
                gettimeofday(&mb->profiler[stkpc].clock, NULL);
                mb->profiler[stkpc].calls++;
                mb->profiler[stkpc].totalticks += mb->profiler[stkpc].ticks;
-               mb->profiler[stkpc].clk += mb->profiler[stkpc].ticks;
                if (pci) {
-                       mb->profiler[stkpc].rbytes = getVolume(stk, pci, 0);
-                       mb->profiler[stkpc].wbytes = getVolume(stk, pci, 1);
+                       // it is a potential expensive operation
+                       if (getProfileCounter(PROFrbytes))
+                               mb->profiler[stkpc].rbytes = getVolume(stk, 
pci, 0);
+                       if (getProfileCounter(PROFwbytes))
+                               mb->profiler[stkpc].wbytes = getVolume(stk, 
pci, 1);
                }
                profilerEvent(cntxt->idx, mb, stk, stkpc, 0);
        }
diff --git a/monetdb5/mal/mal_stack.h b/monetdb5/mal/mal_stack.h
--- a/monetdb5/mal/mal_stack.h
+++ b/monetdb5/mal/mal_stack.h
@@ -55,11 +55,7 @@ typedef struct MALSTK {
  * It is handy to administer the timing in the stack frame
  * for use in profiling and recylcing instructions.
  */
-#ifdef HAVE_TIMES
-    struct tms timer;   /* timing information */
-#endif
        struct timeval clock;           /* time this stack was created */
-       lng clk;                        /* micro seconds, used by ? */
        char cmd;               /* debugger and runtime communication */
        char status;    /* srunning 'R' uspended 'S', quiting 'Q' */
        int pcup;               /* saved pc upon a recursive all */
diff --git a/monetdb5/modules/mal/batExtensions.c 
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -261,7 +261,7 @@ CMDbatpartition2(Client cntxt, MalBlkPtr
        else
                hval = lval+step;
        bn =  BATslice(b, lval,hval);
-       BATseqbase(bn, lval);
+       BATseqbase(bn, lval + b->hseqbase) ;
        if (bn== NULL){
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.partition",  INTERNAL_OBJ_CREATE);
diff --git a/monetdb5/modules/mal/profiler.c b/monetdb5/modules/mal/profiler.c
--- a/monetdb5/modules/mal/profiler.c
+++ b/monetdb5/modules/mal/profiler.c
@@ -358,26 +358,6 @@ CMDgetSystemTime(lng *ret)
 }
 
 str
-CMDsetFootprintFlag( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
-       (void) mb;
-       (void) stk;
-       (void) pci;
-       cntxt->flags |= footprintFlag;
-       return MAL_SUCCEED;
-}
-
-str
-CMDgetFootprint( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
-       lng *l= getArgReference(stk,pci,0);
-
-       (void) cntxt;
-       (void) mb;
-       *l = stk->tmpspace;
-       cntxt->flags &= ~footprintFlag; // clear it as well
-       return MAL_SUCCEED;
-}
-
-str
 CMDtomograph(int *ret)
 {
        (void) ret;
diff --git a/monetdb5/modules/mal/profiler.mal 
b/monetdb5/modules/mal/profiler.mal
--- a/monetdb5/modules/mal/profiler.mal
+++ b/monetdb5/modules/mal/profiler.mal
@@ -119,20 +119,6 @@ command getSystemTime():lng
 address CMDgetSystemTime
 comment "Obtain the user timing information.";
 
-pattern setFootprintFlag{unsafe}():void
-address CMDsetFootprintFlag
-comment "Trace memory footprint of BATs during query";
-pattern setMemoryFlag{unsafe}():void
-address CMDsetMemoryFlag
-comment "Trace memory accress";
-
-pattern getFootprint():lng
-address CMDgetFootprint
-comment "Get the memory footprint and reset the flag";
-pattern getMemory():lng
-address CMDgetMemory
-comment "Get the amount of memory claimed and reset the flag";
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to