Changeset: f5dca3c801ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f5dca3c801ef
Modified Files:
gdk/gdk_bbp.c
gdk/gdk_logger.c
sql/backends/monet5/sql_scenario.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: Dec2023
Log Message:
Do a bit of locking + some rearrangement of USR1 code.
diffs (140 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -4618,47 +4618,47 @@ BBPtmunlock(void)
void
BBPprintinfo(void)
{
- if (MT_lock_try(&GDKtmLock)) {
- BBPtmlockFinish();
- size_t tmem = 0, tvm = 0;
- size_t pmem = 0, pvm = 0;
- int tn = 0;
- int pn = 0;
- int nh = 0;
-
- for (bat i = 1, sz = (bat) ATOMIC_GET(&BBPsize); i < sz; i++) {
- if (BBP_refs(i) == 0 && BBP_lrefs(i) == 0)
- continue;
+ size_t tmem = 0, tvm = 0;
+ size_t pmem = 0, pvm = 0;
+ int tn = 0;
+ int pn = 0;
+ int nh = 0;
+
+ BBPtmlock();
+ for (bat i = 1, sz = (bat) ATOMIC_GET(&BBPsize); i < sz; i++) {
+ MT_lock_set(&GDKswapLock(i));
+ if (BBP_refs(i) > 0 || BBP_lrefs(i) > 0) {
BAT *b = BBP_desc(i);
- if (b == NULL)
- continue;
- ATOMIC_BASE_TYPE status = BBP_status(i);
- nh += (status & BBPHOT) != 0;
- if (status & BBPPERSISTENT) {
- pn++;
- pmem += HEAPmemsize(b->theap);
- pvm += HEAPvmsize(b->theap);
- pmem += HEAPmemsize(b->tvheap);
- pvm += HEAPvmsize(b->tvheap);
- } else {
- tn++;
- if (b->theap &&
- b->theap->parentid == b->batCacheid) {
- tmem += HEAPmemsize(b->theap);
- tvm += HEAPvmsize(b->theap);
+ if (b != NULL) {
+ ATOMIC_BASE_TYPE status = BBP_status(i);
+ nh += (status & BBPHOT) != 0;
+ MT_lock_set(&b->theaplock);
+ if (status & BBPPERSISTENT) {
+ pn++;
+ pmem += HEAPmemsize(b->theap);
+ pvm += HEAPvmsize(b->theap);
+ pmem += HEAPmemsize(b->tvheap);
+ pvm += HEAPvmsize(b->tvheap);
+ } else {
+ tn++;
+ if (b->theap &&
+ b->theap->parentid ==
b->batCacheid) {
+ tmem += HEAPmemsize(b->theap);
+ tvm += HEAPvmsize(b->theap);
+ }
+ if (b->tvheap &&
+ b->tvheap->parentid ==
b->batCacheid) {
+ tmem += HEAPmemsize(b->tvheap);
+ tvm += HEAPvmsize(b->tvheap);
+ }
}
- if (b->tvheap &&
- b->tvheap->parentid == b->batCacheid) {
- tmem += HEAPmemsize(b->tvheap);
- tvm += HEAPvmsize(b->tvheap);
- }
+ MT_lock_unset(&b->theaplock);
}
}
- BBPtmunlock();
- printf("%d persistent bats using %zu virtual memory (%zu
malloced)\n", pn, pvm, pmem);
- printf("%d transient bats using %zu virtual memory (%zu
malloced)\n", tn, tvm, tmem);
- printf("%d bats are \"hot\" (i.e. currently or recently
used)\n", nh);
- } else {
- printf("BBP currently locked, so no information available\n");
+ MT_lock_unset(&GDKswapLock(i));
}
+ BBPtmunlock();
+ printf("%d persistent bats using %zu virtual memory (%zu malloced)\n",
pn, pvm, pmem);
+ printf("%d transient bats using %zu virtual memory (%zu malloced)\n",
tn, tvm, tmem);
+ printf("%d bats are \"hot\" (i.e. currently or recently used)\n", nh);
}
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -3377,8 +3377,10 @@ void
log_printinfo(logger *lg)
{
printf("logger %s:\n", lg->fn);
+ rotation_lock(lg);
printf("current log file "ULLFMT", last handled log file "ULLFMT"\n",
lg->id, lg->saved_id);
+ rotation_unlock(lg);
printf("current transaction id %d, saved transaction id %d\n",
lg->tid, lg->saved_tid);
printf("number of flushers: %d, number of open files %d\n",
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -89,7 +89,7 @@ static void
SQLprintinfo(void)
{
/* we need to start printing SQL info here... */
- log_printinfo(((sqlstore *) SQLstore)->logger);
+ store_printinfo(SQLstore);
}
str
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -564,4 +564,6 @@ extern BAT *FORdecompress_(BAT *o, lng m
extern int FORprepare4append(BAT **noffsets, BAT *vals, lng minval, int tt);
extern int FORprepare4append_vals(void **noffsets, void *vals, BUN cnt, lng
minval, int vtype, int ft);
+extern void store_printinfo(sqlstore *store);
+
#endif /*SQL_STORAGE_H */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -7387,3 +7387,11 @@ sql_trans_convert_partitions(sql_trans *
}
return 0;
}
+
+void
+store_printinfo(sqlstore *store)
+{
+ MT_lock_set(&store->commit);
+ log_printinfo(store->logger);
+ MT_lock_unset(&store->commit);
+}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]