ctl.h revision 20f1fc95adb35ea63dc61f47f2b0ffbd37d39f32
1/******************************************************************************/ 2#ifdef JEMALLOC_H_TYPES 3 4typedef struct ctl_node_s ctl_node_t; 5typedef struct ctl_named_node_s ctl_named_node_t; 6typedef struct ctl_indexed_node_s ctl_indexed_node_t; 7typedef struct ctl_arena_stats_s ctl_arena_stats_t; 8typedef struct ctl_stats_s ctl_stats_t; 9 10#endif /* JEMALLOC_H_TYPES */ 11/******************************************************************************/ 12#ifdef JEMALLOC_H_STRUCTS 13 14struct ctl_node_s { 15 bool named; 16}; 17 18struct ctl_named_node_s { 19 struct ctl_node_s node; 20 const char *name; 21 /* If (nchildren == 0), this is a terminal node. */ 22 unsigned nchildren; 23 const ctl_node_t *children; 24 int (*ctl)(const size_t *, size_t, void *, size_t *, 25 void *, size_t); 26}; 27 28struct ctl_indexed_node_s { 29 struct ctl_node_s node; 30 const ctl_named_node_t *(*index)(const size_t *, size_t, size_t); 31}; 32 33struct ctl_arena_stats_s { 34 bool initialized; 35 unsigned nthreads; 36 size_t pactive; 37 size_t pdirty; 38 arena_stats_t astats; 39 40 /* Aggregate stats for small size classes, based on bin stats. */ 41 size_t allocated_small; 42 uint64_t nmalloc_small; 43 uint64_t ndalloc_small; 44 uint64_t nrequests_small; 45 46 malloc_bin_stats_t bstats[NBINS]; 47 malloc_large_stats_t *lstats; /* nlclasses elements. */ 48}; 49 50struct ctl_stats_s { 51 size_t allocated; 52 size_t active; 53 size_t mapped; 54 struct { 55 size_t current; /* stats_chunks.curchunks */ 56 uint64_t total; /* stats_chunks.nchunks */ 57 size_t high; /* stats_chunks.highchunks */ 58 } chunks; 59 struct { 60 size_t allocated; /* huge_allocated */ 61 uint64_t nmalloc; /* huge_nmalloc */ 62 uint64_t ndalloc; /* huge_ndalloc */ 63 } huge; 64 ctl_arena_stats_t *arenas; /* (narenas + 1) elements. */ 65}; 66 67#endif /* JEMALLOC_H_STRUCTS */ 68/******************************************************************************/ 69#ifdef JEMALLOC_H_EXTERNS 70 71int ctl_byname(const char *name, void *oldp, size_t *oldlenp, void *newp, 72 size_t newlen); 73int ctl_nametomib(const char *name, size_t *mibp, size_t *miblenp); 74 75int ctl_bymib(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp, 76 void *newp, size_t newlen); 77bool ctl_boot(void); 78void ctl_prefork(void); 79void ctl_postfork_parent(void); 80void ctl_postfork_child(void); 81 82#define xmallctl(name, oldp, oldlenp, newp, newlen) do { \ 83 if (je_mallctl(name, oldp, oldlenp, newp, newlen) \ 84 != 0) { \ 85 malloc_printf( \ 86 "<jemalloc>: Failure in xmallctl(\"%s\", ...)\n", \ 87 name); \ 88 abort(); \ 89 } \ 90} while (0) 91 92#define xmallctlnametomib(name, mibp, miblenp) do { \ 93 if (je_mallctlnametomib(name, mibp, miblenp) != 0) { \ 94 malloc_printf("<jemalloc>: Failure in " \ 95 "xmallctlnametomib(\"%s\", ...)\n", name); \ 96 abort(); \ 97 } \ 98} while (0) 99 100#define xmallctlbymib(mib, miblen, oldp, oldlenp, newp, newlen) do { \ 101 if (je_mallctlbymib(mib, miblen, oldp, oldlenp, newp, \ 102 newlen) != 0) { \ 103 malloc_write( \ 104 "<jemalloc>: Failure in xmallctlbymib()\n"); \ 105 abort(); \ 106 } \ 107} while (0) 108 109#endif /* JEMALLOC_H_EXTERNS */ 110/******************************************************************************/ 111#ifdef JEMALLOC_H_INLINES 112 113#endif /* JEMALLOC_H_INLINES */ 114/******************************************************************************/ 115 116