1*8e33eff8Schristos #ifndef JEMALLOC_INTERNAL_ARENA_EXTERNS_H 2*8e33eff8Schristos #define JEMALLOC_INTERNAL_ARENA_EXTERNS_H 3*8e33eff8Schristos 4*8e33eff8Schristos #include "jemalloc/internal/bin.h" 5*8e33eff8Schristos #include "jemalloc/internal/extent_dss.h" 6*8e33eff8Schristos #include "jemalloc/internal/pages.h" 7*8e33eff8Schristos #include "jemalloc/internal/size_classes.h" 8*8e33eff8Schristos #include "jemalloc/internal/stats.h" 9*8e33eff8Schristos 10*8e33eff8Schristos extern ssize_t opt_dirty_decay_ms; 11*8e33eff8Schristos extern ssize_t opt_muzzy_decay_ms; 12*8e33eff8Schristos 13*8e33eff8Schristos extern percpu_arena_mode_t opt_percpu_arena; 14*8e33eff8Schristos extern const char *percpu_arena_mode_names[]; 15*8e33eff8Schristos 16*8e33eff8Schristos extern const uint64_t h_steps[SMOOTHSTEP_NSTEPS]; 17*8e33eff8Schristos extern malloc_mutex_t arenas_lock; 18*8e33eff8Schristos 19*8e33eff8Schristos void arena_basic_stats_merge(tsdn_t *tsdn, arena_t *arena, 20*8e33eff8Schristos unsigned *nthreads, const char **dss, ssize_t *dirty_decay_ms, 21*8e33eff8Schristos ssize_t *muzzy_decay_ms, size_t *nactive, size_t *ndirty, size_t *nmuzzy); 22*8e33eff8Schristos void arena_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads, 23*8e33eff8Schristos const char **dss, ssize_t *dirty_decay_ms, ssize_t *muzzy_decay_ms, 24*8e33eff8Schristos size_t *nactive, size_t *ndirty, size_t *nmuzzy, arena_stats_t *astats, 25*8e33eff8Schristos bin_stats_t *bstats, arena_stats_large_t *lstats); 26*8e33eff8Schristos void arena_extents_dirty_dalloc(tsdn_t *tsdn, arena_t *arena, 27*8e33eff8Schristos extent_hooks_t **r_extent_hooks, extent_t *extent); 28*8e33eff8Schristos #ifdef JEMALLOC_JET 29*8e33eff8Schristos size_t arena_slab_regind(extent_t *slab, szind_t binind, const void *ptr); 30*8e33eff8Schristos #endif 31*8e33eff8Schristos extent_t *arena_extent_alloc_large(tsdn_t *tsdn, arena_t *arena, 32*8e33eff8Schristos size_t usize, size_t alignment, bool *zero); 33*8e33eff8Schristos void arena_extent_dalloc_large_prep(tsdn_t *tsdn, arena_t *arena, 34*8e33eff8Schristos extent_t *extent); 35*8e33eff8Schristos void arena_extent_ralloc_large_shrink(tsdn_t *tsdn, arena_t *arena, 36*8e33eff8Schristos extent_t *extent, size_t oldsize); 37*8e33eff8Schristos void arena_extent_ralloc_large_expand(tsdn_t *tsdn, arena_t *arena, 38*8e33eff8Schristos extent_t *extent, size_t oldsize); 39*8e33eff8Schristos ssize_t arena_dirty_decay_ms_get(arena_t *arena); 40*8e33eff8Schristos bool arena_dirty_decay_ms_set(tsdn_t *tsdn, arena_t *arena, ssize_t decay_ms); 41*8e33eff8Schristos ssize_t arena_muzzy_decay_ms_get(arena_t *arena); 42*8e33eff8Schristos bool arena_muzzy_decay_ms_set(tsdn_t *tsdn, arena_t *arena, ssize_t decay_ms); 43*8e33eff8Schristos void arena_decay(tsdn_t *tsdn, arena_t *arena, bool is_background_thread, 44*8e33eff8Schristos bool all); 45*8e33eff8Schristos void arena_reset(tsd_t *tsd, arena_t *arena); 46*8e33eff8Schristos void arena_destroy(tsd_t *tsd, arena_t *arena); 47*8e33eff8Schristos void arena_tcache_fill_small(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache, 48*8e33eff8Schristos cache_bin_t *tbin, szind_t binind, uint64_t prof_accumbytes); 49*8e33eff8Schristos void arena_alloc_junk_small(void *ptr, const bin_info_t *bin_info, 50*8e33eff8Schristos bool zero); 51*8e33eff8Schristos 52*8e33eff8Schristos typedef void (arena_dalloc_junk_small_t)(void *, const bin_info_t *); 53*8e33eff8Schristos extern arena_dalloc_junk_small_t *JET_MUTABLE arena_dalloc_junk_small; 54*8e33eff8Schristos 55*8e33eff8Schristos void *arena_malloc_hard(tsdn_t *tsdn, arena_t *arena, size_t size, 56*8e33eff8Schristos szind_t ind, bool zero); 57*8e33eff8Schristos void *arena_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, 58*8e33eff8Schristos size_t alignment, bool zero, tcache_t *tcache); 59*8e33eff8Schristos JEMALLOC_NORETURN void arena_prof_promote(tsdn_t *tsdn, const void *ptr, size_t usize); 60*8e33eff8Schristos JEMALLOC_NORETURN void arena_dalloc_promoted(tsdn_t *tsdn, void *ptr, tcache_t *tcache, 61*8e33eff8Schristos bool slow_path); 62*8e33eff8Schristos void arena_dalloc_bin_junked_locked(tsdn_t *tsdn, arena_t *arena, 63*8e33eff8Schristos extent_t *extent, void *ptr); 64*8e33eff8Schristos void arena_dalloc_small(tsdn_t *tsdn, void *ptr); 65*8e33eff8Schristos bool arena_ralloc_no_move(tsdn_t *tsdn, void *ptr, size_t oldsize, size_t size, 66*8e33eff8Schristos size_t extra, bool zero); 67*8e33eff8Schristos void *arena_ralloc(tsdn_t *tsdn, arena_t *arena, void *ptr, size_t oldsize, 68*8e33eff8Schristos size_t size, size_t alignment, bool zero, tcache_t *tcache); 69*8e33eff8Schristos dss_prec_t arena_dss_prec_get(arena_t *arena); 70*8e33eff8Schristos bool arena_dss_prec_set(arena_t *arena, dss_prec_t dss_prec); 71*8e33eff8Schristos ssize_t arena_dirty_decay_ms_default_get(void); 72*8e33eff8Schristos bool arena_dirty_decay_ms_default_set(ssize_t decay_ms); 73*8e33eff8Schristos ssize_t arena_muzzy_decay_ms_default_get(void); 74*8e33eff8Schristos bool arena_muzzy_decay_ms_default_set(ssize_t decay_ms); 75*8e33eff8Schristos bool arena_retain_grow_limit_get_set(tsd_t *tsd, arena_t *arena, 76*8e33eff8Schristos size_t *old_limit, size_t *new_limit); 77*8e33eff8Schristos unsigned arena_nthreads_get(arena_t *arena, bool internal); 78*8e33eff8Schristos void arena_nthreads_inc(arena_t *arena, bool internal); 79*8e33eff8Schristos void arena_nthreads_dec(arena_t *arena, bool internal); 80*8e33eff8Schristos size_t arena_extent_sn_next(arena_t *arena); 81*8e33eff8Schristos arena_t *arena_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks); 82*8e33eff8Schristos void arena_boot(void); 83*8e33eff8Schristos void arena_prefork0(tsdn_t *tsdn, arena_t *arena); 84*8e33eff8Schristos void arena_prefork1(tsdn_t *tsdn, arena_t *arena); 85*8e33eff8Schristos void arena_prefork2(tsdn_t *tsdn, arena_t *arena); 86*8e33eff8Schristos void arena_prefork3(tsdn_t *tsdn, arena_t *arena); 87*8e33eff8Schristos void arena_prefork4(tsdn_t *tsdn, arena_t *arena); 88*8e33eff8Schristos void arena_prefork5(tsdn_t *tsdn, arena_t *arena); 89*8e33eff8Schristos void arena_prefork6(tsdn_t *tsdn, arena_t *arena); 90*8e33eff8Schristos void arena_prefork7(tsdn_t *tsdn, arena_t *arena); 91*8e33eff8Schristos void arena_postfork_parent(tsdn_t *tsdn, arena_t *arena); 92*8e33eff8Schristos void arena_postfork_child(tsdn_t *tsdn, arena_t *arena); 93*8e33eff8Schristos 94*8e33eff8Schristos #endif /* JEMALLOC_INTERNAL_ARENA_EXTERNS_H */ 95