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

Reply via email to