Module: kamailio
Branch: master
Commit: 852703fa28782520658925aa831669274b347da6
URL: 
https://github.com/kamailio/kamailio/commit/852703fa28782520658925aa831669274b347da6

Author: Camille Oudot <[email protected]>
Committer: Camille Oudot <[email protected]>
Date: 2015-08-10T15:50:23+02:00

mem: display the 2 levels matrix in TLSF status

Displays a matrix of non-empty free blocks lists rather than the list of
all used blocks. tlsf_status() displays a letter reflecting the order of
magnitude of the free blocks list length in each bucket

---

Modified: mem/tlsf.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/852703fa28782520658925aa831669274b347da6.diff
Patch: 
https://github.com/kamailio/kamailio/commit/852703fa28782520658925aa831669274b347da6.patch

---

diff --git a/mem/tlsf.c b/mem/tlsf.c
index 3547233..6060a41 100644
--- a/mem/tlsf.c
+++ b/mem/tlsf.c
@@ -1125,27 +1125,13 @@ size_t tlsf_available(tlsf_t pool)
        return control->total_size - control->real_used;
 }
 
-static void tlsf_status_cb(void* ptr, size_t size, int used, void* user)
-{
-#ifdef DBG_TLSF_MALLOC
-       block_header_t* block = block_from_ptr(ptr);
-#endif
-
-#ifdef DBG_TLSF_MALLOC
-       LOG_(DEFAULT_FACILITY, *(int*)user, "tlsf_status: ", "(%p): used=%s 
size=%zu was %s from %s: %s(%ld)\n",
-                       ptr, used ? "true" : "false", size, used ? "alloc'd" : 
"free'd", block->alloc_info.file, block->alloc_info.func, 
block->alloc_info.line);
-#else
-       LOG_(DEFAULT_FACILITY, *(int*)user, "tlsf_status: ", "(%p): used=%s 
size=%zu\n",
-                       ptr, used ? "true" : "false", size);
-#endif
-
-
-}
-
 void tlsf_status(tlsf_t pool)
 {
-       int memlog;
+       int memlog, fl, sl;
+       unsigned int len;
+       char summary[FL_INDEX_COUNT];
        control_t* control = tlsf_cast(control_t*, pool);
+       block_header_t* pb;
 
        memlog=cfg_get(core, core_cfg, memlog);
        LOG_(DEFAULT_FACILITY, memlog, "tlsf_status: ", "status of pool 
(%p):\n", pool);
@@ -1158,9 +1144,34 @@ void tlsf_status(tlsf_t pool)
        LOG_(DEFAULT_FACILITY, memlog, "tlsf_status: ",
                        "max used (+overhead)=%zu, max fragments=%zu\n", 
control->max_used, control->max_fragments);
 #endif
+
+       /* print a summary of the 2 levels bucket list */
+       LOG_(DEFAULT_FACILITY, memlog, "tlsf_status: ",
+                               "Used blocks matrix ('.': unused, 'X': between 
2^X and (2^(X+1)-1) used blocks, X=A..Z, A=0, B=1, ...)\n");
        LOG_(DEFAULT_FACILITY, memlog, "tlsf_status: ",
-                       "dumping all fragments:\n");
-       tlsf_walk_pool(pool, tlsf_status_cb, (void *) &memlog);
+                               "> first-level: %d block list arrays between 
2^fl and 2^(fl+1) bytes (fl=%d..%d)\n",
+                               FL_INDEX_COUNT, FL_INDEX_SHIFT, FL_INDEX_MAX);
+       LOG_(DEFAULT_FACILITY, memlog, "tlsf_status: ",
+                               "v second-level: %d block lists between 
2^fl+sl*2^(fl-%d) and 2^fl+(sl+1)*2^(fl-%d)-1 bytes (sl=0..%d)\n",
+                               SL_INDEX_COUNT, SL_INDEX_COUNT_LOG2, 
SL_INDEX_COUNT_LOG2, SL_INDEX_COUNT-1);
+       for (sl = 0 ; sl < SL_INDEX_COUNT ; sl++) {
+               for (fl = 0 ; fl < FL_INDEX_COUNT ; fl++) {
+                       if (control->blocks[fl][sl] == &control->block_null) {
+                               summary[fl] = '.';
+                       } else {
+                               /* count free list length */
+                               len = 1;
+                               pb = control->blocks[fl][sl];
+                               while (pb->next_free != &control->block_null) {
+                                       pb = pb->next_free;
+                                       len++;
+                               }
+                               summary[fl] = 'A' + tlsf_fls(len);
+                       }
+               }
+               LOG_(DEFAULT_FACILITY, memlog, "tlsf_status: ",
+                                       "%2d|%.*s|\n", sl, FL_INDEX_COUNT, 
summary);
+       }
 }
 
 #ifdef DBG_TLSF_MALLOC


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to