aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-04-21 04:08:01 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-04-21 04:08:01 +0400
commitda9546194391e7d14ffe9b0c78f84892b012ff28 (patch)
tree573d8247533354e338ca4783dc4bdf28b078e531
parentd0dbd1aa3a95c5a1f354458033f6af2b8f01a4a5 (diff)
downloadrspamd-da9546194391e7d14ffe9b0c78f84892b012ff28.tar.gz
rspamd-da9546194391e7d14ffe9b0c78f84892b012ff28.zip
* Add counter for oversized chunks: this parameter can improve performance, for example
if we have too many oversized chunks it is good decision to increase chunk size.
-rw-r--r--src/controller.c2
-rw-r--r--src/mem_pool.c3
-rw-r--r--src/mem_pool.h1
3 files changed, 6 insertions, 0 deletions
diff --git a/src/controller.c b/src/controller.c
index a2c373d25..b9223ff50 100644
--- a/src/controller.c
+++ b/src/controller.c
@@ -206,6 +206,8 @@ process_command (struct controller_command *cmd, char **cmd_args, struct control
(long int)mem_st.shared_chunks_allocated);
r += snprintf (out_buf + r, sizeof (out_buf) - r, "Chunks freed: %ld" CRLF,
(long int)mem_st.chunks_freed);
+ r += snprintf (out_buf + r, sizeof (out_buf) - r, "Oversized chunks: %ld" CRLF,
+ (long int)mem_st.oversized_chunks);
rspamd_dispatcher_write (session->dispatcher, out_buf, r, FALSE);
}
break;
diff --git a/src/mem_pool.c b/src/mem_pool.c
index 956a62422..66d9ace19 100644
--- a/src/mem_pool.c
+++ b/src/mem_pool.c
@@ -168,6 +168,7 @@ memory_pool_alloc (memory_pool_t *pool, memory_pool_ssize_t size)
new = pool_chain_new (cur->len);
}
else {
+ mem_pool_stat->oversized_chunks ++;
new = pool_chain_new (size + cur->len);
}
/* Attach new pool to chain */
@@ -239,6 +240,7 @@ memory_pool_alloc_shared (memory_pool_t *pool, memory_pool_ssize_t size)
new = pool_chain_new_shared (cur->len);
}
else {
+ mem_pool_stat->oversized_chunks ++;
new = pool_chain_new_shared (size + cur->len);
}
/* Attach new pool to chain */
@@ -402,6 +404,7 @@ memory_pool_stat (memory_pool_stat_t *st)
st->chunks_allocated = mem_pool_stat->chunks_allocated;
st->shared_chunks_allocated = mem_pool_stat->shared_chunks_allocated;
st->chunks_freed = mem_pool_stat->chunks_freed;
+ st->oversized_chunks = mem_pool_stat->oversized_chunks;
}
#define FIXED_POOL_SIZE 4095
diff --git a/src/mem_pool.h b/src/mem_pool.h
index 0754afd7b..6875a1850 100644
--- a/src/mem_pool.h
+++ b/src/mem_pool.h
@@ -74,6 +74,7 @@ typedef struct memory_pool_stat_s {
memory_pool_ssize_t chunks_allocated; /**< number of chunks that are allocated */
memory_pool_ssize_t shared_chunks_allocated; /**< shared chunks allocated */
memory_pool_ssize_t chunks_freed; /**< chunks freed */
+ memory_pool_ssize_t oversized_chunks; /**< oversized chunks */
} memory_pool_stat_t;
/**