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

Improve genericEvent call. Remove state. Calc clk on caller side.


diffs (truncated from 358 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
@@ -1000,7 +1000,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 phase, 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);
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
@@ -190,6 +190,8 @@ MCresetProfiler(stream *fdout)
 void
 MCexitClient(Client c)
 {
+       lng Tend = GDKusec();
+
        MCresetProfiler(c->fdout);
        // Remove any left over constant symbols
        if( c->curprg)
@@ -208,9 +210,9 @@ MCexitClient(Client c)
                c->fdin = NULL;
        }
        if(malProfileMode > 0)
-               generic_event("client_connection",
-                                         (struct GenericEvent) { &c->idx, 
NULL, NULL, NULL, c->session, 0 },
-                                         1);
+               genericEvent("client_connection",
+                                        (struct GenericEvent)
+                                        { &c->idx, NULL, NULL, NULL, 
Tend-(c->session), Tend, 0 });
        setClientContext(NULL);
 }
 
@@ -301,10 +303,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, c->session, 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,7 @@ prepare_generic_event(str phase, struct 
                           ",\"mclk\":%"PRIu64""
                           ",\"thread\":%d"
                           ",\"phase\":\"%s\""
-                          ",\"state\":\"%s\""
+                          ",\"state\":\"done\""
                           ",\"usec\":"LLFMT
                           ",\"clientid\":\"%d\""
                           ",\"transactionid\":"ULLFMT
@@ -206,11 +205,10 @@ 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,
@@ -225,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);
@@ -238,11 +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( maleventstream ) {
-               render_generic_event(msg, e, state);
-       }
+       if( maleventstream )
+               renderGenericEvent(msg, e);
 }
 
 /* JSON rendering method of performance data.
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,10 +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;
-       lng usec;
+       str query; /* statement */
+       lng usec;  /* event duration */
+       lng clk;   /* GDKusec in callside */
        int rc;    /* return code */
 };
 
@@ -36,7 +37,7 @@ mal_export str openProfilerStream(Client
 mal_export str closeProfilerStream(Client cntxt);
 
 mal_export void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-mal_export void generic_event(str phase, struct GenericEvent e, int state);
+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/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -124,18 +124,18 @@ sql_symbol2relation(backend *be, symbol 
 {
        sql_rel *rel;
        sql_query *query = query_create(be->mvc);
-       lng Tbegin;
+       lng Tbegin, Tend;
        int value_based_opt = be->mvc->emode != m_prepare, storage_based_opt;
        int profile = be->mvc->emode == m_plan;
        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, GDKusec()-Tbegin, rel ? 0 : 1 },
-                                         1);
+               genericEvent("sql_to_rel",
+                                        (struct GenericEvent)
+                                        { &(c->idx), &(c->curprg->def->tag), 
NULL, NULL, Tend-Tbegin, Tend, rel ? 0 : 1 });
 
        storage_based_opt = value_based_opt && rel && !is_ddl(rel->op);
        Tbegin = GDKusec();
@@ -145,13 +145,13 @@ sql_symbol2relation(backend *be, symbol 
                rel = rel_partition(be->mvc, rel);
        if (rel && (rel_no_mitosis(be->mvc, rel) || 
rel_need_distinct_query(rel)))
                be->no_mitosis = 1;
-       be->reloptimizer = GDKusec() - Tbegin;
+       Tend = GDKusec();
+       be->reloptimizer = Tend - Tbegin;
 
        if(malProfileMode > 0)
-               generic_event("rel_opt",
-                                         (struct GenericEvent)
-                                         { &c->idx, &(c->curprg->def->tag), 
NULL, NULL, be->reloptimizer, rel ? 0 : 1},
-                                         1);
+               genericEvent("rel_opt",
+                                        (struct GenericEvent)
+                                        { &c->idx, &(c->curprg->def->tag), 
NULL, NULL, be->reloptimizer, Tend, rel ? 0 : 1});
        return rel;
 }
 
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -971,7 +971,7 @@ SQLparser(Client c)
        int pstatus = 0;
        int err = 0, opt, preparedid = -1;
        oid tag = 0;
-       lng Tbegin;
+       lng Tbegin, Tend;
 
        c->query = NULL;
        be = (backend *) c->sqlcontext;
@@ -1142,13 +1142,12 @@ SQLparser(Client c)
         */
        be->q = NULL;
        c->query = query_cleaned(m->sa, QUERY(m->scanner));
-
+       Tend = GDKusec();
        if(malProfileMode > 0) {
                str escaped_query = c->query? mal_quote(c->query, 
strlen(c->query)) : NULL;
-               generic_event("sql_parse",
+               genericEvent("sql_parse",
                                          (struct GenericEvent)
-                                         { &c->idx, &(c->curprg->def->tag), 
NULL, escaped_query, GDKusec()-Tbegin, c->query? 0 : 1 },
-                                         1);
+                                        { &c->idx, &(c->curprg->def->tag), 
NULL, escaped_query, Tend-Tbegin, Tend, c->query? 0 : 1 });
                GDKfree(escaped_query);
        }
 
@@ -1214,11 +1213,11 @@ SQLparser(Client c)
                        else
                                opt = (m->emod & mod_exec) == 0;//1;
 
+                       Tend = GDKusec();
                        if(malProfileMode > 0)
-                               generic_event("rel_to_mal",
-                                                         (struct GenericEvent)
-                                                         { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, GDKusec()-Tbegin, c->query? 0 : 1 },
-                                                         1);
+                               genericEvent("rel_to_mal",
+                                                        (struct GenericEvent)
+                                                        { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, Tend-Tbegin, Tend, c->query? 0 : 1 });
                } else {
                        char *q_copy = sa_strdup(m->sa, c->query);
 
@@ -1299,12 +1298,11 @@ SQLparser(Client c)
 
                        Tbegin = GDKusec();
                        msg = SQLoptimizeQuery(c, c->curprg->def);
-
+                       Tend = GDKusec();
                        if(malProfileMode > 0)
-                               generic_event("mal_opt",
-                                                         (struct GenericEvent)
-                                                         { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, GDKusec()-Tbegin, msg == MAL_SUCCEED? 0 : 1 
},
-                                                         1);
+                               genericEvent("mal_opt",
+                                                        (struct GenericEvent)
+                                                        { &c->idx, 
&(c->curprg->def->tag), NULL, NULL, Tend-Tbegin, Tend, msg == MAL_SUCCEED? 0 : 
1 });
 
                        if (msg != MAL_SUCCEED) {
                                str other = c->curprg->def->errors;
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -125,13 +125,12 @@ mvc_fix_depend(mvc *m, sql_column *depid
 }
 
 static void
-generic_event_wrapper(str phase, ulng tid, lng usec, int rc, int state)
+generic_event_wrapper(str phase, ulng tid, lng usec, lng clk, int rc)
 {
        if(malProfileMode > 0)
-               generic_event(phase,
-                                         (struct GenericEvent)
-                                         { NULL, NULL, &tid, NULL, usec, rc },
-                                         state);
+               genericEvent(phase,
+                                        (struct GenericEvent)
+                                        { NULL, NULL, &tid, NULL, usec, clk, 
rc });
 }
 
 sql_store
@@ -489,11 +488,6 @@ mvc_trans(mvc *m)
        res = sql_trans_begin(m->session);
 
        m->session->tr->ts2 = GDKusec();
-       if(malProfileMode > 0)
-               generic_event("transaction",
-                                         (struct GenericEvent)
-                                         { NULL, NULL, &(m->session->tr->tid), 
NULL, GDKusec(), (res || err)? 1 : 0 },
-                                         0);
 
        if (m->qc && (res || err)) {
                int seqnr = m->qc->id;
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -331,7 +331,7 @@ extern res_table *res_tables_remove(res_
 sql_export void res_tables_destroy(res_table *results);
 extern res_table *res_tables_find(res_table *results, int res_id);
 
-typedef void (*generic_event_wrapper_fptr) (str phase, ulng tid, lng usec, int 
rc, int state);
+typedef void (*generic_event_wrapper_fptr) (str phase, ulng tid, lng usec, lng 
clk, int rc);
 extern struct sqlstore *store_init(int debug, store_type store, int readonly, 
int singleuser, generic_event_wrapper_fptr event_wrapper);
 extern void store_exit(struct sqlstore *store);
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3580,6 +3580,7 @@ sql_trans_rollback(sql_trans *tr, bool c
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to