Changeset: c369e89381cb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/c369e89381cb Modified Files: gdk/gdk_bbp.c Branch: Dec2023 Log Message:
Categorize bats into 32 groups for USR1 info. Only non-empty groups will be printed. diffs (139 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -4908,41 +4908,29 @@ BBPtmunlock(void) void BBPprintinfo(void) { - size_t tmem = 0, tvm = 0; - size_t pmem = 0, pvm = 0; - int tn = 0; - int pn = 0; - int nh = 0; + /* 32 categories for the bats, not all are expected to be filled */ + struct counters { + size_t sz; + size_t vmsz; + int nr; + } bats[2][2][2][2][2] = {0}; + int nbats = 0; BBPtmlock(); bat sz = (bat) ATOMIC_GET(&BBPsize); for (bat i = 1; i < sz; i++) { MT_lock_set(&GDKswapLock(i)); - if (BBP_refs(i) > 0 || BBP_lrefs(i) > 0) { + int r; + if ((r = BBP_refs(i)) > 0 || BBP_lrefs(i) > 0) { BAT *b = BBP_desc(i); if (b != NULL) { - ATOMIC_BASE_TYPE status = BBP_status(i); - nh += (status & BBPHOT) != 0; + nbats++; 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); - } - } + ATOMIC_BASE_TYPE status = BBP_status(i); + struct counters *bt = &bats[r > 0][BATdirty(b)][(status & BBPPERSISTENT) != 0][(status & BBPHOT) != 0][(status & BBPLOADED) != 0]; + bt->nr++; + bt->sz += HEAPmemsize(b->theap) + HEAPmemsize(b->tvheap); + bt->vmsz += HEAPvmsize(b->theap) + HEAPvmsize(b->tvheap); MT_lock_unset(&b->theaplock); } } @@ -4950,11 +4938,71 @@ BBPprintinfo(void) } uint32_t nfree = BBP_nfree; 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); - printf("%d bats total, %"PRIu32" free bats in common shared list\n", - sz - 1, nfree); + if (bats[1][1][1][1][1].nr > 0) + printf("fix, dirty, persistent, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][1][1][1].nr, bats[1][1][1][1][1].vmsz, bats[1][1][1][1][1].sz); + if (bats[1][1][1][1][0].nr > 0) + printf("fix, dirty, persistent, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][1][1][0].nr, bats[1][1][1][1][0].vmsz, bats[1][1][1][1][0].sz); + if (bats[1][1][1][0][1].nr > 0) + printf("fix, dirty, persistent, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][1][0][1].nr, bats[1][1][1][0][1].vmsz, bats[1][1][1][0][1].sz); + if (bats[1][1][1][0][0].nr > 0) + printf("fix, dirty, persistent, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][1][0][0].nr, bats[1][1][1][0][0].vmsz, bats[1][1][1][0][0].sz); + if (bats[1][1][0][1][1].nr > 0) + printf("fix, dirty, transient, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][0][1][1].nr, bats[1][1][0][1][1].vmsz, bats[1][1][0][1][1].sz); + if (bats[1][1][0][1][0].nr > 0) + printf("fix, dirty, transient, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][0][1][0].nr, bats[1][1][0][1][0].vmsz, bats[1][1][0][1][0].sz); + if (bats[1][1][0][0][1].nr > 0) + printf("fix, dirty, transient, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][0][0][1].nr, bats[1][1][0][0][1].vmsz, bats[1][1][0][0][1].sz); + if (bats[1][1][0][0][0].nr > 0) + printf("fix, dirty, transient, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][1][0][0][0].nr, bats[1][1][0][0][0].vmsz, bats[1][1][0][0][0].sz); + if (bats[1][0][1][1][1].nr > 0) + printf("fix, clean, persistent, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][1][1][1].nr, bats[1][0][1][1][1].vmsz, bats[1][0][1][1][1].sz); + if (bats[1][0][1][1][0].nr > 0) + printf("fix, clean, persistent, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][1][1][0].nr, bats[1][0][1][1][0].vmsz, bats[1][0][1][1][0].sz); + if (bats[1][0][1][0][1].nr > 0) + printf("fix, clean, persistent, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][1][0][1].nr, bats[1][0][1][0][1].vmsz, bats[1][0][1][0][1].sz); + if (bats[1][0][1][0][0].nr > 0) + printf("fix, clean, persistent, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][1][0][0].nr, bats[1][0][1][0][0].vmsz, bats[1][0][1][0][0].sz); + if (bats[1][0][0][1][1].nr > 0) + printf("fix, clean, transient, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][0][1][1].nr, bats[1][0][0][1][1].vmsz, bats[1][0][0][1][1].sz); + if (bats[1][0][0][1][0].nr > 0) + printf("fix, clean, transient, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][0][1][0].nr, bats[1][0][0][1][0].vmsz, bats[1][0][0][1][0].sz); + if (bats[1][0][0][0][1].nr > 0) + printf("fix, clean, transient, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][0][0][1].nr, bats[1][0][0][0][1].vmsz, bats[1][0][0][0][1].sz); + if (bats[1][0][0][0][0].nr > 0) + printf("fix, clean, transient, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[1][0][0][0][0].nr, bats[1][0][0][0][0].vmsz, bats[1][0][0][0][0].sz); + if (bats[0][1][1][1][1].nr > 0) + printf("no fix, dirty, persistent, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][1][1][1].nr, bats[0][1][1][1][1].vmsz, bats[0][1][1][1][1].sz); + if (bats[0][1][1][1][0].nr > 0) + printf("no fix, dirty, persistent, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][1][1][0].nr, bats[0][1][1][1][0].vmsz, bats[0][1][1][1][0].sz); + if (bats[0][1][1][0][1].nr > 0) + printf("no fix, dirty, persistent, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][1][0][1].nr, bats[0][1][1][0][1].vmsz, bats[0][1][1][0][1].sz); + if (bats[0][1][1][0][0].nr > 0) + printf("no fix, dirty, persistent, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][1][0][0].nr, bats[0][1][1][0][0].vmsz, bats[0][1][1][0][0].sz); + if (bats[0][1][0][1][1].nr > 0) + printf("no fix, dirty, transient, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][0][1][1].nr, bats[0][1][0][1][1].vmsz, bats[0][1][0][1][1].sz); + if (bats[0][1][0][1][0].nr > 0) + printf("no fix, dirty, transient, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][0][1][0].nr, bats[0][1][0][1][0].vmsz, bats[0][1][0][1][0].sz); + if (bats[0][1][0][0][1].nr > 0) + printf("no fix, dirty, transient, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][0][0][1].nr, bats[0][1][0][0][1].vmsz, bats[0][1][0][0][1].sz); + if (bats[0][1][0][0][0].nr > 0) + printf("no fix, dirty, transient, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][1][0][0][0].nr, bats[0][1][0][0][0].vmsz, bats[0][1][0][0][0].sz); + if (bats[0][0][1][1][1].nr > 0) + printf("no fix, clean, persistent, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][1][1][1].nr, bats[0][0][1][1][1].vmsz, bats[0][0][1][1][1].sz); + if (bats[0][0][1][1][0].nr > 0) + printf("no fix, clean, persistent, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][1][1][0].nr, bats[0][0][1][1][0].vmsz, bats[0][0][1][1][0].sz); + if (bats[0][0][1][0][1].nr > 0) + printf("no fix, clean, persistent, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][1][0][1].nr, bats[0][0][1][0][1].vmsz, bats[0][0][1][0][1].sz); + if (bats[0][0][1][0][0].nr > 0) + printf("no fix, clean, persistent, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][1][0][0].nr, bats[0][0][1][0][0].vmsz, bats[0][0][1][0][0].sz); + if (bats[0][0][0][1][1].nr > 0) + printf("no fix, clean, transient, hot, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][0][1][1].nr, bats[0][0][0][1][1].vmsz, bats[0][0][0][1][1].sz); + if (bats[0][0][0][1][0].nr > 0) + printf("no fix, clean, transient, hot, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][0][1][0].nr, bats[0][0][0][1][0].vmsz, bats[0][0][0][1][0].sz); + if (bats[0][0][0][0][1].nr > 0) + printf("no fix, clean, transient, cold, loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][0][0][1].nr, bats[0][0][0][0][1].vmsz, bats[0][0][0][0][1].sz); + if (bats[0][0][0][0][0].nr > 0) + printf("no fix, clean, transient, cold, not loaded: %d bats, %zu virtual, %zu malloc\n", bats[0][0][0][0][0].nr, bats[0][0][0][0][0].vmsz, bats[0][0][0][0][0].sz); + + printf("%d bats total, %d in use, %"PRIu32" free bats in common shared list\n", + sz - 1, nbats, nfree); } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org