From f533ab6da623303de5f6621b35e5ec73832a6d22 Mon Sep 17 00:00:00 2001 From: Yinan Zhang Date: Wed, 15 Apr 2020 15:09:32 -0700 Subject: [PATCH] Add forking handling for stats --- include/jemalloc/internal/stats.h | 3 +++ src/jemalloc.c | 3 +++ src/stats.c | 15 +++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/include/jemalloc/internal/stats.h b/include/jemalloc/internal/stats.h index 3720619b..7cd14302 100644 --- a/include/jemalloc/internal/stats.h +++ b/include/jemalloc/internal/stats.h @@ -44,5 +44,8 @@ bool stats_interval_accum(tsd_t *tsd, uint64_t bytes); void stats_print(write_cb_t *write_cb, void *cbopaque, const char *opts); bool stats_boot(void); +void stats_prefork(tsdn_t *tsdn); +void stats_postfork_parent(tsdn_t *tsdn); +void stats_postfork_child(tsdn_t *tsdn); #endif /* JEMALLOC_INTERNAL_STATS_H */ diff --git a/src/jemalloc.c b/src/jemalloc.c index 14b2a088..78da45bc 100644 --- a/src/jemalloc.c +++ b/src/jemalloc.c @@ -3989,6 +3989,7 @@ _malloc_prefork(void) } } prof_prefork1(tsd_tsdn(tsd)); + stats_prefork(tsd_tsdn(tsd)); tsd_prefork(tsd); } @@ -4016,6 +4017,7 @@ _malloc_postfork(void) witness_postfork_parent(tsd_witness_tsdp_get(tsd)); /* Release all mutexes, now that fork() has completed. */ + stats_postfork_parent(tsd_tsdn(tsd)); for (i = 0, narenas = narenas_total_get(); i < narenas; i++) { arena_t *arena; @@ -4045,6 +4047,7 @@ jemalloc_postfork_child(void) { witness_postfork_child(tsd_witness_tsdp_get(tsd)); /* Release all mutexes, now that fork() has completed. */ + stats_postfork_child(tsd_tsdn(tsd)); for (i = 0, narenas = narenas_total_get(); i < narenas; i++) { arena_t *arena; diff --git a/src/stats.c b/src/stats.c index 0a1a99da..56d3b489 100644 --- a/src/stats.c +++ b/src/stats.c @@ -1526,3 +1526,18 @@ stats_boot(void) { return counter_accum_init(&stats_interval_accumulated, stats_interval); } + +void +stats_prefork(tsdn_t *tsdn) { + counter_prefork(tsdn, &stats_interval_accumulated); +} + +void +stats_postfork_parent(tsdn_t *tsdn) { + counter_postfork_parent(tsdn, &stats_interval_accumulated); +} + +void +stats_postfork_child(tsdn_t *tsdn) { + counter_postfork_child(tsdn, &stats_interval_accumulated); +}