Changeset: 82ba68582e00 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/82ba68582e00
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_profiler.h
        monetdb5/mal/mal_runtime.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_scenario.c
        sql/include/sql_catalog.h
        sql/server/sql_mvc.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: Jan2022_prof_ext
Log Message:

Finished Jan2022_prof_ext. Mirror sql_profiler but with only PC=0 in MAL prog.


diffs (truncated from 559 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1008,7 +1008,7 @@ void freeVariable(MalBlkPtr mb, int vari
 void garbageCollector(Client cntxt, MalBlkPtr mb, MalStkPtr stk, int flag);
 void garbageElement(Client cntxt, ValPtr v);
 const char *generatorRef;
-void generic_event(str face, struct GenericEvent e, int state);
+void genericEvent(str face, struct GenericEvent e);
 MALfcn getAddress(const char *modname, const char *fcnname);
 str getArgDefault(MalBlkPtr mb, InstrPtr p, int idx);
 ptr getArgReference(MalStkPtr stk, InstrPtr pci, int k);
@@ -1249,7 +1249,7 @@ const char *printRef;
 void printSignature(stream *fd, Symbol s, int flg);
 void printStack(stream *f, MalBlkPtr mb, MalStkPtr s);
 const char *prodRef;
-void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, 
int start);
+void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 void profilerGetCPUStat(lng *user, lng *nice, lng *sys, lng *idle, lng 
*iowait);
 void profilerHeartbeatEvent(char *alter);
 const char *profilerRef;
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -188,6 +188,8 @@ MCresetProfiler(stream *fdout)
 void
 MCexitClient(Client c)
 {
+       lng Tend;
+
        MCresetProfiler(c->fdout);
        // Remove any left over constant symbols
        if( c->curprg)
@@ -205,10 +207,11 @@ MCexitClient(Client c)
                c->fdout = NULL;
                c->fdin = NULL;
        }
+       Tend = GDKusec();
        if(malProfileMode > 0)
-               generic_event("client_connection",
-                                        (struct GenericEvent) { &c->idx, NULL, 
NULL, NULL, 0 },
-                                         1);
+               genericEvent("client_connection",
+                                        (struct GenericEvent)
+                                        { &c->idx, NULL, NULL, NULL, 
Tend-(c->session), Tend, 0 });
        setClientContext(NULL);
 }
 
@@ -303,10 +306,6 @@ MCinitClient(oid user, bstream *fin, str
                (void) c_old;
                assert(NULL == c_old);
                c = MCinitClientRecord(c, user, fin, fout);
-               if(malProfileMode > 0)
-                       generic_event("client_connection",
-                                                (struct GenericEvent) { 
&c->idx, NULL, NULL, NULL, 0 },
-                                                0);
        }
        MT_lock_unset(&mal_contextLock);
        return c;
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
@@ -184,11 +184,10 @@ logadd(struct logbuf *logbuf, const char
  * Profiling a generic event follows the same implementation of ProfilerEvent.
  */
 static str
-prepare_generic_event(str phase, struct GenericEvent e, int state)
+prepareGenericEvent(str phase, struct GenericEvent e)
 {
        struct logbuf logbuf = {0};
-       lng clk = GDKusec();
-       uint64_t mclk = (uint64_t)clk - ((uint64_t)startup_time.tv_sec*1000000 
- (uint64_t)startup_time.tv_usec);
+       uint64_t mclk = (uint64_t)e.clk - 
((uint64_t)startup_time.tv_sec*1000000 - (uint64_t)startup_time.tv_usec);
 
        if (logadd(&logbuf,
                           "{"
@@ -197,7 +196,8 @@ prepare_generic_event(str phase, struct 
                           ",\"mclk\":%"PRIu64""
                           ",\"thread\":%d"
                           ",\"phase\":\"%s\""
-                          ",\"state\":\"%s\""
+                          ",\"state\":\"done\""
+                          ",\"usec\":"LLFMT
                           ",\"clientid\":\"%d\""
                           ",\"transactionid\":"ULLFMT
                           ",\"tag\":"OIDFMT
@@ -205,11 +205,11 @@ prepare_generic_event(str phase, struct 
                           ",\"rc\":\"%d\""
                           "}\n",
                           mercurial_revision(),
-                          clk,
+                          e.clk,
                           mclk,
                           THRgettid(),
                           phase,
-                          state ? "done" : "start",
+                          e.usec,
                           e.cid ? *e.cid : 0,
                           e.tid ? *e.tid : 0,
                           e.tag ? *e.tag : 0,
@@ -223,11 +223,11 @@ prepare_generic_event(str phase, struct 
 }
 
 static void
-render_generic_event(str msg, struct GenericEvent e, int state)
+renderGenericEvent(str msg, struct GenericEvent e)
 {
        str event;
        MT_lock_set(&mal_profileLock);
-       event = prepare_generic_event(msg, e, state);
+       event = prepareGenericEvent(msg, e);
        if( event ){
                logjsonInternal(event, true);
                free(event);
@@ -236,12 +236,10 @@ render_generic_event(str msg, struct Gen
 }
 
 void
-generic_event(str msg, struct GenericEvent e, int state)
+genericEvent(str msg, struct GenericEvent e)
 {
-       if (state == 0) return; // ignore start of non-mal event
-       if( maleventstream ) {
-               render_generic_event(msg, e, state);
-       }
+       if( maleventstream )
+               renderGenericEvent(msg, e);
 }
 
 /* JSON rendering method of performance data.
@@ -259,7 +257,7 @@ generic_event(str msg, struct GenericEve
  "stmt":"X_41=0@0:void := querylog.define(\"select count(*) from 
tables;\":str,\"default_pipe\":str,30:int);",
 */
 static str
-prepareProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, 
int start)
+prepareProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        struct logbuf logbuf;
        str c;
@@ -273,7 +271,7 @@ prepareProfilerEvent(Client cntxt, MalBl
         * they may appear when BARRIER blocks are executed
         * The default parameter should be sufficient for most practical cases.
         */
-       if( !start && pci->calls > HIGHWATERMARK){
+       if(pci->calls > HIGHWATERMARK){
                if( pci->calls == 10000 || pci->calls == 100000 || pci->calls 
== 1000000 || pci->calls == 10000000)
                        TRC_WARNING(MAL_SERVER, "Too many calls: %d\n", 
pci->calls);
                return NULL;
@@ -286,7 +284,7 @@ prepareProfilerEvent(Client cntxt, MalBl
                return NULL;
 
        /* align the variable namings with EXPLAIN and TRACE */
-       if( pci->pc == 1 && start)
+       if(pci->pc == 1)
                renameVariables(mb);
 
        logbuf = (struct logbuf) {0};
@@ -337,8 +335,7 @@ prepareProfilerEvent(Client cntxt, MalBl
                } else
                        free(c);
        }
-       if (!logadd(&logbuf, ",\"state\":\"%s\",\"usec\":"LLFMT,
-                               start?"start":"done", pci->ticks))
+       if (!logadd(&logbuf, ",\"state\":\"done\",\"usec\":"LLFMT, pci->ticks))
                goto cleanup_and_exit;
        if (algo && !logadd(&logbuf, ",\"algorithm\":\"%s\"", algo))
                goto cleanup_and_exit;
@@ -547,11 +544,11 @@ prepareProfilerEvent(Client cntxt, MalBl
 }
 
 static void
-renderProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, 
int start)
+renderProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        str ev;
        MT_lock_set(&mal_profileLock);
-       ev = prepareProfilerEvent(cntxt, mb, stk, pci, start);
+       ev = prepareProfilerEvent(cntxt, mb, stk, pci);
        if( ev ){
                logjsonInternal(ev, true);
                free(ev);
@@ -697,21 +694,20 @@ profilerHeartbeatEvent(char *alter)
 }
 
 void
-profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int 
start)
+profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
        if (stk == NULL) return;
        if (pci == NULL) return;
        if (getModuleId(pci) == myname) // ignore profiler commands from 
monitoring
                return;
-       if (start == TRUE) return; // ignore start of mal event
        if ( mb && (getPC(mb,pci) != 0)) return; // ignore event that are not 
PC = 0
 
        if(maleventstream) {
-               renderProfilerEvent(cntxt, mb, stk, pci, start);
-               if (!start && pci->pc ==0)
+               renderProfilerEvent(cntxt, mb, stk, pci);
+               if (pci->pc == 0)
                        profilerHeartbeatEvent("ping");
-               if (start && pci->token == ENDsymbol)
+               if (pci->token == ENDsymbol)
                        profilerHeartbeatEvent("ping");
        }
 }
@@ -762,7 +758,7 @@ openProfilerStream(Client cntxt)
                if( c && m && s && p ) {
                        /* show the event  assuming the quadruple is aligned*/
                        MT_lock_unset(&mal_profileLock);
-                       profilerEvent(c, m, s, p, 1);
+                       profilerEvent(c, m, s, p);
                        MT_lock_set(&mal_profileLock);
                }
        }
@@ -964,7 +960,7 @@ sqlProfilerEvent(Client cntxt, MalBlkPtr
                c++;
 */
 
-       ev = prepareProfilerEvent(cntxt, mb, stk, pci, 0);
+       ev = prepareProfilerEvent(cntxt, mb, stk, pci);
        // keep it a short transaction
        MT_lock_set(&mal_profileLock);
        if (cntxt->profticks == NULL) {
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
@@ -22,9 +22,11 @@ typedef struct rusage Rusage;
 
 struct GenericEvent {
        int* cid;  /* client_id */
-       oid* tag;
+       oid* tag;  /* tag of the assoc MAL block */
        ulng* tid; /* transaction_id */
-       str query;
+       str query; /* statement */
+       lng usec;  /* event duration */
+       lng clk;   /* GDKusec in callside */
        int rc;    /* return code */
 };
 
@@ -34,8 +36,8 @@ mal_export void initProfiler(void);
 mal_export str openProfilerStream(Client cntxt);
 mal_export str closeProfilerStream(Client cntxt);
 
-mal_export void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci, int start);
-mal_export void generic_event(str phase, struct GenericEvent e, int state);
+mal_export void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export void genericEvent(str phase, struct GenericEvent e);
 mal_export void sqlProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
 mal_export str startProfiler(Client cntxt);
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
@@ -394,10 +394,6 @@ runtimeProfileBegin(Client cntxt, MalBlk
        }
        /* always collect the MAL instruction execution time */
        pci->clock = prof->ticks = GDKusec();
-
-       /* emit the instruction upon start as well */
-       /* if(malProfileMode > 0 ) */
-       /*      profilerEvent(cntxt, mb, stk, pci, TRUE); */
 }
 
 /* At the end of each MAL stmt */
@@ -426,7 +422,7 @@ runtimeProfileExit(Client cntxt, MalBlkP
        pci->calls++;
 
        if(malProfileMode > 0 )
-               profilerEvent(cntxt, mb, stk, pci, FALSE);
+               profilerEvent(cntxt, mb, stk, pci);
        if( cntxt->sqlprofiler )
                sqlProfilerEvent(cntxt, mb, stk, pci);
        if( malProfileMode < 0){
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -121,28 +121,19 @@ sql_symbol2relation(backend *be, symbol 
 {
        sql_rel *rel;
        sql_query *query = query_create(be->mvc);
-       lng Tbegin;
+       lng Tbegin = 0;
+       lng Tend = 0;
        int extra_opts = be->mvc->emode != m_prepare;
        Client c = getClientContext();
 
+       Tbegin = GDKusec();
+       rel = rel_semantic(query, sym);
+       Tend = GDKusec();
+
        if(malProfileMode > 0 )
-               generic_event("sql_to_rel",
-                                         (struct GenericEvent)
-                                         { &(c->idx), &(c->curprg->def->tag), 
NULL, NULL, 0 },
-                                         0);
-
-       rel = rel_semantic(query, sym);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to