• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************/
2 #ifdef JEMALLOC_H_TYPES
3 
4 typedef struct tcache_bin_stats_s tcache_bin_stats_t;
5 typedef struct malloc_bin_stats_s malloc_bin_stats_t;
6 typedef struct malloc_large_stats_s malloc_large_stats_t;
7 typedef struct arena_stats_s arena_stats_t;
8 typedef struct chunk_stats_s chunk_stats_t;
9 
10 #endif /* JEMALLOC_H_TYPES */
11 /******************************************************************************/
12 #ifdef JEMALLOC_H_STRUCTS
13 
14 struct tcache_bin_stats_s {
15 	/*
16 	 * Number of allocation requests that corresponded to the size of this
17 	 * bin.
18 	 */
19 	uint64_t	nrequests;
20 };
21 
22 struct malloc_bin_stats_s {
23 	/*
24 	 * Current number of bytes allocated, including objects currently
25 	 * cached by tcache.
26 	 */
27 	size_t		allocated;
28 
29 	/*
30 	 * Total number of allocation/deallocation requests served directly by
31 	 * the bin.  Note that tcache may allocate an object, then recycle it
32 	 * many times, resulting many increments to nrequests, but only one
33 	 * each to nmalloc and ndalloc.
34 	 */
35 	uint64_t	nmalloc;
36 	uint64_t	ndalloc;
37 
38 	/*
39 	 * Number of allocation requests that correspond to the size of this
40 	 * bin.  This includes requests served by tcache, though tcache only
41 	 * periodically merges into this counter.
42 	 */
43 	uint64_t	nrequests;
44 
45 	/* Number of tcache fills from this bin. */
46 	uint64_t	nfills;
47 
48 	/* Number of tcache flushes to this bin. */
49 	uint64_t	nflushes;
50 
51 	/* Total number of runs created for this bin's size class. */
52 	uint64_t	nruns;
53 
54 	/*
55 	 * Total number of runs reused by extracting them from the runs tree for
56 	 * this bin's size class.
57 	 */
58 	uint64_t	reruns;
59 
60 	/* Current number of runs in this bin. */
61 	size_t		curruns;
62 };
63 
64 struct malloc_large_stats_s {
65 	/*
66 	 * Total number of allocation/deallocation requests served directly by
67 	 * the arena.  Note that tcache may allocate an object, then recycle it
68 	 * many times, resulting many increments to nrequests, but only one
69 	 * each to nmalloc and ndalloc.
70 	 */
71 	uint64_t	nmalloc;
72 	uint64_t	ndalloc;
73 
74 	/*
75 	 * Number of allocation requests that correspond to this size class.
76 	 * This includes requests served by tcache, though tcache only
77 	 * periodically merges into this counter.
78 	 */
79 	uint64_t	nrequests;
80 
81 	/* Current number of runs of this size class. */
82 	size_t		curruns;
83 };
84 
85 struct arena_stats_s {
86 	/* Number of bytes currently mapped. */
87 	size_t		mapped;
88 
89 	/*
90 	 * Total number of purge sweeps, total number of madvise calls made,
91 	 * and total pages purged in order to keep dirty unused memory under
92 	 * control.
93 	 */
94 	uint64_t	npurge;
95 	uint64_t	nmadvise;
96 	uint64_t	purged;
97 
98 	/* Per-size-category statistics. */
99 	size_t		allocated_large;
100 	uint64_t	nmalloc_large;
101 	uint64_t	ndalloc_large;
102 	uint64_t	nrequests_large;
103 
104 	size_t		allocated_huge;
105 	uint64_t	nmalloc_huge;
106 	uint64_t	ndalloc_huge;
107 	uint64_t	nrequests_huge;
108 
109 	/*
110 	 * One element for each possible size class, including sizes that
111 	 * overlap with bin size classes.  This is necessary because ipalloc()
112 	 * sometimes has to use such large objects in order to assure proper
113 	 * alignment.
114 	 */
115 	malloc_large_stats_t	*lstats;
116 };
117 
118 struct chunk_stats_s {
119 	/* Number of chunks that were allocated. */
120 	uint64_t	nchunks;
121 
122 	/* High-water mark for number of chunks allocated. */
123 	size_t		highchunks;
124 
125 	/*
126 	 * Current number of chunks allocated.  This value isn't maintained for
127 	 * any other purpose, so keep track of it in order to be able to set
128 	 * highchunks.
129 	 */
130 	size_t		curchunks;
131 };
132 
133 #endif /* JEMALLOC_H_STRUCTS */
134 /******************************************************************************/
135 #ifdef JEMALLOC_H_EXTERNS
136 
137 extern bool	opt_stats_print;
138 
139 extern size_t	stats_cactive;
140 
141 void	stats_print(void (*write)(void *, const char *), void *cbopaque,
142     const char *opts);
143 
144 #endif /* JEMALLOC_H_EXTERNS */
145 /******************************************************************************/
146 #ifdef JEMALLOC_H_INLINES
147 
148 #ifndef JEMALLOC_ENABLE_INLINE
149 size_t	stats_cactive_get(void);
150 void	stats_cactive_add(size_t size);
151 void	stats_cactive_sub(size_t size);
152 #endif
153 
154 #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_STATS_C_))
155 JEMALLOC_INLINE size_t
stats_cactive_get(void)156 stats_cactive_get(void)
157 {
158 
159 	return (atomic_read_z(&stats_cactive));
160 }
161 
162 JEMALLOC_INLINE void
stats_cactive_add(size_t size)163 stats_cactive_add(size_t size)
164 {
165 
166 	atomic_add_z(&stats_cactive, size);
167 }
168 
169 JEMALLOC_INLINE void
stats_cactive_sub(size_t size)170 stats_cactive_sub(size_t size)
171 {
172 
173 	atomic_sub_z(&stats_cactive, size);
174 }
175 #endif
176 
177 #endif /* JEMALLOC_H_INLINES */
178 /******************************************************************************/
179