Changeset: a9c95c5b2b89 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a9c95c5b2b89
Modified Files:
monetdb5/modules/kernel/bat5.c
monetdb5/modules/mal/tablet.c
Branch: resultset
Log Message:
Add more advisory msyncs
Given the parallel plan behavior of MAL, it may be
effective to issue the msync advice asap.
diffs (107 lines):
diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -451,6 +451,8 @@ BKCattach(bat *ret, const int *tt, const
bn = BATattach(*tt, *heapfile, TRANSIENT);
if (bn == NULL)
throw(MAL, "bat.attach", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
*ret = bn->batCacheid;
BBPkeepref(*ret);
return MAL_SUCCEED;
@@ -731,6 +733,8 @@ BKCreplace_bat(bat *r, const bat *bid, c
BBPreleaseref(s->batCacheid);
if (bn == NULL)
throw(MAL, "bat.replace", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
@@ -784,6 +788,8 @@ BKCreplace_bat_force(bat *r, const bat *
BBPreleaseref(s->batCacheid);
if (bn == NULL)
throw(MAL, "bat.replace", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
@@ -838,6 +844,8 @@ BKCdelete(bat *r, const bat *bid, const
BBPreleaseref(b->batCacheid);
if (bn == NULL)
throw(MAL, "bat.delete", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
@@ -854,6 +862,8 @@ BKCdelete_all(bat *r, const bat *bid)
BBPreleaseref(b->batCacheid);
if (bn == NULL)
throw(MAL, "bat.delete_all", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
@@ -877,6 +887,8 @@ BKCdelete_bat_bun(bat *r, const bat *bid
BBPreleaseref(s->batCacheid);
if (bn == NULL)
throw(MAL, "bat.delete_bat_bun", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
@@ -900,6 +912,8 @@ BKCappend_wrap(bat *r, const bat *bid, c
BBPreleaseref(u->batCacheid);
if (bn == NULL)
throw(MAL, "bat.append", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
@@ -977,6 +991,8 @@ BKCappend_force_wrap(bat *r, const bat *
BBPreleaseref(u->batCacheid);
if (bn == NULL)
throw(MAL, "bat.append", GDK_EXCEPTION);
+ if( bn->batPersistence == PERSISTENT)
+ BATmsync(bn);
BBPkeepref(*r = bn->batCacheid);
return MAL_SUCCEED;
}
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -667,6 +667,7 @@ typedef struct {
Client cntxt;
int id; /* for self reference */
int state; /* line break=1 , 2 =
update bat */
+ int msyncadvice; /* perform the parallel msync */
int workers; /* how many concurrent ones */
int error; /* error during line
break */
int next;
@@ -1039,8 +1040,12 @@ SQLworker(void *arg)
/* stage two, updating the BATs */
for (i = 0; i < task->as->nr_attrs; i++)
if (task->cols[i]) {
+ BAT *b;
t0 = GDKusec();
SQLworker_column(task, task->cols[i] -
1);
+ b = task->as->format[task->cols[i]-1].c;
+ if ( task->msyncadvice && b &&
b->batPersistence != PERSISTENT)
+ BATmsync(b);
t0 = GDKusec() - t0;
task->time[i] += t0;
task->wtime += t0;
@@ -1640,6 +1645,7 @@ SQLload_file(Client cntxt, Tablet *as, b
/* stage one, break the lines in parallel */
ptask[j].error = 0;
ptask[j].state = BREAKLINE;
+ ptask[j].msyncadvice = cnt == task->maxrow;
//about to read last block
ptask[j].next = task->top[task->cur];
ptask[j].fields = task->fields;
ptask[j].limit = task->limit;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list