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]