Changeset: 3e35d7b01223 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3e35d7b01223 Modified Files: gdk/gdk_bbp.c Branch: Jul2021 Log Message:
Remove multiple free lists for free bats. There is actually less contention because there is no longer a single list that receives most of the free entries while other lists are the ones that need to produce free entries. diffs (86 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -110,7 +110,7 @@ struct BBPfarm_t BBPfarms[MAXFARMS]; static MT_Lock BBPnameLock = MT_LOCK_INITIALIZER(BBPnameLock); static bat *BBP_hash = NULL; /* BBP logical name hash buckets */ static bat BBP_mask = 0; /* number of buckets = & mask */ -#define BBP_THREADMASK 63 +#define BBP_THREADMASK 0 /* originally: 63 */ #if SIZEOF_SIZE_T == 8 #define threadmask(y) ((int) (mix_lng(y) & BBP_THREADMASK)) #else @@ -1947,6 +1947,7 @@ BBPgetsubdir(str s, bat i) static gdk_return maybeextend(int idx) { +#if BBP_THREADMASK > 0 int t, m; int n, l; bat i; @@ -1973,6 +1974,7 @@ maybeextend(int idx) BBP_next(i) = 0; BBP_free(idx) = i; } else { +#endif /* let the longest list alone, get a fresh entry */ bat size = (bat) ATOMIC_GET(&BBPsize); if (size >= BBPlimit && @@ -1980,13 +1982,16 @@ maybeextend(int idx) /* couldn't extend; if there is any * free entry, take it from the * longest list after all */ +#if BBP_THREADMASK > 0 if (l > 0) { i = BBP_free(m); BBP_free(m) = BBP_next(i); BBP_next(i) = 0; BBP_free(idx) = i; GDKclrerr(); - } else { + } else +#endif + { /* nothing available */ return GDK_FAIL; } @@ -1994,8 +1999,10 @@ maybeextend(int idx) ATOMIC_SET(&BBPsize, size + 1); BBP_free(idx) = size; } +#if BBP_THREADMASK > 0 } last = (last + 1) & BBP_THREADMASK; +#endif return GDK_SUCCEED; } @@ -2018,6 +2025,7 @@ BBPinsert(BAT *bn) if (BBP_free(idx) <= 0) { /* we need to extend the BBP */ gdk_return r = GDK_SUCCEED; +#if BBP_THREADMASK > 0 if (lock) { /* we must take all locks in a consistent * order so first unset the one we've already @@ -2026,6 +2034,7 @@ BBPinsert(BAT *bn) for (i = 0; i <= BBP_THREADMASK; i++) MT_lock_set(&GDKcacheLock(i)); } +#endif MT_lock_set(&BBPnameLock); /* check again in case some other thread extended * while we were waiting */ @@ -2033,10 +2042,12 @@ BBPinsert(BAT *bn) r = maybeextend(idx); } MT_lock_unset(&BBPnameLock); +#if BBP_THREADMASK > 0 if (lock) for (i = BBP_THREADMASK; i >= 0; i--) if (i != idx) MT_lock_unset(&GDKcacheLock(i)); +#endif if (r != GDK_SUCCEED) { if (lock) { MT_lock_unset(&GDKcacheLock(idx)); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list