stats.h revision 272461
1/******************************************************************************/
2#ifdef JEMALLOC_H_TYPES
3
4typedef struct tcache_bin_stats_s tcache_bin_stats_t;
5typedef struct malloc_bin_stats_s malloc_bin_stats_t;
6typedef struct malloc_large_stats_s malloc_large_stats_t;
7typedef struct arena_stats_s arena_stats_t;
8typedef struct chunk_stats_s chunk_stats_t;
9
10#endif /* JEMALLOC_H_TYPES */
11/******************************************************************************/
12#ifdef JEMALLOC_H_STRUCTS
13
14struct 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
22struct 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
64struct 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
85struct 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	/*
105	 * One element for each possible size class, including sizes that
106	 * overlap with bin size classes.  This is necessary because ipalloc()
107	 * sometimes has to use such large objects in order to assure proper
108	 * alignment.
109	 */
110	malloc_large_stats_t	*lstats;
111};
112
113struct chunk_stats_s {
114	/* Number of chunks that were allocated. */
115	uint64_t	nchunks;
116
117	/* High-water mark for number of chunks allocated. */
118	size_t		highchunks;
119
120	/*
121	 * Current number of chunks allocated.  This value isn't maintained for
122	 * any other purpose, so keep track of it in order to be able to set
123	 * highchunks.
124	 */
125	size_t		curchunks;
126};
127
128#endif /* JEMALLOC_H_STRUCTS */
129/******************************************************************************/
130#ifdef JEMALLOC_H_EXTERNS
131
132extern bool	opt_stats_print;
133
134extern size_t	stats_cactive;
135
136void	stats_print(void (*write)(void *, const char *), void *cbopaque,
137    const char *opts);
138
139#endif /* JEMALLOC_H_EXTERNS */
140/******************************************************************************/
141#ifdef JEMALLOC_H_INLINES
142
143#ifndef JEMALLOC_ENABLE_INLINE
144size_t	stats_cactive_get(void);
145void	stats_cactive_add(size_t size);
146void	stats_cactive_sub(size_t size);
147#endif
148
149#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_STATS_C_))
150JEMALLOC_INLINE size_t
151stats_cactive_get(void)
152{
153
154	return (atomic_read_z(&stats_cactive));
155}
156
157JEMALLOC_INLINE void
158stats_cactive_add(size_t size)
159{
160
161	atomic_add_z(&stats_cactive, size);
162}
163
164JEMALLOC_INLINE void
165stats_cactive_sub(size_t size)
166{
167
168	atomic_sub_z(&stats_cactive, size);
169}
170#endif
171
172#endif /* JEMALLOC_H_INLINES */
173/******************************************************************************/
174