Changeset: 68ab398acb08 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=68ab398acb08
Modified Files:
gdk/gdk_system.c
gdk/gdk_system.h
Branch: Oct2014
Log Message:
Don't sleep so long on long lasting lock contention; small change to lock
statistics.
diffs (62 lines):
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -101,11 +101,11 @@ sortlocklist(MT_Lock *l)
* start of unprocessed part of left and right lists */
t = ll = NULL;
while (l && r) {
- if (l->contention < r->contention ||
- (l->contention == r->contention &&
- l->sleep < r->sleep) ||
- (l->contention == r->contention &&
- l->sleep == r->sleep &&
+ if (l->sleep < r->sleep ||
+ (l->sleep == r->sleep &&
+ l->contention < r->contention) ||
+ (l->sleep == r->sleep &&
+ l->contention == r->contention &&
l->count <= r->count)) {
/* l is smaller */
if (ll == NULL) {
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -223,16 +223,13 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
do { \
TEMDEBUG fprintf(stderr, "#lock %s contention in %s\n",
(l)->name, n); \
(void) ATOMIC_INC(GDKlockcontentioncnt, dummy, n); \
+ (l)->contention++; \
} while (0)
#define _DBG_LOCK_SLEEP(l, n) \
do { \
if (_spincnt == 1024) \
(void) ATOMIC_INC(GDKlocksleepcnt, dummy, n); \
- } while (0)
-#define _DBG_LOCK_COUNT_1(l) \
- do { \
- (l)->contention++; \
- (l)->sleep += _spincnt >= 1024; \
+ (l)->sleep++; \
} while (0)
#define _DBG_LOCK_COUNT_2(l) \
do { \
@@ -295,7 +292,6 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
#define _DBG_LOCK_COUNT_0(l, n) ((void) (n))
#define _DBG_LOCK_CONTENTION(l, n) ((void) (n))
#define _DBG_LOCK_SLEEP(l, n) ((void) (n))
-#define _DBG_LOCK_COUNT_1(l) ((void) 0)
#define _DBG_LOCK_COUNT_2(l) ((void) 0)
#define _DBG_LOCK_INIT(l, n) ((void) (n))
#define _DBG_LOCK_DESTROY(l) ((void) 0)
@@ -313,10 +309,9 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
do { \
if (++_spincnt >= 1024) { \
_DBG_LOCK_SLEEP(l, n); \
- MT_sleep_ms(_spincnt >> 10); \
+ MT_sleep_ms(1); \
} \
} while (ATOMIC_TAS((l)->lock, dummy, n) != 0); \
- _DBG_LOCK_COUNT_1(l); \
} \
_DBG_LOCK_LOCKER(l, n); \
_DBG_LOCK_COUNT_2(l); \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list