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

Reply via email to