diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-11-28 11:53:55 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-11-28 13:09:11 +0100 |
commit | d006b46df31f6e5f28237fe40eafb135e684b739 (patch) | |
tree | e3f5956ae801329ae8f2891e9a62734833daa1d2 /cpukit | |
parent | score: Return heap stats via _Heap_Get_information (diff) | |
download | rtems-d006b46df31f6e5f28237fe40eafb135e684b739.tar.bz2 |
score: Add heap statistics
Add lifetime bytes allocated and freed since they were present in the
malloc statistics. Add number of failed allocations.
Diffstat (limited to '')
-rw-r--r-- | cpukit/libmisc/shell/print_heapinfo.c | 12 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/heap.h | 25 | ||||
-rw-r--r-- | cpukit/score/src/heapallocate.c | 12 | ||||
-rw-r--r-- | cpukit/score/src/heapfree.c | 1 |
4 files changed, 40 insertions, 10 deletions
diff --git a/cpukit/libmisc/shell/print_heapinfo.c b/cpukit/libmisc/shell/print_heapinfo.c index 4ac9c96f88..b1e34f2e29 100644 --- a/cpukit/libmisc/shell/print_heapinfo.c +++ b/cpukit/libmisc/shell/print_heapinfo.c @@ -43,17 +43,23 @@ void rtems_shell_print_heap_stats( "Minimum free size ever in bytes: %12" PRIuPTR "\n" "Maximum number of free blocks ever: %12" PRIu32 "\n" "Maximum number of blocks searched ever: %12" PRIu32 "\n" + "Lifetime number of bytes allocated: %12" PRIu64 "\n" + "Lifetime number of bytes freed: %12" PRIu64 "\n" + "Total number of searches: %12" PRIu32 "\n" "Total number of successful allocations: %12" PRIu32 "\n" - "Total number of searches ever: %12" PRIu32 "\n" - "Total number of successful calls to free: %12" PRIu32 "\n" + "Total number of failed allocations: %12" PRIu32 "\n" + "Total number of successful frees: %12" PRIu32 "\n" "Total number of successful resizes: %12" PRIu32 "\n", s->instance, s->size, s->min_free_size, s->max_free_blocks, s->max_search, - s->allocs, + s->lifetime_allocated, + s->lifetime_freed, s->searches, + s->allocs, + s->failed_allocs, s->frees, s->resizes ); diff --git a/cpukit/score/include/rtems/score/heap.h b/cpukit/score/include/rtems/score/heap.h index 6042a13bf2..f20b4e6651 100644 --- a/cpukit/score/include/rtems/score/heap.h +++ b/cpukit/score/include/rtems/score/heap.h @@ -257,6 +257,20 @@ struct Heap_Block { */ typedef struct { /** + * @brief Lifetime number of bytes allocated from this heap. + * + * This value is an integral multiple of the page size. + */ + uint64_t lifetime_allocated; + + /** + * @brief Lifetime number of bytes freed to this heap. + * + * This value is an integral multiple of the page size. + */ + uint64_t lifetime_freed; + + /** * @brief Instance number of this heap. */ uint32_t instance; @@ -303,17 +317,22 @@ typedef struct { uint32_t max_search; /** + * @brief Total number of searches. + */ + uint32_t searches; + + /** * @brief Total number of successful allocations. */ uint32_t allocs; /** - * @brief Total number of searches ever. + * @brief Total number of failed allocations. */ - uint32_t searches; + uint32_t failed_allocs; /** - * @brief Total number of successful calls to free. + * @brief Total number of successful frees. */ uint32_t frees; diff --git a/cpukit/score/src/heapallocate.c b/cpukit/score/src/heapallocate.c index 597077e280..a76ac04f49 100644 --- a/cpukit/score/src/heapallocate.c +++ b/cpukit/score/src/heapallocate.c @@ -254,10 +254,6 @@ void *_Heap_Allocate_aligned_with_boundary( } while ( search_again ); if ( alloc_begin != 0 ) { - /* Statistics */ - ++stats->allocs; - stats->searches += search_count; - block = _Heap_Block_allocate( heap, block, alloc_begin, alloc_size ); _Heap_Check_allocation( @@ -268,6 +264,14 @@ void *_Heap_Allocate_aligned_with_boundary( alignment, boundary ); + + /* Statistics */ + ++stats->allocs; + stats->searches += search_count; + stats->lifetime_allocated += _Heap_Block_size( block ); + } else { + /* Statistics */ + ++stats->failed_allocs; } /* Statistics */ diff --git a/cpukit/score/src/heapfree.c b/cpukit/score/src/heapfree.c index 4e69146232..13bf5eed81 100644 --- a/cpukit/score/src/heapfree.c +++ b/cpukit/score/src/heapfree.c @@ -201,6 +201,7 @@ bool _Heap_Free( Heap_Control *heap, void *alloc_begin_ptr ) --stats->used_blocks; ++stats->frees; stats->free_size += block_size; + stats->lifetime_freed += block_size; return( true ); } |