[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH 14/18] lib/ukallocregion: Instrumentation for statistics
Instruments the allocator to record allocation statistics. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- lib/ukallocregion/region.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/ukallocregion/region.c b/lib/ukallocregion/region.c index e53accd9..963d03c8 100644 --- a/lib/ukallocregion/region.c +++ b/lib/ukallocregion/region.c @@ -75,15 +75,20 @@ static void *uk_allocregion_malloc(struct uk_alloc *a, size_t size) newbase = intptr + size; if (newbase > (uintptr_t) b->heap_top) - return NULL; /* OOM */ + goto enomem; /* OOM */ /* Check for overflow, handle malloc(0) */ if (newbase <= (uintptr_t) b->heap_base) - return NULL; + goto enomem; b->heap_base = (void *)(newbase); + uk_alloc_stats_count_alloc(a, (void *) intptr, size); return (void *) intptr; + +enomem: + uk_alloc_stats_count_enomem(a, size); + return NULL; } static int uk_allocregion_posix_memalign(struct uk_alloc *a, void **memptr, @@ -113,16 +118,22 @@ static int uk_allocregion_posix_memalign(struct uk_alloc *a, void **memptr, newbase = intptr + size; if (newbase > (uintptr_t) b->heap_top) - return ENOMEM; /* out-of-memory */ + goto enomem; /* out-of-memory */ /* Check for overflow */ if (newbase <= (uintptr_t) b->heap_base) - return EINVAL; + goto enomem; *memptr = (void *)intptr; b->heap_base = (void *)(newbase); + uk_alloc_stats_count_alloc(a, (void *) intptr, size); return 0; + +enomem: + uk_alloc_stats_count_enomem(a, size); + return ENOMEM; + } static void uk_allocregion_free(struct uk_alloc *a __maybe_unused, @@ -130,6 +141,9 @@ static void uk_allocregion_free(struct uk_alloc *a __maybe_unused, { uk_pr_debug("%p: Releasing of memory is not supported by " "ukallocregion\n", a); + + /* Count a free operation but do not release memory from stats */ + uk_alloc_stats_count_free(a, ptr, 0); } static ssize_t uk_allocregion_availmem(struct uk_alloc *a) -- 2.20.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |