brintos

brintos / linux-shallow public Read only

0
0
Text · 5.8 KiB · a61fb56 Raw
221 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (c) 2000,2005 Silicon Graphics, Inc.4 * All Rights Reserved.5 */6#ifndef __XFS_STATS_H__7#define __XFS_STATS_H__8 9 10#include <linux/percpu.h>11 12/*13 * The btree stats arrays have fixed offsets for the different stats. We14 * store the base index in the btree cursor via XFS_STATS_CALC_INDEX() and15 * that allows us to use fixed offsets into the stats array for each btree16 * stat. These index offsets are defined in the order they will be emitted17 * in the stats files, so it is possible to add new btree stat types by18 * appending to the enum list below.19 */20enum {21	__XBTS_lookup = 0,22	__XBTS_compare = 1,23	__XBTS_insrec = 2,24	__XBTS_delrec = 3,25	__XBTS_newroot = 4,26	__XBTS_killroot = 5,27	__XBTS_increment = 6,28	__XBTS_decrement = 7,29	__XBTS_lshift = 8,30	__XBTS_rshift = 9,31	__XBTS_split = 10,32	__XBTS_join = 11,33	__XBTS_alloc = 12,34	__XBTS_free = 13,35	__XBTS_moves = 14,36 37	__XBTS_MAX = 15,38};39 40/*41 * XFS global statistics42 */43struct __xfsstats {44	uint32_t		xs_allocx;45	uint32_t		xs_allocb;46	uint32_t		xs_freex;47	uint32_t		xs_freeb;48	uint32_t		xs_abt_lookup;49	uint32_t		xs_abt_compare;50	uint32_t		xs_abt_insrec;51	uint32_t		xs_abt_delrec;52	uint32_t		xs_blk_mapr;53	uint32_t		xs_blk_mapw;54	uint32_t		xs_blk_unmap;55	uint32_t		xs_add_exlist;56	uint32_t		xs_del_exlist;57	uint32_t		xs_look_exlist;58	uint32_t		xs_cmp_exlist;59	uint32_t		xs_bmbt_lookup;60	uint32_t		xs_bmbt_compare;61	uint32_t		xs_bmbt_insrec;62	uint32_t		xs_bmbt_delrec;63	uint32_t		xs_dir_lookup;64	uint32_t		xs_dir_create;65	uint32_t		xs_dir_remove;66	uint32_t		xs_dir_getdents;67	uint32_t		xs_trans_sync;68	uint32_t		xs_trans_async;69	uint32_t		xs_trans_empty;70	uint32_t		xs_ig_attempts;71	uint32_t		xs_ig_found;72	uint32_t		xs_ig_frecycle;73	uint32_t		xs_ig_missed;74	uint32_t		xs_ig_dup;75	uint32_t		xs_ig_reclaims;76	uint32_t		xs_ig_attrchg;77	uint32_t		xs_log_writes;78	uint32_t		xs_log_blocks;79	uint32_t		xs_log_noiclogs;80	uint32_t		xs_log_force;81	uint32_t		xs_log_force_sleep;82	uint32_t		xs_try_logspace;83	uint32_t		xs_sleep_logspace;84	uint32_t		xs_push_ail;85	uint32_t		xs_push_ail_success;86	uint32_t		xs_push_ail_pushbuf;87	uint32_t		xs_push_ail_pinned;88	uint32_t		xs_push_ail_locked;89	uint32_t		xs_push_ail_flushing;90	uint32_t		xs_push_ail_restarts;91	uint32_t		xs_push_ail_flush;92	uint32_t		xs_xstrat_quick;93	uint32_t		xs_xstrat_split;94	uint32_t		xs_write_calls;95	uint32_t		xs_read_calls;96	uint32_t		xs_attr_get;97	uint32_t		xs_attr_set;98	uint32_t		xs_attr_remove;99	uint32_t		xs_attr_list;100	uint32_t		xs_iflush_count;101	uint32_t		xs_icluster_flushcnt;102	uint32_t		xs_icluster_flushinode;103	uint32_t		vn_active;	/* # vnodes not on free lists */104	uint32_t		vn_alloc;	/* # times vn_alloc called */105	uint32_t		vn_get;		/* # times vn_get called */106	uint32_t		vn_hold;	/* # times vn_hold called */107	uint32_t		vn_rele;	/* # times vn_rele called */108	uint32_t		vn_reclaim;	/* # times vn_reclaim called */109	uint32_t		vn_remove;	/* # times vn_remove called */110	uint32_t		vn_free;	/* # times vn_free called */111	uint32_t		xb_get;112	uint32_t		xb_create;113	uint32_t		xb_get_locked;114	uint32_t		xb_get_locked_waited;115	uint32_t		xb_busy_locked;116	uint32_t		xb_miss_locked;117	uint32_t		xb_page_retries;118	uint32_t		xb_page_found;119	uint32_t		xb_get_read;120/* Version 2 btree counters */121	uint32_t		xs_abtb_2[__XBTS_MAX];122	uint32_t		xs_abtc_2[__XBTS_MAX];123	uint32_t		xs_bmbt_2[__XBTS_MAX];124	uint32_t		xs_ibt_2[__XBTS_MAX];125	uint32_t		xs_fibt_2[__XBTS_MAX];126	uint32_t		xs_rmap_2[__XBTS_MAX];127	uint32_t		xs_refcbt_2[__XBTS_MAX];128	uint32_t		xs_rmap_mem_2[__XBTS_MAX];129	uint32_t		xs_rcbag_2[__XBTS_MAX];130	uint32_t		xs_qm_dqreclaims;131	uint32_t		xs_qm_dqreclaim_misses;132	uint32_t		xs_qm_dquot_dups;133	uint32_t		xs_qm_dqcachemisses;134	uint32_t		xs_qm_dqcachehits;135	uint32_t		xs_qm_dqwants;136	uint32_t		xs_qm_dquot;137	uint32_t		xs_qm_dquot_unused;138/* Extra precision counters */139	uint64_t		xs_xstrat_bytes;140	uint64_t		xs_write_bytes;141	uint64_t		xs_read_bytes;142	uint64_t		defer_relog;143};144 145#define	xfsstats_offset(f)	(offsetof(struct __xfsstats, f)/sizeof(uint32_t))146 147struct xfsstats {148	union {149		struct __xfsstats	s;150		uint32_t		a[xfsstats_offset(xs_qm_dquot)];151	};152};153 154/*155 * simple wrapper for getting the array index of s struct member offset156 */157#define XFS_STATS_CALC_INDEX(member)	\158	(offsetof(struct __xfsstats, member) / (int)sizeof(uint32_t))159 160 161int xfs_stats_format(struct xfsstats __percpu *stats, char *buf);162void xfs_stats_clearall(struct xfsstats __percpu *stats);163extern struct xstats xfsstats;164 165#define XFS_STATS_INC(mp, v)					\166do {								\167	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v++;	\168	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v++;	\169} while (0)170 171#define XFS_STATS_DEC(mp, v)					\172do {								\173	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v--;	\174	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v--;	\175} while (0)176 177#define XFS_STATS_ADD(mp, v, inc)					\178do {									\179	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v += (inc);	\180	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v += (inc);	\181} while (0)182 183#define XFS_STATS_INC_OFF(mp, off)				\184do {								\185	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off]++;	\186	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off]++;	\187} while (0)188 189#define XFS_STATS_DEC_OFF(mp, off)					\190do {								\191	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off];	\192	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off];	\193} while (0)194 195#define XFS_STATS_ADD_OFF(mp, off, inc)					\196do {									\197	per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off] += (inc);	\198	per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off] += (inc);	\199} while (0)200 201#if defined(CONFIG_PROC_FS)202 203extern int xfs_init_procfs(void);204extern void xfs_cleanup_procfs(void);205 206 207#else	/* !CONFIG_PROC_FS */208 209static inline int xfs_init_procfs(void)210{211	return 0;212}213 214static inline void xfs_cleanup_procfs(void)215{216}217 218#endif	/* !CONFIG_PROC_FS */219 220#endif /* __XFS_STATS_H__ */221