diff options
Diffstat (limited to 'libglusterfs/src/glusterfs/mem-pool.h')
-rw-r--r-- | libglusterfs/src/glusterfs/mem-pool.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/libglusterfs/src/glusterfs/mem-pool.h b/libglusterfs/src/glusterfs/mem-pool.h index 1c7e868ab75..90905fb6ba4 100644 --- a/libglusterfs/src/glusterfs/mem-pool.h +++ b/libglusterfs/src/glusterfs/mem-pool.h @@ -38,6 +38,10 @@ #define GF_MEM_TRAILER_MAGIC 0xBAADF00D #define GF_MEM_INVALID_MAGIC 0xDEADC0DE +#define POOL_SMALLEST 7 /* i.e. 128 */ +#define POOL_LARGEST 20 /* i.e. 1048576 */ +#define NPOOLS (POOL_LARGEST - POOL_SMALLEST + 1) + struct mem_acct_rec { const char *typestr; uint64_t size; @@ -207,7 +211,10 @@ struct mem_pool { unsigned long count; /* requested pool size (unused) */ char *name; gf_atomic_t active; /* current allocations */ - +#ifdef DEBUG + gf_atomic_t hit; /* number of allocations served from pt_pool */ + gf_atomic_t miss; /* number of std allocs due to miss */ +#endif struct list_head owner; /* glusterfs_ctx_t->mempool_list */ glusterfs_ctx_t *ctx; /* take ctx->lock when updating owner */ @@ -224,7 +231,7 @@ typedef struct pooled_obj_hdr { struct mem_pool *pool; } pooled_obj_hdr_t; -#define AVAILABLE_SIZE(p2) ((1 << (p2)) - sizeof(pooled_obj_hdr_t)) +#define AVAILABLE_SIZE(p2) (1 << (p2)) typedef struct per_thread_pool { /* the pool that was used to request this allocation */ @@ -301,4 +308,15 @@ mem_pool_destroy(struct mem_pool *pool); void gf_mem_acct_enable_set(void *ctx); +/* hit will be set to : + * _gf_true if the memory is served from mem pool + * _gf_false if the requested size was not present in mem pool and hence + * std alloc'd. + */ +void * +mem_pool_get(unsigned long sizeof_type, gf_boolean_t *hit); + +void * +mem_pool_get0(unsigned long sizeof_type, gf_boolean_t *hit); + #endif /* _MEM_POOL_H */ |