aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQi Wang <interwq@gwu.edu>2016-04-22 18:37:44 -0700
committerQi Wang <interwq@gmail.com>2017-01-18 10:55:21 -0800
commit58424e679d7c1095c0ac2f148ee558d6a067f577 (patch)
treec389083dcb396eb4d4f5631397252a71579d752c /src
parent12ab4383e9ea743e8e6b9115be73f2c6dfde5e24 (diff)
downloadplatform_external_jemalloc_new-58424e679d7c1095c0ac2f148ee558d6a067f577.tar.gz
platform_external_jemalloc_new-58424e679d7c1095c0ac2f148ee558d6a067f577.tar.bz2
platform_external_jemalloc_new-58424e679d7c1095c0ac2f148ee558d6a067f577.zip
Added stats about number of bytes cached in tcache currently.
Diffstat (limited to 'src')
-rw-r--r--src/arena.c15
-rw-r--r--src/ctl.c9
-rw-r--r--src/stats.c13
3 files changed, 37 insertions, 0 deletions
diff --git a/src/arena.c b/src/arena.c
index 70d71fcb..7362c4e6 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -1625,6 +1625,21 @@ arena_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads,
lstats[i].nrequests += arena->stats.lstats[i].nrequests;
lstats[i].curlextents += arena->stats.lstats[i].curlextents;
}
+
+ if (config_tcache) {
+ tcache_bin_t *tbin;
+ tcache_t *tcache;
+
+ /* tcache_bytes counts currently cached bytes. */
+ astats->tcache_bytes = 0;
+ ql_foreach(tcache, &arena->tcache_ql, link) {
+ for (i = 0; i < nhbins; i++) {
+ tbin = &tcache->tbins[i];
+ astats->tcache_bytes += tbin->ncached *
+ index2size(i);
+ }
+ }
+ }
malloc_mutex_unlock(tsdn, &arena->lock);
for (i = 0; i < NBINS; i++) {
diff --git a/src/ctl.c b/src/ctl.c
index 8484ba85..9c582d65 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -161,6 +161,7 @@ CTL_PROTO(stats_arenas_i_nmadvise)
CTL_PROTO(stats_arenas_i_purged)
CTL_PROTO(stats_arenas_i_base)
CTL_PROTO(stats_arenas_i_internal)
+CTL_PROTO(stats_arenas_i_tcache_bytes)
CTL_PROTO(stats_arenas_i_resident)
INDEX_PROTO(stats_arenas_i)
CTL_PROTO(stats_allocated)
@@ -382,6 +383,7 @@ static const ctl_named_node_t stats_arenas_i_node[] = {
{NAME("purged"), CTL(stats_arenas_i_purged)},
{NAME("base"), CTL(stats_arenas_i_base)},
{NAME("internal"), CTL(stats_arenas_i_internal)},
+ {NAME("tcache_bytes"), CTL(stats_arenas_i_tcache_bytes)},
{NAME("resident"), CTL(stats_arenas_i_resident)},
{NAME("small"), CHILD(named, stats_arenas_i_small)},
{NAME("large"), CHILD(named, stats_arenas_i_large)},
@@ -601,6 +603,11 @@ ctl_arena_stats_sdmerge(ctl_arena_stats_t *sdstats, ctl_arena_stats_t *astats,
sdstats->astats.nrequests_large +=
astats->astats.nrequests_large;
+ if (config_tcache) {
+ sdstats->astats.tcache_bytes +=
+ astats->astats.tcache_bytes;
+ }
+
for (i = 0; i < NBINS; i++) {
sdstats->bstats[i].nmalloc += astats->bstats[i].nmalloc;
sdstats->bstats[i].ndalloc += astats->bstats[i].ndalloc;
@@ -2105,6 +2112,8 @@ CTL_RO_CGEN(config_stats, stats_arenas_i_base,
stats_arenas_i(mib[2])->astats.base, size_t)
CTL_RO_CGEN(config_stats, stats_arenas_i_internal,
stats_arenas_i(mib[2])->astats.internal, size_t)
+CTL_RO_CGEN(config_stats && config_tcache, stats_arenas_i_tcache_bytes,
+ stats_arenas_i(mib[2])->astats.tcache_bytes, size_t)
CTL_RO_CGEN(config_stats, stats_arenas_i_resident,
stats_arenas_i(mib[2])->astats.resident, size_t)
diff --git a/src/stats.c b/src/stats.c
index ef349a50..f20fd4ce 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -261,6 +261,7 @@ stats_arena_print(void (*write_cb)(void *, const char *), void *cbopaque,
uint64_t small_nmalloc, small_ndalloc, small_nrequests;
size_t large_allocated;
uint64_t large_nmalloc, large_ndalloc, large_nrequests;
+ size_t tcache_bytes;
CTL_GET("arenas.page", &page, size_t);
@@ -423,6 +424,18 @@ stats_arena_print(void (*write_cb)(void *, const char *), void *cbopaque,
"internal: %12zu\n", internal);
}
+ if (config_tcache) {
+ CTL_M2_GET("stats.arenas.0.tcache_bytes", i, &tcache_bytes,
+ size_t);
+ if (json) {
+ malloc_cprintf(write_cb, cbopaque,
+ "\t\t\t\t\"tcache\": %zu,\n", tcache_bytes);
+ } else {
+ malloc_cprintf(write_cb, cbopaque,
+ "tcache: %12zu\n", tcache_bytes);
+ }
+ }
+
CTL_M2_GET("stats.arenas.0.resident", i, &resident, size_t);
if (json) {
malloc_cprintf(write_cb, cbopaque,