• 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)(const size_t *, size_t, void *, size_t *,
25 	    void *, size_t);
26 };
27 
28 struct 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 
33 struct ctl_arena_stats_s {
34 	bool			initialized;
35 	unsigned		nthreads;
36 	const char		*dss;
37 	size_t			pactive;
38 	size_t			pdirty;
39 	arena_stats_t		astats;
40 
41 	/* Aggregate stats for small size classes, based on bin stats. */
42 	size_t			allocated_small;
43 	uint64_t		nmalloc_small;
44 	uint64_t		ndalloc_small;
45 	uint64_t		nrequests_small;
46 
47 	malloc_bin_stats_t	bstats[NBINS];
48 	malloc_large_stats_t	*lstats;	/* nlclasses elements. */
49 };
50 
51 struct ctl_stats_s {
52 	size_t			allocated;
53 	size_t			active;
54 	size_t			mapped;
55 	struct {
56 		size_t		current;	/* stats_chunks.curchunks */
57 		uint64_t	total;		/* stats_chunks.nchunks */
58 		size_t		high;		/* stats_chunks.highchunks */
59 	} chunks;
60 	unsigned		narenas;
61 	ctl_arena_stats_t	*arenas;	/* (narenas + 1) elements. */
62 };
63 
64 #endif /* JEMALLOC_H_STRUCTS */
65 /******************************************************************************/
66 #ifdef JEMALLOC_H_EXTERNS
67 
68 int	ctl_byname(const char *name, void *oldp, size_t *oldlenp, void *newp,
69     size_t newlen);
70 int	ctl_nametomib(const char *name, size_t *mibp, size_t *miblenp);
71 
72 int	ctl_bymib(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp,
73     void *newp, size_t newlen);
74 bool	ctl_boot(void);
75 void	ctl_prefork(void);
76 void	ctl_postfork_parent(void);
77 void	ctl_postfork_child(void);
78 
79 #define	xmallctl(name, oldp, oldlenp, newp, newlen) do {		\
80 	if (je_mallctl(name, oldp, oldlenp, newp, newlen)		\
81 	    != 0) {							\
82 		malloc_printf(						\
83 		    "<jemalloc>: Failure in xmallctl(\"%s\", ...)\n",	\
84 		    name);						\
85 		abort();						\
86 	}								\
87 } while (0)
88 
89 #define	xmallctlnametomib(name, mibp, miblenp) do {			\
90 	if (je_mallctlnametomib(name, mibp, miblenp) != 0) {		\
91 		malloc_printf("<jemalloc>: Failure in "			\
92 		    "xmallctlnametomib(\"%s\", ...)\n", name);		\
93 		abort();						\
94 	}								\
95 } while (0)
96 
97 #define	xmallctlbymib(mib, miblen, oldp, oldlenp, newp, newlen) do {	\
98 	if (je_mallctlbymib(mib, miblen, oldp, oldlenp, newp,		\
99 	    newlen) != 0) {						\
100 		malloc_write(						\
101 		    "<jemalloc>: Failure in xmallctlbymib()\n");	\
102 		abort();						\
103 	}								\
104 } while (0)
105 
106 #endif /* JEMALLOC_H_EXTERNS */
107 /******************************************************************************/
108 #ifdef JEMALLOC_H_INLINES
109 
110 #endif /* JEMALLOC_H_INLINES */
111 /******************************************************************************/
112 
113