diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-12-09 14:10:39 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-12-09 14:10:39 +0000 |
commit | 592fd69d4f6d339001d24bbe7b772c1da9395643 (patch) | |
tree | 55f237e510ded772130a3fc9aeb954fdfc0b6e85 | |
parent | 0ed913df7255ceabb3fdc3f90fcf6695811a03f5 (diff) | |
download | rspamd-592fd69d4f6d339001d24bbe7b772c1da9395643.tar.gz rspamd-592fd69d4f6d339001d24bbe7b772c1da9395643.zip |
[Minor] Use jemalloc hinting to select the appropriate pool size
-rw-r--r-- | src/libutil/mem_pool.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/libutil/mem_pool.c b/src/libutil/mem_pool.c index 103928323..f45bf8857 100644 --- a/src/libutil/mem_pool.c +++ b/src/libutil/mem_pool.c @@ -22,6 +22,10 @@ #include "khash.h" #include "cryptobox.h" +#ifdef WITH_JEMALLOC +#include <jemalloc/jemalloc.h> +#endif + #ifdef HAVE_SCHED_YIELD #include <sched.h> #endif @@ -155,6 +159,7 @@ static struct _pool_chain * rspamd_mempool_chain_new (gsize size, enum rspamd_mempool_chain_type pool_type) { struct _pool_chain *chain; + gsize total_size = size + sizeof (struct _pool_chain); gpointer map; g_return_val_if_fail (size > 0, NULL); @@ -162,7 +167,7 @@ rspamd_mempool_chain_new (gsize size, enum rspamd_mempool_chain_type pool_type) if (pool_type == RSPAMD_MEMPOOL_SHARED) { #if defined(HAVE_MMAP_ANON) map = mmap (NULL, - size + sizeof (struct _pool_chain), + total_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, @@ -198,18 +203,21 @@ rspamd_mempool_chain_new (gsize size, enum rspamd_mempool_chain_type pool_type) #error No mmap methods are defined #endif g_atomic_int_inc (&mem_pool_stat->shared_chunks_allocated); - g_atomic_int_add (&mem_pool_stat->bytes_allocated, size); + g_atomic_int_add (&mem_pool_stat->bytes_allocated, total_size); } else { - map = g_malloc (sizeof (struct _pool_chain) + size); +#ifdef WITH_JEMALLOC + total_size = nallocx (total_size, 0); +#endif + map = g_malloc (total_size); chain = map; chain->begin = ((guint8 *) chain) + sizeof (struct _pool_chain); - g_atomic_int_add (&mem_pool_stat->bytes_allocated, size); + g_atomic_int_add (&mem_pool_stat->bytes_allocated, total_size); g_atomic_int_inc (&mem_pool_stat->chunks_allocated); } chain->pos = align_ptr (chain->begin, MEM_ALIGNMENT); - chain->len = size; + chain->len = total_size - sizeof (struct _pool_chain); chain->lock = NULL; return chain; |