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

Reply via email to