Add stats: arena uptime.
This commit is contained in:
parent
04fec5e084
commit
baf3e294e0
@ -2280,6 +2280,18 @@ struct extent_hooks_s {
|
|||||||
arena.</para></listitem>
|
arena.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry id="stats.arenas.i.uptime">
|
||||||
|
<term>
|
||||||
|
<mallctl>stats.arenas.<i>.uptime</mallctl>
|
||||||
|
(<type>uint64_t</type>)
|
||||||
|
<literal>r-</literal>
|
||||||
|
</term>
|
||||||
|
<listitem><para>Time elapsed (in nanoseconds) since the arena was
|
||||||
|
created. If <i> equals <constant>0</constant> or
|
||||||
|
<constant>MALLCTL_ARENAS_ALL</constant>, this is the uptime since malloc
|
||||||
|
initialization.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="stats.arenas.i.pactive">
|
<varlistentry id="stats.arenas.i.pactive">
|
||||||
<term>
|
<term>
|
||||||
<mallctl>stats.arenas.<i>.pactive</mallctl>
|
<mallctl>stats.arenas.<i>.pactive</mallctl>
|
||||||
|
@ -261,6 +261,8 @@ struct arena_s {
|
|||||||
* Synchronization: internal.
|
* Synchronization: internal.
|
||||||
*/
|
*/
|
||||||
base_t *base;
|
base_t *base;
|
||||||
|
/* Used to determine uptime. Read-only after initialization. */
|
||||||
|
nstime_t create_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Used in conjunction with tsd for fast arena-related context lookup. */
|
/* Used in conjunction with tsd for fast arena-related context lookup. */
|
||||||
|
@ -145,6 +145,9 @@ typedef struct arena_stats_s {
|
|||||||
|
|
||||||
/* One element for each large size class. */
|
/* One element for each large size class. */
|
||||||
malloc_large_stats_t lstats[NSIZES - NBINS];
|
malloc_large_stats_t lstats[NSIZES - NBINS];
|
||||||
|
|
||||||
|
/* Arena uptime. */
|
||||||
|
nstime_t uptime;
|
||||||
} arena_stats_t;
|
} arena_stats_t;
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_STATS_H */
|
#endif /* JEMALLOC_INTERNAL_STATS_H */
|
||||||
|
@ -330,6 +330,10 @@ arena_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads,
|
|||||||
arena_prof_mutex_base)
|
arena_prof_mutex_base)
|
||||||
#undef READ_ARENA_MUTEX_PROF_DATA
|
#undef READ_ARENA_MUTEX_PROF_DATA
|
||||||
|
|
||||||
|
nstime_copy(&astats->uptime, &arena->create_time);
|
||||||
|
nstime_update(&astats->uptime);
|
||||||
|
nstime_subtract(&astats->uptime, &arena->create_time);
|
||||||
|
|
||||||
for (szind_t i = 0; i < NBINS; i++) {
|
for (szind_t i = 0; i < NBINS; i++) {
|
||||||
arena_bin_t *bin = &arena->bins[i];
|
arena_bin_t *bin = &arena->bins[i];
|
||||||
|
|
||||||
@ -1965,6 +1969,9 @@ arena_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks) {
|
|||||||
|
|
||||||
arena->base = base;
|
arena->base = base;
|
||||||
|
|
||||||
|
nstime_init(&arena->create_time, 0);
|
||||||
|
nstime_update(&arena->create_time);
|
||||||
|
|
||||||
/* We don't support reetrancy for arena 0 bootstrapping. */
|
/* We don't support reetrancy for arena 0 bootstrapping. */
|
||||||
if (ind != 0 && hooks_arena_new_hook) {
|
if (ind != 0 && hooks_arena_new_hook) {
|
||||||
/*
|
/*
|
||||||
|
@ -157,6 +157,7 @@ CTL_PROTO(stats_arenas_i_lextents_j_nrequests)
|
|||||||
CTL_PROTO(stats_arenas_i_lextents_j_curlextents)
|
CTL_PROTO(stats_arenas_i_lextents_j_curlextents)
|
||||||
INDEX_PROTO(stats_arenas_i_lextents_j)
|
INDEX_PROTO(stats_arenas_i_lextents_j)
|
||||||
CTL_PROTO(stats_arenas_i_nthreads)
|
CTL_PROTO(stats_arenas_i_nthreads)
|
||||||
|
CTL_PROTO(stats_arenas_i_uptime)
|
||||||
CTL_PROTO(stats_arenas_i_dss)
|
CTL_PROTO(stats_arenas_i_dss)
|
||||||
CTL_PROTO(stats_arenas_i_dirty_decay_time)
|
CTL_PROTO(stats_arenas_i_dirty_decay_time)
|
||||||
CTL_PROTO(stats_arenas_i_muzzy_decay_time)
|
CTL_PROTO(stats_arenas_i_muzzy_decay_time)
|
||||||
@ -441,6 +442,7 @@ MUTEX_PROF_ARENA_MUTEXES
|
|||||||
|
|
||||||
static const ctl_named_node_t stats_arenas_i_node[] = {
|
static const ctl_named_node_t stats_arenas_i_node[] = {
|
||||||
{NAME("nthreads"), CTL(stats_arenas_i_nthreads)},
|
{NAME("nthreads"), CTL(stats_arenas_i_nthreads)},
|
||||||
|
{NAME("uptime"), CTL(stats_arenas_i_uptime)},
|
||||||
{NAME("dss"), CTL(stats_arenas_i_dss)},
|
{NAME("dss"), CTL(stats_arenas_i_dss)},
|
||||||
{NAME("dirty_decay_time"), CTL(stats_arenas_i_dirty_decay_time)},
|
{NAME("dirty_decay_time"), CTL(stats_arenas_i_dirty_decay_time)},
|
||||||
{NAME("muzzy_decay_time"), CTL(stats_arenas_i_muzzy_decay_time)},
|
{NAME("muzzy_decay_time"), CTL(stats_arenas_i_muzzy_decay_time)},
|
||||||
@ -778,6 +780,10 @@ MUTEX_PROF_ARENA_MUTEXES
|
|||||||
accum_atomic_zu(&sdstats->astats.tcache_bytes,
|
accum_atomic_zu(&sdstats->astats.tcache_bytes,
|
||||||
&astats->astats.tcache_bytes);
|
&astats->astats.tcache_bytes);
|
||||||
|
|
||||||
|
if (ctl_arena->arena_ind == 0) {
|
||||||
|
sdstats->astats.uptime = astats->astats.uptime;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < NBINS; i++) {
|
for (i = 0; i < NBINS; i++) {
|
||||||
sdstats->bstats[i].nmalloc += astats->bstats[i].nmalloc;
|
sdstats->bstats[i].nmalloc += astats->bstats[i].nmalloc;
|
||||||
sdstats->bstats[i].ndalloc += astats->bstats[i].ndalloc;
|
sdstats->bstats[i].ndalloc += astats->bstats[i].ndalloc;
|
||||||
@ -2317,6 +2323,8 @@ CTL_RO_GEN(stats_arenas_i_dirty_decay_time, arenas_i(mib[2])->dirty_decay_time,
|
|||||||
CTL_RO_GEN(stats_arenas_i_muzzy_decay_time, arenas_i(mib[2])->muzzy_decay_time,
|
CTL_RO_GEN(stats_arenas_i_muzzy_decay_time, arenas_i(mib[2])->muzzy_decay_time,
|
||||||
ssize_t)
|
ssize_t)
|
||||||
CTL_RO_GEN(stats_arenas_i_nthreads, arenas_i(mib[2])->nthreads, unsigned)
|
CTL_RO_GEN(stats_arenas_i_nthreads, arenas_i(mib[2])->nthreads, unsigned)
|
||||||
|
CTL_RO_GEN(stats_arenas_i_uptime,
|
||||||
|
nstime_ns(&arenas_i(mib[2])->astats->astats.uptime), uint64_t)
|
||||||
CTL_RO_GEN(stats_arenas_i_pactive, arenas_i(mib[2])->pactive, size_t)
|
CTL_RO_GEN(stats_arenas_i_pactive, arenas_i(mib[2])->pactive, size_t)
|
||||||
CTL_RO_GEN(stats_arenas_i_pdirty, arenas_i(mib[2])->pdirty, size_t)
|
CTL_RO_GEN(stats_arenas_i_pdirty, arenas_i(mib[2])->pdirty, size_t)
|
||||||
CTL_RO_GEN(stats_arenas_i_pmuzzy, arenas_i(mib[2])->pmuzzy, size_t)
|
CTL_RO_GEN(stats_arenas_i_pmuzzy, arenas_i(mib[2])->pmuzzy, size_t)
|
||||||
|
10
src/stats.c
10
src/stats.c
@ -421,6 +421,7 @@ stats_arena_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
size_t large_allocated;
|
size_t large_allocated;
|
||||||
uint64_t large_nmalloc, large_ndalloc, large_nrequests;
|
uint64_t large_nmalloc, large_ndalloc, large_nrequests;
|
||||||
size_t tcache_bytes;
|
size_t tcache_bytes;
|
||||||
|
uint64_t uptime;
|
||||||
|
|
||||||
CTL_GET("arenas.page", &page, size_t);
|
CTL_GET("arenas.page", &page, size_t);
|
||||||
|
|
||||||
@ -433,6 +434,15 @@ stats_arena_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
"assigned threads: %u\n", nthreads);
|
"assigned threads: %u\n", nthreads);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CTL_M2_GET("stats.arenas.0.uptime", i, &uptime, uint64_t);
|
||||||
|
if (json) {
|
||||||
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
|
"\t\t\t\t\"uptime_ns\": %"FMTu64",\n", uptime);
|
||||||
|
} else {
|
||||||
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
|
"uptime: %"FMTu64"\n", uptime);
|
||||||
|
}
|
||||||
|
|
||||||
CTL_M2_GET("stats.arenas.0.dss", i, &dss, const char *);
|
CTL_M2_GET("stats.arenas.0.dss", i, &dss, const char *);
|
||||||
if (json) {
|
if (json) {
|
||||||
malloc_cprintf(write_cb, cbopaque,
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
|
Loading…
Reference in New Issue
Block a user