[or-cvs] r9991: Make dumpmemusage() dump cell pool usage information. (in tor/trunk: . src/common src/or)
nickm at seul.org
nickm at seul.org
Thu Apr 19 18:47:09 UTC 2007
Author: nickm
Date: 2007-04-19 14:47:04 -0400 (Thu, 19 Apr 2007)
New Revision: 9991
Modified:
tor/trunk/
tor/trunk/src/common/mempool.c
tor/trunk/src/common/mempool.h
tor/trunk/src/or/main.c
tor/trunk/src/or/or.h
tor/trunk/src/or/relay.c
Log:
r12456 at catbus: nickm | 2007-04-19 14:47:01 -0400
Make dumpmemusage() dump cell pool usage information.
Property changes on: tor/trunk
___________________________________________________________________
svk:merge ticket from /tor/trunk [r12456] on 8246c3cf-6607-4228-993b-4d95d33730f1
Modified: tor/trunk/src/common/mempool.c
===================================================================
--- tor/trunk/src/common/mempool.c 2007-04-19 15:23:38 UTC (rev 9990)
+++ tor/trunk/src/common/mempool.c 2007-04-19 18:47:04 UTC (rev 9991)
@@ -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 @@
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
+
Modified: tor/trunk/src/common/mempool.h
===================================================================
--- tor/trunk/src/common/mempool.h 2007-04-19 15:23:38 UTC (rev 9990)
+++ tor/trunk/src/common/mempool.h 2007-04-19 18:47:04 UTC (rev 9991)
@@ -21,6 +21,7 @@
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 */
Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c 2007-04-19 15:23:38 UTC (rev 9990)
+++ tor/trunk/src/or/main.c 2007-04-19 18:47:04 UTC (rev 9991)
@@ -1443,6 +1443,7 @@
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
Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h 2007-04-19 15:23:38 UTC (rev 9990)
+++ tor/trunk/src/or/or.h 2007-04-19 18:47:04 UTC (rev 9991)
@@ -2698,6 +2698,7 @@
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);
Modified: tor/trunk/src/or/relay.c
===================================================================
--- tor/trunk/src/or/relay.c 2007-04-19 15:23:38 UTC (rev 9990)
+++ tor/trunk/src/or/relay.c 2007-04-19 18:47:04 UTC (rev 9991)
@@ -1518,6 +1518,11 @@
{
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 @@
{
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>. */
More information about the tor-commits
mailing list