Changeset: b5759233e564 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b5759233e564
Modified Files:
gdk/gdk_bbp.c
Branch: Jun2023
Log Message:
Do handing over of free list more efficiently.
diffs (65 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2559,18 +2559,34 @@ BBPuncacheit(bat i, bool unloaddesc)
* BBPclear removes a BAT from the BBP directory forever.
*/
static inline void
-BBPhandover(Thread t)
+BBPhandover(Thread t, int n)
{
/* take one bat from our private free list and hand it over to
* the global free list */
bat i = t->freebats;
+ bat bid = i;
+ if (i == 0)
+ return;
+ for (int j = 1; j < n; j++) {
+ if (BBP_next(i) == 0) {
+ n = j;
+ break;
+ }
+ i = BBP_next(i);
+ }
t->freebats = BBP_next(i);
- t->nfreebats--;
- bat *p;
- for (p = &BBP_free; *p && *p < i; p = &BBP_next(*p))
- ;
- BBP_next(i) = *p;
- *p = i;
+ t->nfreebats -= n;
+ BBP_next(i) = 0;
+ bat *p = &BBP_free;
+ while (n > 0) {
+ while (*p && *p < bid)
+ p = &BBP_next(*p);
+ i = BBP_next(bid);
+ BBP_next(bid) = *p;
+ *p = bid;
+ bid = i;
+ n--;
+ }
}
static inline void
@@ -2609,9 +2625,7 @@ bbpclear(bat i, bool lock)
if (t->nfreebats > BBP_FREE_HIWATER) {
if (lock)
MT_lock_set(&GDKcacheLock);
- while (t->nfreebats > BBP_FREE_LOWATER) {
- BBPhandover(t);
- }
+ BBPhandover(t, t->nfreebats - BBP_FREE_LOWATER);
if (lock)
MT_lock_unset(&GDKcacheLock);
}
@@ -2633,7 +2647,7 @@ BBPrelinquish(Thread t)
return;
MT_lock_set(&GDKcacheLock);
while (t->nfreebats > 0) {
- BBPhandover(t);
+ BBPhandover(t, t->nfreebats);
}
MT_lock_unset(&GDKcacheLock);
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]