From 994fbc5859459d086f502ebd8edc2dfe01522c69 Mon Sep 17 00:00:00 2001 From: Utz-Uwe Haus <uhaus@cray.com> Date: Fri, 28 Jan 2022 10:37:41 +0100 Subject: [PATCH] Implement --disable-mempool configure option This permits disabling the memory pool functionality, falling back to the underlying malloc/free. Intended use is mainly leak debugging. --- configure.ac | 14 +++++++++++++- maestro/mempool.c | 27 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ce138b2b..7d3fe91e 100644 --- a/configure.ac +++ b/configure.ac @@ -400,6 +400,18 @@ AC_CHECK_HEADERS([stdlib.h]) AC_C_CONST AC_TYPE_SIZE_T +AC_ARG_ENABLE([mempool], + AS_HELP_STRING([--enable-mempool], [Enable memory pool implementation @<:@default=enabled@:>@]), + [if test "x$enableval" = "xyes" ; then + use_mempool=yes + elif test "x$enableval" = "xno" ; then + use_mempool=no + AC_DEFINE(DISABLE_MEMPOOL,[1],[Disable mempool (for debugging, mostly)]) + else + AC_MSG_ERROR([--enable-mempool must be used with 'yes' or 'no' argument]) + fi], + [use_mempool=yes]) + dnl end of libyaml-introduced checks dnl ***************************************************************************** @@ -409,7 +421,7 @@ dnl We will support (at some point) OFI, MPI, and SMP dnl An SMP pool manager is built if neither OFI or MPI are enabled AC_ARG_ENABLE([ofi-pool-manager], - AS_HELP_STRING([--enable-ofi-pool-manager], [Enable OpenFabric based pool manager @<:@default=disabled@:>@]]),[],[enable_ofi_pool_manager=yes]) + AS_HELP_STRING([--enable-ofi-pool-manager], [Enable OpenFabric based pool manager @<:@default=enabled@:>@]]),[],[enable_ofi_pool_manager=yes]) AC_ARG_ENABLE([mpi-pool-manager], AS_HELP_STRING([--enable-mpi-pool-manager], [Enable MPI based pool manager @<:@default=disabled@:>@]])) diff --git a/maestro/mempool.c b/maestro/mempool.c index e3706940..485bb4d6 100644 --- a/maestro/mempool.c +++ b/maestro/mempool.c @@ -275,6 +275,18 @@ mstro_mempool_destroy(mstro_mempool pool) free(pool); } +#ifdef DISABLE_MEMPOOL +void * +mstro_mempool_alloc(mstro_mempool pool) +{ + assert(pool->num_arenas>0); + pool->arenas[0]->num_alloc++; + pool->arenas[0]->num_in_flight++; + return malloc(pool->object_size); +} + +#else + void * mstro_mempool_alloc(mstro_mempool pool) { @@ -323,6 +335,20 @@ mstro_mempool_alloc(mstro_mempool pool) } } } +#endif + +#ifdef DISABLE_MEMPOOL + +void +mstro_mempool_free(mstro_mempool pool, void *obj) +{ + assert(pool->num_arenas>0); + free(obj); + pool->arenas[0]->num_free++; + pool->arenas[0]->num_in_flight--; +} + +#else void mstro_mempool_free(mstro_mempool pool, void *obj) @@ -378,4 +404,5 @@ mstro_mempool_free(mstro_mempool pool, void *obj) arena->num_recycle++; } } +#endif -- GitLab