mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-24 05:33:06 +00:00
Move tcache_stats_merge into arena as arena_cache_bins_stats_merge
This commit is contained in:
@@ -118,6 +118,7 @@ void arena_cache_bin_array_unregister(tsdn_t *tsdn, arena_t *arena,
|
|||||||
cache_bin_array_descriptor_t *desc);
|
cache_bin_array_descriptor_t *desc);
|
||||||
void arena_cache_bin_array_postfork_child(arena_t *arena,
|
void arena_cache_bin_array_postfork_child(arena_t *arena,
|
||||||
cache_bin_array_descriptor_t *desc_or_null);
|
cache_bin_array_descriptor_t *desc_or_null);
|
||||||
|
void arena_cache_bins_stats_merge(tsdn_t *tsdn, arena_t *arena);
|
||||||
void arena_prefork0(tsdn_t *tsdn, arena_t *arena);
|
void arena_prefork0(tsdn_t *tsdn, arena_t *arena);
|
||||||
void arena_prefork1(tsdn_t *tsdn, arena_t *arena);
|
void arena_prefork1(tsdn_t *tsdn, arena_t *arena);
|
||||||
void arena_prefork2(tsdn_t *tsdn, arena_t *arena);
|
void arena_prefork2(tsdn_t *tsdn, arena_t *arena);
|
||||||
|
|||||||
@@ -66,8 +66,6 @@ void tcache_arena_reassociate(
|
|||||||
tcache_t *tcache_create_explicit(tsd_t *tsd);
|
tcache_t *tcache_create_explicit(tsd_t *tsd);
|
||||||
bool thread_tcache_max_set(tsd_t *tsd, size_t tcache_max);
|
bool thread_tcache_max_set(tsd_t *tsd, size_t tcache_max);
|
||||||
void tcache_cleanup(tsd_t *tsd);
|
void tcache_cleanup(tsd_t *tsd);
|
||||||
void tcache_stats_merge(tsdn_t *tsdn,
|
|
||||||
cache_bin_array_descriptor_t *desc, arena_t *arena);
|
|
||||||
bool tcaches_create(tsd_t *tsd, base_t *base, unsigned *r_ind);
|
bool tcaches_create(tsd_t *tsd, base_t *base, unsigned *r_ind);
|
||||||
void tcaches_flush(tsd_t *tsd, unsigned ind);
|
void tcaches_flush(tsd_t *tsd, unsigned ind);
|
||||||
void tcaches_destroy(tsd_t *tsd, unsigned ind);
|
void tcaches_destroy(tsd_t *tsd, unsigned ind);
|
||||||
|
|||||||
40
src/arena.c
40
src/arena.c
@@ -228,6 +228,27 @@ arena_cache_bin_array_register(tsdn_t *tsdn, arena_t *arena,
|
|||||||
malloc_mutex_unlock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
malloc_mutex_unlock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
arena_cache_bin_stats_flush(tsdn_t *tsdn, arena_t *arena,
|
||||||
|
cache_bin_array_descriptor_t *desc) {
|
||||||
|
cassert(config_stats);
|
||||||
|
for (unsigned i = 0; i < TCACHE_NBINS_MAX; i++) {
|
||||||
|
cache_bin_t *cache_bin = &desc->bins[i];
|
||||||
|
if (cache_bin_disabled(cache_bin)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (i < SC_NBINS) {
|
||||||
|
bin_t *bin = bin_choose(tsdn, arena, i, NULL);
|
||||||
|
bin_stats_nrequests_add(tsdn, bin,
|
||||||
|
cache_bin->tstats.nrequests);
|
||||||
|
} else {
|
||||||
|
arena_stats_large_flush_nrequests_add(tsdn,
|
||||||
|
&arena->stats, i, cache_bin->tstats.nrequests);
|
||||||
|
}
|
||||||
|
cache_bin->tstats.nrequests = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
arena_cache_bin_array_unregister(tsdn_t *tsdn, arena_t *arena,
|
arena_cache_bin_array_unregister(tsdn_t *tsdn, arena_t *arena,
|
||||||
cache_bin_array_descriptor_t *desc) {
|
cache_bin_array_descriptor_t *desc) {
|
||||||
@@ -245,13 +266,7 @@ arena_cache_bin_array_unregister(tsdn_t *tsdn, arena_t *arena,
|
|||||||
assert(in_ql);
|
assert(in_ql);
|
||||||
}
|
}
|
||||||
ql_remove(&arena->cache_bin_array_descriptor_ql, desc, link);
|
ql_remove(&arena->cache_bin_array_descriptor_ql, desc, link);
|
||||||
/*
|
arena_cache_bin_stats_flush(tsdn, arena, desc);
|
||||||
* Flush this descriptor's per-cache_bin request counts up to the
|
|
||||||
* arena's bin/large stats before the owner forgets which arena
|
|
||||||
* accumulated them. (Step 2 of this refactor will relocate
|
|
||||||
* tcache_stats_merge into cache_bin.c.)
|
|
||||||
*/
|
|
||||||
tcache_stats_merge(tsdn, desc, arena);
|
|
||||||
malloc_mutex_unlock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
malloc_mutex_unlock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,6 +287,17 @@ arena_cache_bin_array_postfork_child(arena_t *arena,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
arena_cache_bins_stats_merge(tsdn_t *tsdn, arena_t *arena) {
|
||||||
|
cassert(config_stats);
|
||||||
|
malloc_mutex_lock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
||||||
|
cache_bin_array_descriptor_t *desc;
|
||||||
|
ql_foreach (desc, &arena->cache_bin_array_descriptor_ql, link) {
|
||||||
|
arena_cache_bin_stats_flush(tsdn, arena, desc);
|
||||||
|
}
|
||||||
|
malloc_mutex_unlock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
arena_background_thread_inactivity_check(
|
arena_background_thread_inactivity_check(
|
||||||
tsdn_t *tsdn, arena_t *arena, bool is_background_thread) {
|
tsdn_t *tsdn, arena_t *arena, bool is_background_thread) {
|
||||||
|
|||||||
@@ -305,16 +305,7 @@ stats_print_atexit(void) {
|
|||||||
for (i = 0, narenas = narenas_total_get(); i < narenas; i++) {
|
for (i = 0, narenas = narenas_total_get(); i < narenas; i++) {
|
||||||
arena_t *arena = arena_get(tsdn, i, false);
|
arena_t *arena = arena_get(tsdn, i, false);
|
||||||
if (arena != NULL) {
|
if (arena != NULL) {
|
||||||
cache_bin_array_descriptor_t *desc;
|
arena_cache_bins_stats_merge(tsdn, arena);
|
||||||
|
|
||||||
malloc_mutex_lock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
|
||||||
ql_foreach (desc,
|
|
||||||
&arena->cache_bin_array_descriptor_ql,
|
|
||||||
link) {
|
|
||||||
tcache_stats_merge(tsdn, desc, arena);
|
|
||||||
}
|
|
||||||
malloc_mutex_unlock(
|
|
||||||
tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
22
src/tcache.c
22
src/tcache.c
@@ -1248,28 +1248,6 @@ tcache_cleanup(tsd_t *tsd) {
|
|||||||
memset(tcache->bins, 0, sizeof(cache_bin_t) * TCACHE_NBINS_MAX);
|
memset(tcache->bins, 0, sizeof(cache_bin_t) * TCACHE_NBINS_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
tcache_stats_merge(tsdn_t *tsdn, cache_bin_array_descriptor_t *desc,
|
|
||||||
arena_t *arena) {
|
|
||||||
cassert(config_stats);
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < TCACHE_NBINS_MAX; i++) {
|
|
||||||
cache_bin_t *cache_bin = &desc->bins[i];
|
|
||||||
if (cache_bin_disabled(cache_bin)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (i < SC_NBINS) {
|
|
||||||
bin_t *bin = bin_choose(tsdn, arena, i, NULL);
|
|
||||||
bin_stats_nrequests_add(tsdn, bin,
|
|
||||||
cache_bin->tstats.nrequests);
|
|
||||||
} else {
|
|
||||||
arena_stats_large_flush_nrequests_add(tsdn,
|
|
||||||
&arena->stats, i, cache_bin->tstats.nrequests);
|
|
||||||
}
|
|
||||||
cache_bin->tstats.nrequests = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
tcaches_create_prep(tsd_t *tsd, base_t *base) {
|
tcaches_create_prep(tsd_t *tsd, base_t *base) {
|
||||||
bool err;
|
bool err;
|
||||||
|
|||||||
Reference in New Issue
Block a user