xref: /freebsd/contrib/jemalloc/include/jemalloc/internal/stats.h (revision c43cad87172039ccf38172129c79755ea79e6102)
1 #ifndef JEMALLOC_INTERNAL_STATS_H
2 #define JEMALLOC_INTERNAL_STATS_H
3 
4 /*  OPTION(opt,		var_name,	default,	set_value_to) */
5 #define STATS_PRINT_OPTIONS						\
6     OPTION('J',		json,		false,		true)		\
7     OPTION('g',		general,	true,		false)		\
8     OPTION('m',		merged,		config_stats,	false)		\
9     OPTION('d',		destroyed,	config_stats,	false)		\
10     OPTION('a',		unmerged,	config_stats,	false)		\
11     OPTION('b',		bins,		true,		false)		\
12     OPTION('l',		large,		true,		false)		\
13     OPTION('x',		mutex,		true,		false)		\
14     OPTION('e',		extents,	true,		false)		\
15     OPTION('h',		hpa,		config_stats,	false)
16 
17 enum {
18 #define OPTION(o, v, d, s) stats_print_option_num_##v,
19     STATS_PRINT_OPTIONS
20 #undef OPTION
21     stats_print_tot_num_options
22 };
23 
24 /* Options for stats_print. */
25 extern bool opt_stats_print;
26 extern char opt_stats_print_opts[stats_print_tot_num_options+1];
27 
28 /* Utilities for stats_interval. */
29 extern int64_t opt_stats_interval;
30 extern char opt_stats_interval_opts[stats_print_tot_num_options+1];
31 
32 #define STATS_INTERVAL_DEFAULT -1
33 /*
34  * Batch-increment the counter to reduce synchronization overhead.  Each thread
35  * merges after (interval >> LG_BATCH_SIZE) bytes of allocations; also limit the
36  * BATCH_MAX for accuracy when the interval is huge (which is expected).
37  */
38 #define STATS_INTERVAL_ACCUM_LG_BATCH_SIZE 6
39 #define STATS_INTERVAL_ACCUM_BATCH_MAX (4 << 20)
40 
41 /* Only accessed by thread event. */
42 uint64_t stats_interval_new_event_wait(tsd_t *tsd);
43 uint64_t stats_interval_postponed_event_wait(tsd_t *tsd);
44 void stats_interval_event_handler(tsd_t *tsd, uint64_t elapsed);
45 
46 /* Implements je_malloc_stats_print. */
47 void stats_print(write_cb_t *write_cb, void *cbopaque, const char *opts);
48 
49 bool stats_boot(void);
50 void stats_prefork(tsdn_t *tsdn);
51 void stats_postfork_parent(tsdn_t *tsdn);
52 void stats_postfork_child(tsdn_t *tsdn);
53 
54 #endif /* JEMALLOC_INTERNAL_STATS_H */
55