Changeset: bd1a1456ac3d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bd1a1456ac3d
Modified Files:
monetdb5/extras/dvf/Tests/mseed_schema.sql
monetdb5/modules/mal/recycle.c
monetdb5/modules/mal/recycle.h
monetdb5/modules/mal/recycle.mal
Branch: DVframework
Log Message:
Added a minimalistic function recycle.dumpcache, which returns a string with
the information about the cached files needed by the VLDB2013 demo.
diffs (189 lines):
diff --git a/monetdb5/extras/dvf/Tests/mseed_schema.sql
b/monetdb5/extras/dvf/Tests/mseed_schema.sql
--- a/monetdb5/extras/dvf/Tests/mseed_schema.sql
+++ b/monetdb5/extras/dvf/Tests/mseed_schema.sql
@@ -117,3 +117,7 @@ FROM mseed.files AS f
--
-- COPY INTO mseed.data FROM
'/export/scratch2/kargin/csv/mseed_example_data.csv';
+-- To dump information of the cached files
+CREATE FUNCTION dumpcache()
+RETURNS STRING EXTERNAL NAME recycle.dumpcache;
+
diff --git a/monetdb5/modules/mal/recycle.c b/monetdb5/modules/mal/recycle.c
--- a/monetdb5/modules/mal/recycle.c
+++ b/monetdb5/modules/mal/recycle.c
@@ -75,6 +75,50 @@ RECYCLEresetCMD(Client cntxt, MalBlkPtr
return MAL_SUCCEED;
}
+str
+RECYCLEdumpCache(str *res)
+{
+ int i = 0, used = 0, sz = 8192;
+ str s = (str) GDKmalloc(sz);
+
+ if (s == NULL) {
+ throw(MAL,"recycle.dumpcache", MAL_MALLOC_FAIL);
+ }
+
+ if (!recycleBlk) {
+ sprintf(s, "Empty cache\n");
+ } else {
+ /* dump the statistics per instruction*/
+ used =
sprintf(s,"CacheID\tTimeAdded\tNrReuses\tTimeLastAccess\tInstr\n");
+ for(i=0; i< recycleBlk->stop; i++) {
+ if (getInstrPtr(recycleBlk,i)->token == NOOPsymbol) {
+ used += sprintf(s+used,"#NOOP ");
+ } else {
+ used +=
sprintf(s+used,"%6d\t"LLFMT"\t%7d\t"LLFMT"\t%s\n",
+ i+1,
+ recycleBlk->profiler[i].clk,
+ recycleBlk->profiler[i].calls-1,
+ recycleBlk->profiler[i].ticks,
+
instruction2str(recycleBlk,0,getInstrPtr(recycleBlk,i),TRUE));
+ }
+
+ if (sz - used < 256) {
+ str tmp;
+ sz *= 1.5;
+ tmp = GDKrealloc(s, sz);
+ if (tmp == NULL) {
+ GDKfree(s);
+ throw(MAL,"recycle.dumpcache",
MAL_MALLOC_FAIL);
+ }
+ s = tmp;
+ }
+ }
+ }
+
+ *res = s;
+ return MAL_SUCCEED;
+}
+
static void
RECYCLEdump(stream *s)
{
@@ -82,23 +126,23 @@ RECYCLEdump(stream *s)
str msg;
lng sz, persmem=0;
ValPtr v;
- Client c;
- lng statements=0, recycled=0, recycleMiss=0, recycleRem=0;
- lng ccCalls=0, ccInstr=0, crdInstr=0;
+ Client c;
+ lng statements=0, recycled=0, recycleMiss=0, recycleRem=0;
+ lng ccCalls=0, ccInstr=0, crdInstr=0;
if (!recycleBlk) return;
mnstr_printf(s,"#Recycler catalog\n");
- mnstr_printf(s,"#admission= %d time ="LLFMT" alpha= %4.3f\n",
- admissionPolicy, recycleTime, recycleAlpha);
- mnstr_printf(s,"#reuse= %d\n", reusePolicy);
- mnstr_printf(s,"#rcache= %d limit= %d memlimit="LLFMT"\n", rcachePolicy,
recycleCacheLimit, recycleMemory);
- mnstr_printf(s,"#hard stmt = %d hard var = %d hard mem="LLFMT"\n",
- HARDLIMIT_STMT, HARDLIMIT_VAR, HARDLIMIT_MEM);
+ mnstr_printf(s,"#admission= %d time ="LLFMT" alpha= %4.3f\n",
+ admissionPolicy, recycleTime, recycleAlpha);
+ mnstr_printf(s,"#reuse= %d\n", reusePolicy);
+ mnstr_printf(s,"#rcache= %d limit= %d memlimit="LLFMT"\n",
rcachePolicy, recycleCacheLimit, recycleMemory);
+ mnstr_printf(s,"#hard stmt = %d hard var = %d hard mem="LLFMT"\n",
+ HARDLIMIT_STMT, HARDLIMIT_VAR, HARDLIMIT_MEM);
for(i=0; i< recycleBlk->stop; i++){
#ifdef _DEBUG_CACHE_
- if ( getInstrPtr(recycleBlk,i)->token == NOOPsymbol ) continue;
+ if ( getInstrPtr(recycleBlk,i)->token == NOOPsymbol ) continue;
#endif
v = &getVarConstant(recycleBlk,getArg(recycleBlk->stmt[i],0));
if ((v->vtype == TYPE_bat) &&
@@ -110,28 +154,28 @@ RECYCLEdump(stream *s)
}
persmem = (lng) persmem/RU;
- for(c = mal_clients; c < mal_clients+MAL_MAXCLIENTS; c++)
- if (c->mode != FREECLIENT) {
- recycled += c->rcc->recycled;
- statements += c->rcc->statements;
- recycleMiss += c->rcc->recycleMiss;
- recycleRem += c->rcc->recycleRem;
- ccCalls += c->rcc->ccCalls;
- ccInstr += c->rcc->ccInstr;
- crdInstr += c->rcc->crdInstr;
- };
+ for(c = mal_clients; c < mal_clients+MAL_MAXCLIENTS; c++)
+ if (c->mode != FREECLIENT) {
+ recycled += c->rcc->recycled;
+ statements += c->rcc->statements;
+ recycleMiss += c->rcc->recycleMiss;
+ recycleRem += c->rcc->recycleRem;
+ ccCalls += c->rcc->ccCalls;
+ ccInstr += c->rcc->ccInstr;
+ crdInstr += c->rcc->crdInstr;
+ };
incache = recycleBlk->stop;
mnstr_printf(s,"#recycled = "LLFMT" incache= %d executed = "LLFMT"
memory(KB)= "LLFMT" PersBat memory="LLFMT"\n",
recycled, incache,statements, recyclerUsedMemory, persmem);
#ifdef _DEBUG_CACHE_
mnstr_printf(s,"#RPremoved = %d RPactive= %d RPmisses = %d\n",
- recycleRem, incache-recycleRem, recycleMiss);
+ recycleRem, incache-recycleRem, recycleMiss);
#endif
mnstr_printf(s,"#Cache search time= "LLFMT"(usec) cleanCache: "LLFMT"
calls evicted "LLFMT" instructions \t Discarded by CRD
"LLFMT"\n",recycleSearchTime, ccCalls,ccInstr, crdInstr);
/* and dump the statistics per instruction*/
- mnstr_printf(s,"# CL\t lru\t\tcnt\t ticks\t rd\t wr\t Instr\n");
+ mnstr_printf(s,"# CL\t lru\t\tcnt\t ticks\t rd\t wr\t Instr\n");
for(i=0; i< recycleBlk->stop; i++){
if (getInstrPtr(recycleBlk,i)->token == NOOPsymbol)
mnstr_printf(s,"#NOOP ");
@@ -182,10 +226,10 @@ RECYCLEdumpDataTrans(stream *s)
mnstr_printf(s,"#pattern\t transf.\t from others\n");
for( i=0; i < n; i++){
rdt = recycleQPat->ptrn[i]->dtreuse;
- dt = recycleQPat->ptrn[i]->dt;
- mnstr_printf(s,"# %d \t\t "LLFMT"\t\t"LLFMT"\n", i, dt, rdt);
- sum += dt;
- rsum += rdt;
+ dt = recycleQPat->ptrn[i]->dt;
+ mnstr_printf(s,"# %d \t\t "LLFMT"\t\t"LLFMT"\n", i, dt, rdt);
+ sum += dt;
+ rsum += rdt;
}
mnstr_printf(s,"#########\n# Total transfer "LLFMT" Total reused
"LLFMT"\n", sum, rsum);
}
@@ -389,7 +433,7 @@ RECYCLElog(int *ret, str *nm)
(void) ret;
recycleLog = GDKstrdup(*nm);
s = open_wastream(recycleLog);
- if (s){
+ if (s){
mnstr_printf(s,"# Q\t TimeQ(ms)\t");
if ( monitorRecycler & 2) { /* Current query stat */
diff --git a/monetdb5/modules/mal/recycle.h b/monetdb5/modules/mal/recycle.h
--- a/monetdb5/modules/mal/recycle.h
+++ b/monetdb5/modules/mal/recycle.h
@@ -35,6 +35,7 @@
#endif
recycle_export str RECYCLEdumpWrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+recycle_export str RECYCLEdumpCache(str *res);
recycle_export str RECYCLEstart(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
recycle_export str RECYCLEstop(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
recycle_export str RECYCLEsetAdmission(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr p);
diff --git a/monetdb5/modules/mal/recycle.mal b/monetdb5/modules/mal/recycle.mal
--- a/monetdb5/modules/mal/recycle.mal
+++ b/monetdb5/modules/mal/recycle.mal
@@ -43,6 +43,10 @@ 1: recycle table;
2: statistics of query patterns;
3: statistics of data transfer.";
+command dumpcache():str
+address RECYCLEdumpCache
+comment "Return information of cached files";
+
pattern setAdmPolicy(p:int...):void
address RECYCLEsetAdmission
comment "Set recycler admission policy:
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list