mm/mempool: Count the backtrace overhead in mempool_[dump|info[_task]]
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
parent
e9738cd906
commit
0572bc4d03
@ -39,11 +39,11 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if CONFIG_MM_BACKTRACE >= 0
|
#if CONFIG_MM_BACKTRACE >= 0
|
||||||
# define MEMPOOL_REALBLOCKSIZE(pool) (ALIGN_UP(pool->blocksize + \
|
# define MEMPOOL_REALBLOCKSIZE(pool) (ALIGN_UP((pool)->blocksize + \
|
||||||
sizeof(struct mempool_backtrace_s), \
|
sizeof(struct mempool_backtrace_s), \
|
||||||
pool->blockalign))
|
(pool)->blockalign))
|
||||||
#else
|
#else
|
||||||
# define MEMPOOL_REALBLOCKSIZE(pool) (pool->blocksize)
|
# define MEMPOOL_REALBLOCKSIZE(pool) ((pool)->blocksize)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -143,11 +143,10 @@ int mempool_init(FAR struct mempool_s *pool, FAR const char *name)
|
|||||||
pool->nalloc = 0;
|
pool->nalloc = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pool->interruptsize > sizeof(sq_entry_t))
|
if (pool->interruptsize >= blocksize)
|
||||||
{
|
{
|
||||||
size_t ninterrupt = (pool->interruptsize - sizeof(sq_entry_t)) /
|
size_t ninterrupt = pool->interruptsize / blocksize;
|
||||||
blocksize;
|
size_t size = ninterrupt * blocksize;
|
||||||
size_t size = ninterrupt * blocksize + sizeof(sq_entry_t);
|
|
||||||
|
|
||||||
pool->ibase = pool->alloc(pool, size);
|
pool->ibase = pool->alloc(pool, size);
|
||||||
if (pool->ibase == NULL)
|
if (pool->ibase == NULL)
|
||||||
@ -356,6 +355,7 @@ void mempool_free(FAR struct mempool_s *pool, FAR void *blk)
|
|||||||
|
|
||||||
int mempool_info(FAR struct mempool_s *pool, FAR struct mempoolinfo_s *info)
|
int mempool_info(FAR struct mempool_s *pool, FAR struct mempoolinfo_s *info)
|
||||||
{
|
{
|
||||||
|
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
|
||||||
irqstate_t flags;
|
irqstate_t flags;
|
||||||
|
|
||||||
DEBUGASSERT(pool != NULL && info != NULL);
|
DEBUGASSERT(pool != NULL && info != NULL);
|
||||||
@ -368,10 +368,10 @@ int mempool_info(FAR struct mempool_s *pool, FAR struct mempoolinfo_s *info)
|
|||||||
#else
|
#else
|
||||||
info->aordblks = pool->nalloc;
|
info->aordblks = pool->nalloc;
|
||||||
#endif
|
#endif
|
||||||
info->arena = (info->aordblks + info->ordblks + info->iordblks) *
|
info->arena =
|
||||||
pool->blocksize;
|
(info->aordblks + info->ordblks + info->iordblks) * blocksize;
|
||||||
spin_unlock_irqrestore(&pool->lock, flags);
|
spin_unlock_irqrestore(&pool->lock, flags);
|
||||||
info->sizeblks = pool->blocksize;
|
info->sizeblks = blocksize;
|
||||||
if (pool->wait && pool->expandsize == 0)
|
if (pool->wait && pool->expandsize == 0)
|
||||||
{
|
{
|
||||||
int semcount;
|
int semcount;
|
||||||
@ -395,6 +395,7 @@ struct mallinfo_task
|
|||||||
mempool_info_task(FAR struct mempool_s *pool,
|
mempool_info_task(FAR struct mempool_s *pool,
|
||||||
FAR const struct malltask *task)
|
FAR const struct malltask *task)
|
||||||
{
|
{
|
||||||
|
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
|
||||||
irqstate_t flags = spin_lock_irqsave(&pool->lock);
|
irqstate_t flags = spin_lock_irqsave(&pool->lock);
|
||||||
struct mallinfo_task info =
|
struct mallinfo_task info =
|
||||||
{
|
{
|
||||||
@ -407,13 +408,13 @@ mempool_info_task(FAR struct mempool_s *pool,
|
|||||||
mempool_queue_lenth(&pool->iqueue);
|
mempool_queue_lenth(&pool->iqueue);
|
||||||
|
|
||||||
info.aordblks += count;
|
info.aordblks += count;
|
||||||
info.uordblks += count * pool->blocksize;
|
info.uordblks += count * blocksize;
|
||||||
}
|
}
|
||||||
#if CONFIG_MM_BACKTRACE < 0
|
#if CONFIG_MM_BACKTRACE < 0
|
||||||
else if (task->pid == PID_MM_ALLOC)
|
else if (task->pid == PID_MM_ALLOC)
|
||||||
{
|
{
|
||||||
info.aordblks += pool->nalloc;
|
info.aordblks += pool->nalloc;
|
||||||
info.uordblks += pool->nalloc * pool->blocksize;
|
info.uordblks += pool->nalloc * blocksize;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
else
|
else
|
||||||
@ -428,7 +429,7 @@ mempool_info_task(FAR struct mempool_s *pool,
|
|||||||
buf->seqno >= task->seqmin && buf->seqno <= task->seqmax)
|
buf->seqno >= task->seqmin && buf->seqno <= task->seqmax)
|
||||||
{
|
{
|
||||||
info.aordblks++;
|
info.aordblks++;
|
||||||
info.uordblks += pool->blocksize;
|
info.uordblks += blocksize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -460,6 +461,8 @@ mempool_info_task(FAR struct mempool_s *pool,
|
|||||||
void mempool_memdump(FAR struct mempool_s *pool,
|
void mempool_memdump(FAR struct mempool_s *pool,
|
||||||
FAR const struct mm_memdump_s *dump)
|
FAR const struct mm_memdump_s *dump)
|
||||||
{
|
{
|
||||||
|
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
|
||||||
|
|
||||||
if (dump->pid == PID_MM_FREE)
|
if (dump->pid == PID_MM_FREE)
|
||||||
{
|
{
|
||||||
FAR sq_entry_t *entry;
|
FAR sq_entry_t *entry;
|
||||||
@ -467,15 +470,13 @@ void mempool_memdump(FAR struct mempool_s *pool,
|
|||||||
sq_for_every(&pool->queue, entry)
|
sq_for_every(&pool->queue, entry)
|
||||||
{
|
{
|
||||||
syslog(LOG_INFO, "%12zu%*p\n",
|
syslog(LOG_INFO, "%12zu%*p\n",
|
||||||
pool->blocksize, MM_PTR_FMT_WIDTH,
|
blocksize, MM_PTR_FMT_WIDTH, (FAR char *)entry);
|
||||||
(FAR char *)entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_for_every(&pool->iqueue, entry)
|
sq_for_every(&pool->iqueue, entry)
|
||||||
{
|
{
|
||||||
syslog(LOG_INFO, "%12zu%*p\n",
|
syslog(LOG_INFO, "%12zu%*p\n",
|
||||||
pool->blocksize, MM_PTR_FMT_WIDTH,
|
blocksize, MM_PTR_FMT_WIDTH, (FAR char *)entry);
|
||||||
(FAR char *)entry);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if CONFIG_MM_BACKTRACE >= 0
|
#if CONFIG_MM_BACKTRACE >= 0
|
||||||
@ -506,9 +507,8 @@ void mempool_memdump(FAR struct mempool_s *pool,
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n",
|
syslog(LOG_INFO, "%6d%12zu%12lu%*p%s\n",
|
||||||
(int)buf->pid, pool->blocksize, buf->seqno,
|
(int)buf->pid, blocksize, buf->seqno,
|
||||||
MM_PTR_FMT_WIDTH,
|
MM_PTR_FMT_WIDTH, ((FAR char *)buf - blocksize), bt);
|
||||||
((FAR char *)buf - pool->blocksize), bt);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user