1234370Sjasone/******************************************************************************/ 2234370Sjasone#ifdef JEMALLOC_H_TYPES 3234370Sjasone 4234370Sjasonetypedef struct ctl_node_s ctl_node_t; 5235238Sjasonetypedef struct ctl_named_node_s ctl_named_node_t; 6235238Sjasonetypedef struct ctl_indexed_node_s ctl_indexed_node_t; 7234370Sjasonetypedef struct ctl_arena_stats_s ctl_arena_stats_t; 8234370Sjasonetypedef struct ctl_stats_s ctl_stats_t; 9234370Sjasone 10234370Sjasone#endif /* JEMALLOC_H_TYPES */ 11234370Sjasone/******************************************************************************/ 12234370Sjasone#ifdef JEMALLOC_H_STRUCTS 13234370Sjasone 14234370Sjasonestruct ctl_node_s { 15234370Sjasone bool named; 16234370Sjasone}; 17234370Sjasone 18235238Sjasonestruct ctl_named_node_s { 19235238Sjasone struct ctl_node_s node; 20235238Sjasone const char *name; 21235238Sjasone /* If (nchildren == 0), this is a terminal node. */ 22235238Sjasone unsigned nchildren; 23235238Sjasone const ctl_node_t *children; 24235238Sjasone int (*ctl)(const size_t *, size_t, void *, size_t *, 25235238Sjasone void *, size_t); 26235238Sjasone}; 27235238Sjasone 28235238Sjasonestruct ctl_indexed_node_s { 29235238Sjasone struct ctl_node_s node; 30235238Sjasone const ctl_named_node_t *(*index)(const size_t *, size_t, size_t); 31235238Sjasone}; 32235238Sjasone 33234370Sjasonestruct ctl_arena_stats_s { 34234370Sjasone bool initialized; 35234370Sjasone unsigned nthreads; 36242844Sjasone const char *dss; 37234370Sjasone size_t pactive; 38234370Sjasone size_t pdirty; 39234370Sjasone arena_stats_t astats; 40234370Sjasone 41234370Sjasone /* Aggregate stats for small size classes, based on bin stats. */ 42234370Sjasone size_t allocated_small; 43234370Sjasone uint64_t nmalloc_small; 44234370Sjasone uint64_t ndalloc_small; 45234370Sjasone uint64_t nrequests_small; 46234370Sjasone 47234370Sjasone malloc_bin_stats_t bstats[NBINS]; 48234370Sjasone malloc_large_stats_t *lstats; /* nlclasses elements. */ 49234370Sjasone}; 50234370Sjasone 51234370Sjasonestruct ctl_stats_s { 52234370Sjasone size_t allocated; 53234370Sjasone size_t active; 54234370Sjasone size_t mapped; 55234370Sjasone struct { 56234370Sjasone size_t current; /* stats_chunks.curchunks */ 57234370Sjasone uint64_t total; /* stats_chunks.nchunks */ 58234370Sjasone size_t high; /* stats_chunks.highchunks */ 59234370Sjasone } chunks; 60234370Sjasone struct { 61234370Sjasone size_t allocated; /* huge_allocated */ 62234370Sjasone uint64_t nmalloc; /* huge_nmalloc */ 63234370Sjasone uint64_t ndalloc; /* huge_ndalloc */ 64234370Sjasone } huge; 65242844Sjasone unsigned narenas; 66234370Sjasone ctl_arena_stats_t *arenas; /* (narenas + 1) elements. */ 67234370Sjasone}; 68234370Sjasone 69234370Sjasone#endif /* JEMALLOC_H_STRUCTS */ 70234370Sjasone/******************************************************************************/ 71234370Sjasone#ifdef JEMALLOC_H_EXTERNS 72234370Sjasone 73234370Sjasoneint ctl_byname(const char *name, void *oldp, size_t *oldlenp, void *newp, 74234370Sjasone size_t newlen); 75234370Sjasoneint ctl_nametomib(const char *name, size_t *mibp, size_t *miblenp); 76234370Sjasone 77234370Sjasoneint ctl_bymib(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp, 78234370Sjasone void *newp, size_t newlen); 79234370Sjasonebool ctl_boot(void); 80242844Sjasonevoid ctl_prefork(void); 81242844Sjasonevoid ctl_postfork_parent(void); 82242844Sjasonevoid ctl_postfork_child(void); 83234370Sjasone 84234370Sjasone#define xmallctl(name, oldp, oldlenp, newp, newlen) do { \ 85234370Sjasone if (je_mallctl(name, oldp, oldlenp, newp, newlen) \ 86234370Sjasone != 0) { \ 87234370Sjasone malloc_printf( \ 88234370Sjasone "<jemalloc>: Failure in xmallctl(\"%s\", ...)\n", \ 89234370Sjasone name); \ 90234370Sjasone abort(); \ 91234370Sjasone } \ 92234370Sjasone} while (0) 93234370Sjasone 94234370Sjasone#define xmallctlnametomib(name, mibp, miblenp) do { \ 95234370Sjasone if (je_mallctlnametomib(name, mibp, miblenp) != 0) { \ 96234370Sjasone malloc_printf("<jemalloc>: Failure in " \ 97234370Sjasone "xmallctlnametomib(\"%s\", ...)\n", name); \ 98234370Sjasone abort(); \ 99234370Sjasone } \ 100234370Sjasone} while (0) 101234370Sjasone 102234370Sjasone#define xmallctlbymib(mib, miblen, oldp, oldlenp, newp, newlen) do { \ 103234370Sjasone if (je_mallctlbymib(mib, miblen, oldp, oldlenp, newp, \ 104234370Sjasone newlen) != 0) { \ 105234370Sjasone malloc_write( \ 106234370Sjasone "<jemalloc>: Failure in xmallctlbymib()\n"); \ 107234370Sjasone abort(); \ 108234370Sjasone } \ 109234370Sjasone} while (0) 110234370Sjasone 111234370Sjasone#endif /* JEMALLOC_H_EXTERNS */ 112234370Sjasone/******************************************************************************/ 113234370Sjasone#ifdef JEMALLOC_H_INLINES 114234370Sjasone 115234370Sjasone#endif /* JEMALLOC_H_INLINES */ 116234370Sjasone/******************************************************************************/ 117234370Sjasone 118