1b7eaed25SJason Evans #ifndef JEMALLOC_INTERNAL_PROF_EXTERNS_H 2b7eaed25SJason Evans #define JEMALLOC_INTERNAL_PROF_EXTERNS_H 3b7eaed25SJason Evans 4b7eaed25SJason Evans #include "jemalloc/internal/mutex.h" 5b7eaed25SJason Evans 6b7eaed25SJason Evans extern malloc_mutex_t bt2gctx_mtx; 7b7eaed25SJason Evans 8b7eaed25SJason Evans extern bool opt_prof; 9b7eaed25SJason Evans extern bool opt_prof_active; 10b7eaed25SJason Evans extern bool opt_prof_thread_active_init; 11b7eaed25SJason Evans extern size_t opt_lg_prof_sample; /* Mean bytes between samples. */ 12b7eaed25SJason Evans extern ssize_t opt_lg_prof_interval; /* lg(prof_interval). */ 13b7eaed25SJason Evans extern bool opt_prof_gdump; /* High-water memory dumping. */ 14b7eaed25SJason Evans extern bool opt_prof_final; /* Final profile dumping. */ 15b7eaed25SJason Evans extern bool opt_prof_leak; /* Dump leak summary at exit. */ 16b7eaed25SJason Evans extern bool opt_prof_accum; /* Report cumulative bytes. */ 17c5ad8142SEric van Gyzen extern bool opt_prof_log; /* Turn logging on at boot. */ 18b7eaed25SJason Evans extern char opt_prof_prefix[ 19b7eaed25SJason Evans /* Minimize memory bloat for non-prof builds. */ 20b7eaed25SJason Evans #ifdef JEMALLOC_PROF 21b7eaed25SJason Evans PATH_MAX + 22b7eaed25SJason Evans #endif 23b7eaed25SJason Evans 1]; 24b7eaed25SJason Evans 25b7eaed25SJason Evans /* Accessed via prof_active_[gs]et{_unlocked,}(). */ 26b7eaed25SJason Evans extern bool prof_active; 27b7eaed25SJason Evans 28b7eaed25SJason Evans /* Accessed via prof_gdump_[gs]et{_unlocked,}(). */ 29b7eaed25SJason Evans extern bool prof_gdump_val; 30b7eaed25SJason Evans 31b7eaed25SJason Evans /* 32b7eaed25SJason Evans * Profile dump interval, measured in bytes allocated. Each arena triggers a 33b7eaed25SJason Evans * profile dump when it reaches this threshold. The effect is that the 34b7eaed25SJason Evans * interval between profile dumps averages prof_interval, though the actual 35b7eaed25SJason Evans * interval between dumps will tend to be sporadic, and the interval will be a 36b7eaed25SJason Evans * maximum of approximately (prof_interval * narenas). 37b7eaed25SJason Evans */ 38b7eaed25SJason Evans extern uint64_t prof_interval; 39b7eaed25SJason Evans 40b7eaed25SJason Evans /* 41b7eaed25SJason Evans * Initialized as opt_lg_prof_sample, and potentially modified during profiling 42b7eaed25SJason Evans * resets. 43b7eaed25SJason Evans */ 44b7eaed25SJason Evans extern size_t lg_prof_sample; 45b7eaed25SJason Evans 46b7eaed25SJason Evans void prof_alloc_rollback(tsd_t *tsd, prof_tctx_t *tctx, bool updated); 47b7eaed25SJason Evans void prof_malloc_sample_object(tsdn_t *tsdn, const void *ptr, size_t usize, 48b7eaed25SJason Evans prof_tctx_t *tctx); 49c5ad8142SEric van Gyzen void prof_free_sampled_object(tsd_t *tsd, const void *ptr, size_t usize, 50c5ad8142SEric van Gyzen prof_tctx_t *tctx); 51b7eaed25SJason Evans void bt_init(prof_bt_t *bt, void **vec); 52b7eaed25SJason Evans void prof_backtrace(prof_bt_t *bt); 53b7eaed25SJason Evans prof_tctx_t *prof_lookup(tsd_t *tsd, prof_bt_t *bt); 54b7eaed25SJason Evans #ifdef JEMALLOC_JET 55b7eaed25SJason Evans size_t prof_tdata_count(void); 56b7eaed25SJason Evans size_t prof_bt_count(void); 57b7eaed25SJason Evans #endif 58b7eaed25SJason Evans typedef int (prof_dump_open_t)(bool, const char *); 59b7eaed25SJason Evans extern prof_dump_open_t *JET_MUTABLE prof_dump_open; 60b7eaed25SJason Evans 61b7eaed25SJason Evans typedef bool (prof_dump_header_t)(tsdn_t *, bool, const prof_cnt_t *); 62b7eaed25SJason Evans extern prof_dump_header_t *JET_MUTABLE prof_dump_header; 63b7eaed25SJason Evans #ifdef JEMALLOC_JET 64b7eaed25SJason Evans void prof_cnt_all(uint64_t *curobjs, uint64_t *curbytes, uint64_t *accumobjs, 65b7eaed25SJason Evans uint64_t *accumbytes); 66b7eaed25SJason Evans #endif 67b7eaed25SJason Evans bool prof_accum_init(tsdn_t *tsdn, prof_accum_t *prof_accum); 68b7eaed25SJason Evans void prof_idump(tsdn_t *tsdn); 69b7eaed25SJason Evans bool prof_mdump(tsd_t *tsd, const char *filename); 70b7eaed25SJason Evans void prof_gdump(tsdn_t *tsdn); 71b7eaed25SJason Evans prof_tdata_t *prof_tdata_init(tsd_t *tsd); 72b7eaed25SJason Evans prof_tdata_t *prof_tdata_reinit(tsd_t *tsd, prof_tdata_t *tdata); 73b7eaed25SJason Evans void prof_reset(tsd_t *tsd, size_t lg_sample); 74b7eaed25SJason Evans void prof_tdata_cleanup(tsd_t *tsd); 75b7eaed25SJason Evans bool prof_active_get(tsdn_t *tsdn); 76b7eaed25SJason Evans bool prof_active_set(tsdn_t *tsdn, bool active); 77b7eaed25SJason Evans const char *prof_thread_name_get(tsd_t *tsd); 78b7eaed25SJason Evans int prof_thread_name_set(tsd_t *tsd, const char *thread_name); 79b7eaed25SJason Evans bool prof_thread_active_get(tsd_t *tsd); 80b7eaed25SJason Evans bool prof_thread_active_set(tsd_t *tsd, bool active); 81b7eaed25SJason Evans bool prof_thread_active_init_get(tsdn_t *tsdn); 82b7eaed25SJason Evans bool prof_thread_active_init_set(tsdn_t *tsdn, bool active_init); 83b7eaed25SJason Evans bool prof_gdump_get(tsdn_t *tsdn); 84b7eaed25SJason Evans bool prof_gdump_set(tsdn_t *tsdn, bool active); 85b7eaed25SJason Evans void prof_boot0(void); 86b7eaed25SJason Evans void prof_boot1(void); 87b7eaed25SJason Evans bool prof_boot2(tsd_t *tsd); 88b7eaed25SJason Evans void prof_prefork0(tsdn_t *tsdn); 89b7eaed25SJason Evans void prof_prefork1(tsdn_t *tsdn); 90b7eaed25SJason Evans void prof_postfork_parent(tsdn_t *tsdn); 91b7eaed25SJason Evans void prof_postfork_child(tsdn_t *tsdn); 92b7eaed25SJason Evans void prof_sample_threshold_update(prof_tdata_t *tdata); 93b7eaed25SJason Evans 94c5ad8142SEric van Gyzen bool prof_log_start(tsdn_t *tsdn, const char *filename); 95c5ad8142SEric van Gyzen bool prof_log_stop(tsdn_t *tsdn); 96c5ad8142SEric van Gyzen #ifdef JEMALLOC_JET 97c5ad8142SEric van Gyzen size_t prof_log_bt_count(void); 98c5ad8142SEric van Gyzen size_t prof_log_alloc_count(void); 99c5ad8142SEric van Gyzen size_t prof_log_thr_count(void); 100c5ad8142SEric van Gyzen bool prof_log_is_logging(void); 101c5ad8142SEric van Gyzen bool prof_log_rep_check(void); 102c5ad8142SEric van Gyzen void prof_log_dummy_set(bool new_value); 103c5ad8142SEric van Gyzen #endif 104c5ad8142SEric van Gyzen 105b7eaed25SJason Evans #endif /* JEMALLOC_INTERNAL_PROF_EXTERNS_H */ 106