• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************/
2 #ifdef JEMALLOC_H_TYPES
3 
4 typedef struct ctl_node_s ctl_node_t;
5 typedef struct ctl_named_node_s ctl_named_node_t;
6 typedef struct ctl_indexed_node_s ctl_indexed_node_t;
7 typedef struct ctl_arena_stats_s ctl_arena_stats_t;
8 typedef struct ctl_stats_s ctl_stats_t;
9 
10 #endif /* JEMALLOC_H_TYPES */
11 /******************************************************************************/
12 #ifdef JEMALLOC_H_STRUCTS
13 
14 struct ctl_node_s {
15 	bool			named;
16 };
17 
18 struct 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)(tsd_t *, const size_t *, size_t, void *,
25 	    size_t *, void *, size_t);
26 };
27 
28 struct ctl_indexed_node_s {
29 	struct ctl_node_s	node;
30 	const ctl_named_node_t	*(*index)(tsdn_t *, const size_t *, size_t,
31 	    size_t);
32 };
33 
34 struct ctl_arena_stats_s {
35 	bool			initialized;
36 	unsigned		nthreads;
37 	const char		*dss;
38 	ssize_t			lg_dirty_mult;
39 	ssize_t			decay_time;
40 	size_t			pactive;
41 	size_t			pdirty;
42 
43 	/* The remainder are only populated if config_stats is true. */
44 
45 	arena_stats_t		astats;
46 
47 	/* Aggregate stats for small size classes, based on bin stats. */
48 	size_t			allocated_small;
49 	uint64_t		nmalloc_small;
50 	uint64_t		ndalloc_small;
51 	uint64_t		nrequests_small;
52 
53 	malloc_bin_stats_t	bstats[NBINS];
54 	malloc_large_stats_t	*lstats;	/* nlclasses elements. */
55 	malloc_huge_stats_t	*hstats;	/* nhclasses elements. */
56 };
57 
58 struct ctl_stats_s {
59 	size_t			allocated;
60 	size_t			active;
61 	size_t			metadata;
62 	size_t			resident;
63 	size_t			mapped;
64 	size_t			retained;
65 	unsigned		narenas;
66 	ctl_arena_stats_t	*arenas;	/* (narenas + 1) elements. */
67 };
68 
69 #endif /* JEMALLOC_H_STRUCTS */
70 /******************************************************************************/
71 #ifdef JEMALLOC_H_EXTERNS
72 
73 int	ctl_byname(tsd_t *tsd, const char *name, void *oldp, size_t *oldlenp,
74     void *newp, size_t newlen);
75 int	ctl_nametomib(tsdn_t *tsdn, const char *name, size_t *mibp,
76     size_t *miblenp);
77 
78 int	ctl_bymib(tsd_t *tsd, const size_t *mib, size_t miblen, void *oldp,
79     size_t *oldlenp, void *newp, size_t newlen);
80 bool	ctl_boot(void);
81 void	ctl_prefork(tsdn_t *tsdn);
82 void	ctl_postfork_parent(tsdn_t *tsdn);
83 void	ctl_postfork_child(tsdn_t *tsdn);
84 
85 #define	xmallctl(name, oldp, oldlenp, newp, newlen) do {		\
86 	if (je_mallctl(name, oldp, oldlenp, newp, newlen)		\
87 	    != 0) {							\
88 		malloc_printf(						\
89 		    "<jemalloc>: Failure in xmallctl(\"%s\", ...)\n",	\
90 		    name);						\
91 		abort();						\
92 	}								\
93 } while (0)
94 
95 #define	xmallctlnametomib(name, mibp, miblenp) do {			\
96 	if (je_mallctlnametomib(name, mibp, miblenp) != 0) {		\
97 		malloc_printf("<jemalloc>: Failure in "			\
98 		    "xmallctlnametomib(\"%s\", ...)\n", name);		\
99 		abort();						\
100 	}								\
101 } while (0)
102 
103 #define	xmallctlbymib(mib, miblen, oldp, oldlenp, newp, newlen) do {	\
104 	if (je_mallctlbymib(mib, miblen, oldp, oldlenp, newp,		\
105 	    newlen) != 0) {						\
106 		malloc_write(						\
107 		    "<jemalloc>: Failure in xmallctlbymib()\n");	\
108 		abort();						\
109 	}								\
110 } while (0)
111 
112 #endif /* JEMALLOC_H_EXTERNS */
113 /******************************************************************************/
114 #ifdef JEMALLOC_H_INLINES
115 
116 #endif /* JEMALLOC_H_INLINES */
117 /******************************************************************************/
118 
119