diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-04-19 18:47:04 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-04-19 18:47:04 +0000 |
commit | 7392464b8805950be47fddf160efef3d52df7444 (patch) | |
tree | ca07050a3001de9ee7ed7df58b670300b4f8a452 /src | |
parent | bf4f0539cf1163c872574055fe69d67f06a5f87f (diff) | |
download | tor-7392464b8805950be47fddf160efef3d52df7444.tar.gz tor-7392464b8805950be47fddf160efef3d52df7444.zip |
r12456@catbus: nickm | 2007-04-19 14:47:01 -0400
Make dumpmemusage() dump cell pool usage information.
svn:r9991
Diffstat (limited to 'src')
-rw-r--r-- | src/common/mempool.c | 48 | ||||
-rw-r--r-- | src/common/mempool.h | 1 | ||||
-rw-r--r-- | src/or/main.c | 1 | ||||
-rw-r--r-- | src/or/or.h | 1 | ||||
-rw-r--r-- | src/or/relay.c | 10 |
5 files changed, 61 insertions, 0 deletions
diff --git a/src/common/mempool.c b/src/common/mempool.c index 91d4db07dc..9f1fd394bd 100644 --- a/src/common/mempool.c +++ b/src/common/mempool.c @@ -72,6 +72,7 @@ #define FREE(x) tor_free(x) #define ASSERT(x) tor_assert(x) #undef ALLOC_CAN_RETURN_NULL +#define TOR /* End Tor dependencies */ #else /* If you're not building this as part of Tor, you'll want to define the @@ -488,3 +489,50 @@ mp_pool_assert_ok(mp_pool_t *pool) ASSERT(pool->n_empty_chunks == n_empty); } +#ifdef TOR +/*FFFF uses Tor logging functions. */ +/**DOCDOC*/ +void +mp_pool_log_status(mp_pool_t *pool, int severity) +{ + uint64_t bytes_used = 0; + uint64_t bytes_allocated = 0; + uint64_t bu = 0, ba = 0; + mp_chunk_t *chunk; + int n_full = 0, n_used = 0; + + ASSERT(pool); + + for (chunk = pool->empty_chunks; chunk; chunk = chunk->next) { + bytes_allocated += chunk->mem_size; + } + log_fn(severity, LD_MM, U64_FORMAT" bytes in %d empty chunks", + U64_PRINTF_ARG(bytes_used), pool->n_empty_chunks); + for (chunk = pool->used_chunks; chunk; chunk = chunk->next) { + ++n_used; + bu += chunk->n_allocated * pool->item_alloc_size; + ba += chunk->mem_size; + } + log_fn(severity, LD_MM, U64_FORMAT"/"U64_FORMAT + " bytes in %d partially full chunks", + U64_PRINTF_ARG(bu), U64_PRINTF_ARG(ba), n_used); + bytes_used += bu; + bytes_allocated += bu; + bu = ba = 0; + for (chunk = pool->full_chunks; chunk; chunk = chunk->next) { + ++n_full; + bu += chunk->n_allocated * pool->item_alloc_size; + ba += chunk->mem_size; + } + log_fn(severity, LD_MM, U64_FORMAT"/"U64_FORMAT + " bytes in %d full chunks", + U64_PRINTF_ARG(bu), U64_PRINTF_ARG(ba), n_full); + bytes_used += bu; + bytes_allocated += bu; + + log_fn(severity, LD_MM, "Total: "U64_FORMAT"/"U64_FORMAT" bytes allocated " + "for cell pools are full.", + U64_PRINTF_ARG(bytes_used), U64_PRINTF_ARG(bytes_allocated)); +} +#endif + diff --git a/src/common/mempool.h b/src/common/mempool.h index 09174b2a55..4b6f480d5b 100644 --- a/src/common/mempool.h +++ b/src/common/mempool.h @@ -21,6 +21,7 @@ mp_pool_t *mp_pool_new(size_t item_size, size_t chunk_capacity); void mp_pool_clean(mp_pool_t *pool, int n); void mp_pool_destroy(mp_pool_t *pool); void mp_pool_assert_ok(mp_pool_t *pool); +void mp_pool_log_status(mp_pool_t *pool, int severity); #ifdef MEMPOOL_PRIVATE /* These declarations are only used by mempool.c and test.c */ diff --git a/src/or/main.c b/src/or/main.c index f42223641d..1249bafc74 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1443,6 +1443,7 @@ dumpmemusage(int severity) log(severity, LD_GENERAL, "In rephist: "U64_FORMAT" used by %d Tors.", U64_PRINTF_ARG(rephist_total_alloc), rephist_total_num); dump_routerlist_mem_usage(severity); + dump_cell_pool_usage(severity); } /** Write all statistics to the log, with log level 'severity'. Called diff --git a/src/or/or.h b/src/or/or.h index c42a57d690..1fbcb1b7aa 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2698,6 +2698,7 @@ extern uint64_t stats_n_data_bytes_received; void init_cell_pool(void); void free_cell_pool(void); void clean_cell_pool(void); +void dump_cell_pool_usage(int severity); void cell_queue_clear(cell_queue_t *queue); void cell_queue_append(cell_queue_t *queue, packed_cell_t *cell); diff --git a/src/or/relay.c b/src/or/relay.c index 1f949e5a3a..a5bea0a717 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -1518,6 +1518,11 @@ packed_cell_alloc(void) { return mp_pool_get(cell_pool); } +void +dump_cell_pool_usage(int severity) +{ + mp_pool_log_status(cell_pool, severity); +} #else /* ENABLE_CELL_POOL isn't defined: here are some stubs to use tor_malloc() * and tor_free() instead. */ @@ -1547,6 +1552,11 @@ packed_cell_alloc(void) { return tor_malloc(sizeof(packed_cell_t)); } +void +dump_cell_pool_usage(int severity) +{ + (void) severity; +} #endif /** Allocate a new copy of packed <b>cell</b>. */ |