Move bin stats code from arena to bin module.
This commit is contained in:
parent
48bb4a056b
commit
8aafa270fd
@ -78,10 +78,29 @@ struct bin_s {
|
|||||||
malloc_bin_stats_t stats;
|
malloc_bin_stats_t stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Returns true on error. */
|
/* Initializes a bin to empty. Returns true on error. */
|
||||||
bool bin_init(bin_t *bin);
|
bool bin_init(bin_t *bin);
|
||||||
|
|
||||||
|
/* Forking. */
|
||||||
void bin_prefork(tsdn_t *tsdn, bin_t *bin);
|
void bin_prefork(tsdn_t *tsdn, bin_t *bin);
|
||||||
void bin_postfork_parent(tsdn_t *tsdn, bin_t *bin);
|
void bin_postfork_parent(tsdn_t *tsdn, bin_t *bin);
|
||||||
void bin_postfork_child(tsdn_t *tsdn, bin_t *bin);
|
void bin_postfork_child(tsdn_t *tsdn, bin_t *bin);
|
||||||
|
|
||||||
|
/* Stats. */
|
||||||
|
static inline void
|
||||||
|
bin_stats_merge(tsdn_t *tsdn, malloc_bin_stats_t *dst_bin_stats, bin_t *bin) {
|
||||||
|
malloc_mutex_lock(tsdn, &bin->lock);
|
||||||
|
malloc_mutex_prof_read(tsdn, &dst_bin_stats->mutex_data, &bin->lock);
|
||||||
|
dst_bin_stats->nmalloc += bin->stats.nmalloc;
|
||||||
|
dst_bin_stats->ndalloc += bin->stats.ndalloc;
|
||||||
|
dst_bin_stats->nrequests += bin->stats.nrequests;
|
||||||
|
dst_bin_stats->curregs += bin->stats.curregs;
|
||||||
|
dst_bin_stats->nfills += bin->stats.nfills;
|
||||||
|
dst_bin_stats->nflushes += bin->stats.nflushes;
|
||||||
|
dst_bin_stats->nslabs += bin->stats.nslabs;
|
||||||
|
dst_bin_stats->reslabs += bin->stats.reslabs;
|
||||||
|
dst_bin_stats->curslabs += bin->stats.curslabs;
|
||||||
|
malloc_mutex_unlock(tsdn, &bin->lock);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_BIN_H */
|
#endif /* JEMALLOC_INTERNAL_BIN_H */
|
||||||
|
@ -6,6 +6,12 @@
|
|||||||
#include "jemalloc/internal/mutex.h"
|
#include "jemalloc/internal/mutex.h"
|
||||||
#include "jemalloc/internal/size_classes.h"
|
#include "jemalloc/internal/size_classes.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The synchronization for stats counters may piggyback on existing
|
||||||
|
* synchronization in the associated data. Therefore, the merging functions for
|
||||||
|
* a module's stats will lie in the module, instead of with the stats.
|
||||||
|
*/
|
||||||
|
|
||||||
/* OPTION(opt, var_name, default, set_value_to) */
|
/* OPTION(opt, var_name, default, set_value_to) */
|
||||||
#define STATS_PRINT_OPTIONS \
|
#define STATS_PRINT_OPTIONS \
|
||||||
OPTION('J', json, false, true) \
|
OPTION('J', json, false, true) \
|
||||||
|
15
src/arena.c
15
src/arena.c
@ -337,20 +337,7 @@ arena_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads,
|
|||||||
nstime_subtract(&astats->uptime, &arena->create_time);
|
nstime_subtract(&astats->uptime, &arena->create_time);
|
||||||
|
|
||||||
for (szind_t i = 0; i < NBINS; i++) {
|
for (szind_t i = 0; i < NBINS; i++) {
|
||||||
bin_t *bin = &arena->bins[i];
|
bin_stats_merge(tsdn, &bstats[i], &arena->bins[i]);
|
||||||
|
|
||||||
malloc_mutex_lock(tsdn, &bin->lock);
|
|
||||||
malloc_mutex_prof_read(tsdn, &bstats[i].mutex_data, &bin->lock);
|
|
||||||
bstats[i].nmalloc += bin->stats.nmalloc;
|
|
||||||
bstats[i].ndalloc += bin->stats.ndalloc;
|
|
||||||
bstats[i].nrequests += bin->stats.nrequests;
|
|
||||||
bstats[i].curregs += bin->stats.curregs;
|
|
||||||
bstats[i].nfills += bin->stats.nfills;
|
|
||||||
bstats[i].nflushes += bin->stats.nflushes;
|
|
||||||
bstats[i].nslabs += bin->stats.nslabs;
|
|
||||||
bstats[i].reslabs += bin->stats.reslabs;
|
|
||||||
bstats[i].curslabs += bin->stats.curslabs;
|
|
||||||
malloc_mutex_unlock(tsdn, &bin->lock);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user