Changeset: 8d8a7afbd1a8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8d8a7afbd1a8
Modified Files:
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: Jul2021_prof_ext
Log Message:
Finished Jul2021_prof_ext. Mirror sql_profiler but with only PC=0 in MAL prog.
diffs (truncated from 482 to 300 lines):
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
@@ -202,10 +202,12 @@ MCexitClient(Client c)
c->fdout = NULL;
c->fdin = NULL;
}
- if(malProfileMode > 0)
- generic_event("client_connection",
- (struct GenericEvent) { &c->idx,
NULL, NULL, NULL, 0 },
- 1);
+ if(malProfileMode > 0) {
+ lng Tend = GDKusec();
+ 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, 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
@@ -182,7 +182,7 @@ 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();
@@ -195,7 +195,7 @@ prepare_generic_event(str phase, struct
",\"mclk\":%"PRIu64""
",\"thread\":%d"
",\"phase\":\"%s\""
- ",\"state\":\"%s\""
+ ",\"state\":\"done\""
",\"clientid\":\"%d\""
",\"transactionid\":"ULLFMT
",\"tag\":"OIDFMT
@@ -207,7 +207,6 @@ prepare_generic_event(str phase, struct
mclk,
THRgettid(),
phase,
- state ? "done" : "start",
e.cid ? *e.cid : 0,
e.tid ? *e.tid : 0,
e.tag ? *e.tag : 0,
@@ -221,11 +220,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);
@@ -234,11 +233,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);
+ renderGenericEvent(msg, e);
}
}
@@ -257,7 +255,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 void
-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;
@@ -270,7 +268,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;
@@ -330,8 +328,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))
return;
const char *algo = MT_thread_getalgorithm();
if (algo && !logadd(&logbuf, ",\"algorithm\":\"%s\"", algo))
@@ -532,10 +529,10 @@ 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)
{
MT_lock_set(&mal_profileLock);
- prepareProfilerEvent(cntxt, mb, stk, pci, start);
+ prepareProfilerEvent(cntxt, mb, stk, pci);
MT_lock_unset(&mal_profileLock);
}
@@ -677,21 +674,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");
}
}
@@ -733,7 +729,7 @@ openProfilerStream(Client cntxt)
for(j = 0; j <THREADS; j++)
if(workingset[j].mb)
/* show the event */
- profilerEvent(workingset[j].cntxt, workingset[j].mb,
workingset[j].stk, workingset[j].pci, 1);
+ profilerEvent(workingset[j].cntxt, workingset[j].mb,
workingset[j].stk, workingset[j].pci);
MT_lock_unset(&mal_delayLock);
MT_lock_unset(&mal_profileLock);
return MAL_SUCCEED;
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
@@ -435,7 +435,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
@@ -124,27 +124,20 @@ sql_symbol2relation(backend *be, symbol
{
sql_rel *rel;
sql_query *query = query_create(be->mvc);
- lng Tbegin;
+ lng Tbegin, Tend;
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);
- if(malProfileMode > 0 ) {
- generic_event("sql_to_rel",
- (struct GenericEvent)
- { &(c->idx), &(c->curprg->def->tag),
NULL, NULL, rel ? 0 : 1 },
- 1);
- generic_event("rel_opt",
- (struct GenericEvent)
- { &(c->idx), &(c->curprg->def->tag),
NULL, NULL, 0 },
- 0);
- }
- Tbegin = GDKusec();
+ genericEvent("sql_to_rel",
+ (struct GenericEvent)
+ { &(c->idx), &(c->curprg->def->tag),
NULL, NULL, Tend-Tbegin, Tend, rel ? 0 : 1 });
+
+ Tbegin = Tend;
if (rel)
rel = sql_processrelation(be->mvc, rel, extra_opts, extra_opts);
if (rel)
@@ -153,12 +146,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, 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
@@ -972,6 +972,8 @@ SQLparser(Client c)
int pstatus = 0;
int err = 0, opt, preparedid = -1;
oid tag = 0;
+ lng Tbegin = 0;
+ lng Tend = 0;
c->query = NULL;
be = (backend *) c->sqlcontext;
@@ -1115,11 +1117,7 @@ SQLparser(Client c)
assert(tag == c->curprg->def->tag);
(void) tag;
- if(malProfileMode > 0)
- generic_event("sql_parse",
- (struct GenericEvent)
- { &c->idx, &(c->curprg->def->tag),
NULL, NULL, 0 },
- 0);
+ Tbegin = GDKusec();
if ((err = sqlparse(m)) ||
/* Only forget old errors on transaction boundaries */
@@ -1147,12 +1145,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",
- (struct GenericEvent)
- { &c->idx, &(c->curprg->def->tag),
NULL, escaped_query, c->query? 0 : 1 },
- 1);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]