xfs_stats.h 9.1 KB
Newer Older
L
Linus Torvalds 已提交
1
/*
2 3
 * Copyright (c) 2000,2005 Silicon Graphics, Inc.
 * All Rights Reserved.
L
Linus Torvalds 已提交
4
 *
5 6
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
L
Linus Torvalds 已提交
7 8
 * published by the Free Software Foundation.
 *
9 10 11 12
 * This program is distributed in the hope that it would be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
L
Linus Torvalds 已提交
13
 *
14 15 16
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write the Free Software Foundation,
 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
L
Linus Torvalds 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
 */
#ifndef __XFS_STATS_H__
#define __XFS_STATS_H__


#include <linux/percpu.h>

/*
 * XFS global statistics
 */
struct xfsstats {
# define XFSSTAT_END_EXTENT_ALLOC	4
	__uint32_t		xs_allocx;
	__uint32_t		xs_allocb;
	__uint32_t		xs_freex;
	__uint32_t		xs_freeb;
# define XFSSTAT_END_ALLOC_BTREE	(XFSSTAT_END_EXTENT_ALLOC+4)
	__uint32_t		xs_abt_lookup;
	__uint32_t		xs_abt_compare;
	__uint32_t		xs_abt_insrec;
	__uint32_t		xs_abt_delrec;
# define XFSSTAT_END_BLOCK_MAPPING	(XFSSTAT_END_ALLOC_BTREE+7)
	__uint32_t		xs_blk_mapr;
	__uint32_t		xs_blk_mapw;
	__uint32_t		xs_blk_unmap;
	__uint32_t		xs_add_exlist;
	__uint32_t		xs_del_exlist;
	__uint32_t		xs_look_exlist;
	__uint32_t		xs_cmp_exlist;
# define XFSSTAT_END_BLOCK_MAP_BTREE	(XFSSTAT_END_BLOCK_MAPPING+4)
	__uint32_t		xs_bmbt_lookup;
	__uint32_t		xs_bmbt_compare;
	__uint32_t		xs_bmbt_insrec;
	__uint32_t		xs_bmbt_delrec;
# define XFSSTAT_END_DIRECTORY_OPS	(XFSSTAT_END_BLOCK_MAP_BTREE+4)
	__uint32_t		xs_dir_lookup;
	__uint32_t		xs_dir_create;
	__uint32_t		xs_dir_remove;
	__uint32_t		xs_dir_getdents;
# define XFSSTAT_END_TRANSACTIONS	(XFSSTAT_END_DIRECTORY_OPS+3)
	__uint32_t		xs_trans_sync;
	__uint32_t		xs_trans_async;
	__uint32_t		xs_trans_empty;
# define XFSSTAT_END_INODE_OPS		(XFSSTAT_END_TRANSACTIONS+7)
	__uint32_t		xs_ig_attempts;
	__uint32_t		xs_ig_found;
	__uint32_t		xs_ig_frecycle;
	__uint32_t		xs_ig_missed;
	__uint32_t		xs_ig_dup;
	__uint32_t		xs_ig_reclaims;
	__uint32_t		xs_ig_attrchg;
# define XFSSTAT_END_LOG_OPS		(XFSSTAT_END_INODE_OPS+5)
	__uint32_t		xs_log_writes;
	__uint32_t		xs_log_blocks;
	__uint32_t		xs_log_noiclogs;
	__uint32_t		xs_log_force;
	__uint32_t		xs_log_force_sleep;
# define XFSSTAT_END_TAIL_PUSHING	(XFSSTAT_END_LOG_OPS+10)
	__uint32_t		xs_try_logspace;
	__uint32_t		xs_sleep_logspace;
	__uint32_t		xs_push_ail;
	__uint32_t		xs_push_ail_success;
	__uint32_t		xs_push_ail_pushbuf;
	__uint32_t		xs_push_ail_pinned;
	__uint32_t		xs_push_ail_locked;
	__uint32_t		xs_push_ail_flushing;
	__uint32_t		xs_push_ail_restarts;
	__uint32_t		xs_push_ail_flush;
# define XFSSTAT_END_WRITE_CONVERT	(XFSSTAT_END_TAIL_PUSHING+2)
	__uint32_t		xs_xstrat_quick;
	__uint32_t		xs_xstrat_split;
# define XFSSTAT_END_READ_WRITE_OPS	(XFSSTAT_END_WRITE_CONVERT+2)
	__uint32_t		xs_write_calls;
	__uint32_t		xs_read_calls;
# define XFSSTAT_END_ATTRIBUTE_OPS	(XFSSTAT_END_READ_WRITE_OPS+4)
	__uint32_t		xs_attr_get;
	__uint32_t		xs_attr_set;
	__uint32_t		xs_attr_remove;
	__uint32_t		xs_attr_list;
# define XFSSTAT_END_INODE_CLUSTER	(XFSSTAT_END_ATTRIBUTE_OPS+3)
	__uint32_t		xs_iflush_count;
	__uint32_t		xs_icluster_flushcnt;
	__uint32_t		xs_icluster_flushinode;
# define XFSSTAT_END_VNODE_OPS		(XFSSTAT_END_INODE_CLUSTER+8)
	__uint32_t		vn_active;	/* # vnodes not on free lists */
	__uint32_t		vn_alloc;	/* # times vn_alloc called */
	__uint32_t		vn_get;		/* # times vn_get called */
	__uint32_t		vn_hold;	/* # times vn_hold called */
	__uint32_t		vn_rele;	/* # times vn_rele called */
	__uint32_t		vn_reclaim;	/* # times vn_reclaim called */
	__uint32_t		vn_remove;	/* # times vn_remove called */
	__uint32_t		vn_free;	/* # times vn_free called */
#define XFSSTAT_END_BUF			(XFSSTAT_END_VNODE_OPS+9)
110 111 112 113 114 115 116 117 118
	__uint32_t		xb_get;
	__uint32_t		xb_create;
	__uint32_t		xb_get_locked;
	__uint32_t		xb_get_locked_waited;
	__uint32_t		xb_busy_locked;
	__uint32_t		xb_miss_locked;
	__uint32_t		xb_page_retries;
	__uint32_t		xb_page_found;
	__uint32_t		xb_get_read;
D
David Chinner 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
/* Version 2 btree counters */
#define XFSSTAT_END_ABTB_V2		(XFSSTAT_END_BUF+15)
	__uint32_t		xs_abtb_2_lookup;
	__uint32_t		xs_abtb_2_compare;
	__uint32_t		xs_abtb_2_insrec;
	__uint32_t		xs_abtb_2_delrec;
	__uint32_t		xs_abtb_2_newroot;
	__uint32_t		xs_abtb_2_killroot;
	__uint32_t		xs_abtb_2_increment;
	__uint32_t		xs_abtb_2_decrement;
	__uint32_t		xs_abtb_2_lshift;
	__uint32_t		xs_abtb_2_rshift;
	__uint32_t		xs_abtb_2_split;
	__uint32_t		xs_abtb_2_join;
	__uint32_t		xs_abtb_2_alloc;
	__uint32_t		xs_abtb_2_free;
	__uint32_t		xs_abtb_2_moves;
#define XFSSTAT_END_ABTC_V2		(XFSSTAT_END_ABTB_V2+15)
	__uint32_t		xs_abtc_2_lookup;
	__uint32_t		xs_abtc_2_compare;
	__uint32_t		xs_abtc_2_insrec;
	__uint32_t		xs_abtc_2_delrec;
	__uint32_t		xs_abtc_2_newroot;
	__uint32_t		xs_abtc_2_killroot;
	__uint32_t		xs_abtc_2_increment;
	__uint32_t		xs_abtc_2_decrement;
	__uint32_t		xs_abtc_2_lshift;
	__uint32_t		xs_abtc_2_rshift;
	__uint32_t		xs_abtc_2_split;
	__uint32_t		xs_abtc_2_join;
	__uint32_t		xs_abtc_2_alloc;
	__uint32_t		xs_abtc_2_free;
	__uint32_t		xs_abtc_2_moves;
#define XFSSTAT_END_BMBT_V2		(XFSSTAT_END_ABTC_V2+15)
	__uint32_t		xs_bmbt_2_lookup;
	__uint32_t		xs_bmbt_2_compare;
	__uint32_t		xs_bmbt_2_insrec;
	__uint32_t		xs_bmbt_2_delrec;
	__uint32_t		xs_bmbt_2_newroot;
	__uint32_t		xs_bmbt_2_killroot;
	__uint32_t		xs_bmbt_2_increment;
	__uint32_t		xs_bmbt_2_decrement;
	__uint32_t		xs_bmbt_2_lshift;
	__uint32_t		xs_bmbt_2_rshift;
	__uint32_t		xs_bmbt_2_split;
	__uint32_t		xs_bmbt_2_join;
	__uint32_t		xs_bmbt_2_alloc;
	__uint32_t		xs_bmbt_2_free;
	__uint32_t		xs_bmbt_2_moves;
#define XFSSTAT_END_IBT_V2		(XFSSTAT_END_BMBT_V2+15)
	__uint32_t		xs_ibt_2_lookup;
	__uint32_t		xs_ibt_2_compare;
	__uint32_t		xs_ibt_2_insrec;
	__uint32_t		xs_ibt_2_delrec;
	__uint32_t		xs_ibt_2_newroot;
	__uint32_t		xs_ibt_2_killroot;
	__uint32_t		xs_ibt_2_increment;
	__uint32_t		xs_ibt_2_decrement;
	__uint32_t		xs_ibt_2_lshift;
	__uint32_t		xs_ibt_2_rshift;
	__uint32_t		xs_ibt_2_split;
	__uint32_t		xs_ibt_2_join;
	__uint32_t		xs_ibt_2_alloc;
	__uint32_t		xs_ibt_2_free;
	__uint32_t		xs_ibt_2_moves;
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
#define XFSSTAT_END_FIBT_V2		(XFSSTAT_END_IBT_V2+15)
	__uint32_t		xs_fibt_2_lookup;
	__uint32_t		xs_fibt_2_compare;
	__uint32_t		xs_fibt_2_insrec;
	__uint32_t		xs_fibt_2_delrec;
	__uint32_t		xs_fibt_2_newroot;
	__uint32_t		xs_fibt_2_killroot;
	__uint32_t		xs_fibt_2_increment;
	__uint32_t		xs_fibt_2_decrement;
	__uint32_t		xs_fibt_2_lshift;
	__uint32_t		xs_fibt_2_rshift;
	__uint32_t		xs_fibt_2_split;
	__uint32_t		xs_fibt_2_join;
	__uint32_t		xs_fibt_2_alloc;
	__uint32_t		xs_fibt_2_free;
	__uint32_t		xs_fibt_2_moves;
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
#define XFSSTAT_END_RMAP_V2		(XFSSTAT_END_FIBT_V2+15)
	__uint32_t		xs_rmap_2_lookup;
	__uint32_t		xs_rmap_2_compare;
	__uint32_t		xs_rmap_2_insrec;
	__uint32_t		xs_rmap_2_delrec;
	__uint32_t		xs_rmap_2_newroot;
	__uint32_t		xs_rmap_2_killroot;
	__uint32_t		xs_rmap_2_increment;
	__uint32_t		xs_rmap_2_decrement;
	__uint32_t		xs_rmap_2_lshift;
	__uint32_t		xs_rmap_2_rshift;
	__uint32_t		xs_rmap_2_split;
	__uint32_t		xs_rmap_2_join;
	__uint32_t		xs_rmap_2_alloc;
	__uint32_t		xs_rmap_2_free;
	__uint32_t		xs_rmap_2_moves;
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
#define XFSSTAT_END_REFCOUNT		(XFSSTAT_END_RMAP_V2 + 15)
	__uint32_t		xs_refcbt_2_lookup;
	__uint32_t		xs_refcbt_2_compare;
	__uint32_t		xs_refcbt_2_insrec;
	__uint32_t		xs_refcbt_2_delrec;
	__uint32_t		xs_refcbt_2_newroot;
	__uint32_t		xs_refcbt_2_killroot;
	__uint32_t		xs_refcbt_2_increment;
	__uint32_t		xs_refcbt_2_decrement;
	__uint32_t		xs_refcbt_2_lshift;
	__uint32_t		xs_refcbt_2_rshift;
	__uint32_t		xs_refcbt_2_split;
	__uint32_t		xs_refcbt_2_join;
	__uint32_t		xs_refcbt_2_alloc;
	__uint32_t		xs_refcbt_2_free;
	__uint32_t		xs_refcbt_2_moves;
#define XFSSTAT_END_XQMSTAT		(XFSSTAT_END_REFCOUNT + 6)
233 234 235 236 237 238 239 240 241
	__uint32_t		xs_qm_dqreclaims;
	__uint32_t		xs_qm_dqreclaim_misses;
	__uint32_t		xs_qm_dquot_dups;
	__uint32_t		xs_qm_dqcachemisses;
	__uint32_t		xs_qm_dqcachehits;
	__uint32_t		xs_qm_dqwants;
#define XFSSTAT_END_QM			(XFSSTAT_END_XQMSTAT+2)
	__uint32_t		xs_qm_dquot;
	__uint32_t		xs_qm_dquot_unused;
L
Linus Torvalds 已提交
242 243 244 245 246 247
/* Extra precision counters */
	__uint64_t		xs_xstrat_bytes;
	__uint64_t		xs_write_bytes;
	__uint64_t		xs_read_bytes;
};

248 249 250
int xfs_stats_format(struct xfsstats __percpu *stats, char *buf);
void xfs_stats_clearall(struct xfsstats __percpu *stats);
extern struct xstats xfsstats;
L
Linus Torvalds 已提交
251

252 253 254 255 256
#define XFS_STATS_INC(mp, v)					\
do {								\
	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->v++;	\
	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->v++;	\
} while (0)
257

258 259 260 261 262
#define XFS_STATS_DEC(mp, v)					\
do {								\
	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->v--;	\
	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->v--;	\
} while (0)
263

264 265 266 267 268 269 270
#define XFS_STATS_ADD(mp, v, inc)					\
do {									\
	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->v += (inc);	\
	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->v += (inc);	\
} while (0)

#if defined(CONFIG_PROC_FS)
L
Linus Torvalds 已提交
271

272
extern int xfs_init_procfs(void);
L
Linus Torvalds 已提交
273 274 275 276 277
extern void xfs_cleanup_procfs(void);


#else	/* !CONFIG_PROC_FS */

278 279
static inline int xfs_init_procfs(void)
{
280 281 282
	return 0;
}

283 284
static inline void xfs_cleanup_procfs(void)
{
285
}
L
Linus Torvalds 已提交
286 287 288 289

#endif	/* !CONFIG_PROC_FS */

#endif /* __XFS_STATS_H__ */