From 81f75a019cbc47500ec6a3e178da2100137b43a4 Mon Sep 17 00:00:00 2001 From: yuqing Date: Fri, 30 Oct 2015 17:30:22 +0800 Subject: [PATCH] stat_print output memory usage summary --- src/fast_mblock.c | 48 +++++++++++++++++++++++++++++++++++++++-------- src/fast_mblock.h | 5 +++++ 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/fast_mblock.c b/src/fast_mblock.c index 148a343..430e2ca 100644 --- a/src/fast_mblock.c +++ b/src/fast_mblock.c @@ -185,7 +185,7 @@ int fast_mblock_manager_stat_print() stats = NULL; count = 0; - alloc_size = 128; + alloc_size = 64; result = EOVERFLOW; while (result == EOVERFLOW) { @@ -201,18 +201,53 @@ int fast_mblock_manager_stat_print() if (result == 0) { - logInfo("mblock stat count: %d", count); + int64_t alloc_mem; + int64_t used_mem; + char alloc_mem_str[32]; + char used_mem_str[32]; + int block_size; + + alloc_mem = 0; + used_mem = 0; logInfo("%32s %12s %16s %12s %12s %12s", "name", "element_size", "instance_count", "alloc_count", "used_count", "used_ratio"); stat_end = stats + count; for (pStat=stats; pStattotal_count; + used_mem += block_size * pStat->used_count; logInfo("%32s %12d %16d %12d %12d %11.2f%%", pStat->name, pStat->element_size, pStat->instance_count, pStat->total_count, pStat->used_count, pStat->total_count > 0 ? 100.00 * (double)pStat->used_count / (double)pStat->total_count : 0.00); } + + if (alloc_mem < 1024) + { + sprintf(alloc_mem_str, "%"PRId64" bytes", alloc_mem); + sprintf(used_mem_str, "%"PRId64" bytes", used_mem); + } + else if (alloc_mem < 1024 * 1024) + { + sprintf(alloc_mem_str, "%.3f KB", (double)alloc_mem / 1024); + sprintf(used_mem_str, "%.3f KB", (double)used_mem / 1024); + } + else if (alloc_mem < 1024 * 1024 * 1024) + { + sprintf(alloc_mem_str, "%.3f MB", (double)alloc_mem / (1024 * 1024)); + sprintf(used_mem_str, "%.3f MB", (double)used_mem / (1024 * 1024)); + } + else + { + sprintf(alloc_mem_str, "%.3f GB", (double)alloc_mem / (1024 * 1024 * 1024)); + sprintf(used_mem_str, "%.3f GB", (double)used_mem / (1024 * 1024 * 1024)); + } + + logInfo("mblock entry count: %d, alloc memory: %s, used memory: %s, used ratio: %.2f%%", + count, alloc_mem_str, used_mem_str, + alloc_mem > 0 ? 100.00 * (double)used_mem / alloc_mem : 0.00); } if (stats != NULL) free(stats); @@ -248,10 +283,8 @@ int fast_mblock_init_ex2(struct fast_mblock_man *mblock, const char *name, } else { - int block_size; - block_size = MEM_ALIGN(sizeof(struct fast_mblock_node) \ - + mblock->info.element_size); - mblock->alloc_elements_once = (1024 * 1024) / block_size; + mblock->alloc_elements_once = (1024 * 1024) / + fast_mblock_get_block_size(mblock); } if (need_lock && (result=init_pthread_lock(&(mblock->lock))) != 0) @@ -297,8 +330,7 @@ static int fast_mblock_prealloc(struct fast_mblock_man *mblock) int block_size; int alloc_size; - block_size = MEM_ALIGN(sizeof(struct fast_mblock_node) + \ - mblock->info.element_size); + block_size = fast_mblock_get_block_size(mblock); alloc_size = sizeof(struct fast_mblock_malloc) + block_size * \ mblock->alloc_elements_once; diff --git a/src/fast_mblock.h b/src/fast_mblock.h index a41d9d9..40f05ac 100644 --- a/src/fast_mblock.h +++ b/src/fast_mblock.h @@ -64,6 +64,11 @@ struct fast_mblock_man struct fast_mblock_man *next; //for manager }; +#define GET_BLOCK_SIZE(info) \ + (MEM_ALIGN(sizeof(struct fast_mblock_node) + (info).element_size)) + +#define fast_mblock_get_block_size(mblock) GET_BLOCK_SIZE(mblock->info) + #define fast_mblock_to_node_ptr(data_ptr) \ (struct fast_mblock_node *)((char *)data_ptr - ((size_t)(char *) \ &((struct fast_mblock_node *)0)->data))