mm: dump node overheadp during memdump

Signed-off-by: xuxingliang <xuxingliang@xiaomi.com>
This commit is contained in:
xuxingliang
2024-11-15 10:43:44 +08:00
committed by Xiang Xiao
parent 797f7a043d
commit 6d2ebfdec6
5 changed files with 84 additions and 45 deletions
+9 -6
View File
@@ -187,6 +187,7 @@ static void mempool_memdump_callback(FAR struct mempool_s *pool,
FAR const void *input, FAR void *output)
{
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
size_t overhead = blocksize - pool->blocksize;
FAR const struct mm_memdump_s *dump = input;
if (buf->magic == MEMPOOL_MAGIC_FREE)
@@ -206,8 +207,8 @@ static void mempool_memdump_callback(FAR struct mempool_s *pool,
FAR const char *tmp = "";
# endif
syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n",
buf->pid, blocksize, buf->seqno,
syslog(LOG_INFO, "%6d%12zu%9zu%12lu%*p %s\n",
buf->pid, blocksize, overhead, buf->seqno,
BACKTRACE_PTR_FMT_WIDTH,
((FAR char *)buf - pool->blocksize), tmp);
}
@@ -219,11 +220,12 @@ mempool_memdump_free_callback(FAR struct mempool_s *pool,
FAR const void *input, FAR void *output)
{
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
size_t overhead = blocksize - pool->blocksize;
if (buf->magic == MEMPOOL_MAGIC_FREE)
{
syslog(LOG_INFO, "%12zu%*p\n",
blocksize, BACKTRACE_PTR_FMT_WIDTH,
syslog(LOG_INFO, "%12zu%9zu%*p\n",
blocksize, overhead, BACKTRACE_PTR_FMT_WIDTH,
((FAR char *)buf - pool->blocksize));
}
}
@@ -587,11 +589,12 @@ void mempool_memdump(FAR struct mempool_s *pool,
}
#else
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
size_t overhead = blocksize - pool->blocksize;
/* Avoid race condition */
syslog(LOG_INFO, "%12zu%*p skip block dump\n",
blocksize, BACKTRACE_PTR_FMT_WIDTH, pool);
syslog(LOG_INFO, "%12zu%9zu%*p skip block dump\n",
blocksize, overhead, BACKTRACE_PTR_FMT_WIDTH, pool);
#endif
}
+15 -11
View File
@@ -60,13 +60,14 @@ struct mm_memdump_priv_s
static void memdump_allocnode(FAR struct mm_allocnode_s *node)
{
size_t nodesize = MM_SIZEOF_NODE(node);
size_t overhead = MM_SIZEOF_ALLOCNODE;
#if CONFIG_MM_BACKTRACE < 0
syslog(LOG_INFO, "%12zu%*p\n",
nodesize, BACKTRACE_PTR_FMT_WIDTH,
syslog(LOG_INFO, "%12zu%9zu%*p\n",
nodesize, overhead, BACKTRACE_PTR_FMT_WIDTH,
(FAR const char *)node + MM_SIZEOF_ALLOCNODE);
#elif CONFIG_MM_BACKTRACE == 0
syslog(LOG_INFO, "%6d%12zu%12lu%*p\n",
node->pid, nodesize, node->seqno,
syslog(LOG_INFO, "%6d%12zu%9zu%12lu%*p\n",
node->pid, nodesize, overhead, node->seqno,
BACKTRACE_PTR_FMT_WIDTH,
(FAR const char *)node + MM_SIZEOF_ALLOCNODE);
#else
@@ -75,8 +76,8 @@ static void memdump_allocnode(FAR struct mm_allocnode_s *node)
backtrace_format(buf, sizeof(buf), node->backtrace,
CONFIG_MM_BACKTRACE);
syslog(LOG_INFO, "%6d%12zu%12lu%*p %s\n",
node->pid, nodesize, node->seqno,
syslog(LOG_INFO, "%6d%12zu%9zu%12lu%*p %s\n",
node->pid, nodesize, overhead, node->seqno,
BACKTRACE_PTR_FMT_WIDTH,
(FAR const char *)node + MM_SIZEOF_ALLOCNODE, buf);
#endif
@@ -202,8 +203,8 @@ static void memdump_handler(FAR struct mm_allocnode_s *node, FAR void *arg)
priv->info.aordblks++;
priv->info.uordblks += nodesize;
syslog(LOG_INFO, "%12zu%*p\n",
nodesize, BACKTRACE_PTR_FMT_WIDTH,
syslog(LOG_INFO, "%12zu%9zu%*p\n",
nodesize, MM_ALLOCNODE_OVERHEAD, BACKTRACE_PTR_FMT_WIDTH,
((FAR char *)node + MM_SIZEOF_ALLOCNODE));
}
}
@@ -288,10 +289,13 @@ void mm_memdump(FAR struct mm_heap_s *heap,
}
#if CONFIG_MM_BACKTRACE < 0
syslog(LOG_INFO, "%12s%*s\n", "Size", BACKTRACE_PTR_FMT_WIDTH, "Address");
syslog(LOG_INFO, "%12s%9s%*s\n", "Size", "Overhead",
BACKTRACE_PTR_FMT_WIDTH,
"Address");
#else
syslog(LOG_INFO, "%6s%12s%12s%*s %s\n", "PID", "Size", "Sequence",
BACKTRACE_PTR_FMT_WIDTH, "Address", "Backtrace");
syslog(LOG_INFO, "%6s%12s%9s%12s%*s %s\n", "PID", "Size", "Overhead",
"Sequence", BACKTRACE_PTR_FMT_WIDTH,
"Address", "Backtrace");
#endif
memdump_dump_pool(&priv, heap);