xref: /netbsd-src/external/bsd/jemalloc.old/include/jemalloc/internal/arena_externs.h (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
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