Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 854929f0 authored by David Chinner's avatar David Chinner Committed by Lachlan McIlroy
Browse files

[XFS] add new btree statistics



From: Dave Chinner <dgc@sgi.com>

Introduce statistics coverage of all the btrees and cover all the btree
operations, not just some.

Invaluable for determining test code coverage of all the btree
operations....

SGI-PV: 985583

SGI-Modid: xfs-linux-melb:xfs-kern:32184a

Signed-off-by: default avatarDavid Chinner <david@fromorbit.com>
Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
Signed-off-by: default avatarBill O'Donnell <billodo@sgi.com>
parent a23f6ef8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -53,6 +53,10 @@ xfs_read_xfsstats(
		{ "icluster",		XFSSTAT_END_INODE_CLUSTER	},
		{ "vnodes",		XFSSTAT_END_VNODE_OPS		},
		{ "buf",		XFSSTAT_END_BUF			},
		{ "abtb2",		XFSSTAT_END_ABTB_V2		},
		{ "abtc2",		XFSSTAT_END_ABTC_V2		},
		{ "bmbt2",		XFSSTAT_END_BMBT_V2		},
		{ "ibt2",		XFSSTAT_END_IBT_V2		},
	};

	/* Loop over all stats groups */
+65 −0
Original line number Diff line number Diff line
@@ -118,6 +118,71 @@ struct xfsstats {
	__uint32_t		xb_page_retries;
	__uint32_t		xb_page_found;
	__uint32_t		xb_get_read;
/* 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;
/* Extra precision counters */
	__uint64_t		xs_xstrat_bytes;
	__uint64_t		xs_write_bytes;
+28 −0
Original line number Diff line number Diff line
@@ -120,6 +120,34 @@ union xfs_btree_rec {
 */
extern const __uint32_t	xfs_magics[];

/*
 * Generic stats interface
 */
#define __XFS_BTREE_STATS_INC(type, stat) \
	XFS_STATS_INC(xs_ ## type ## _2_ ## stat)
#define XFS_BTREE_STATS_INC(cur, stat)  \
do {    \
	switch (cur->bc_btnum) {  \
	case XFS_BTNUM_BNO: __XFS_BTREE_STATS_INC(abtb, stat); break;	\
	case XFS_BTNUM_CNT: __XFS_BTREE_STATS_INC(abtc, stat); break;	\
	case XFS_BTNUM_BMAP: __XFS_BTREE_STATS_INC(bmbt, stat); break;	\
	case XFS_BTNUM_INO: __XFS_BTREE_STATS_INC(ibt, stat); break;	\
	case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break;	\
	}       \
} while (0)

#define __XFS_BTREE_STATS_ADD(type, stat, val) \
	XFS_STATS_ADD(xs_ ## type ## _2_ ## stat, val)
#define XFS_BTREE_STATS_ADD(cur, stat, val)  \
do {    \
	switch (cur->bc_btnum) {  \
	case XFS_BTNUM_BNO: __XFS_BTREE_STATS_ADD(abtb, stat, val); break; \
	case XFS_BTNUM_CNT: __XFS_BTREE_STATS_ADD(abtc, stat, val); break; \
	case XFS_BTNUM_BMAP: __XFS_BTREE_STATS_ADD(bmbt, stat, val); break; \
	case XFS_BTNUM_INO: __XFS_BTREE_STATS_ADD(ibt, stat, val); break; \
	case XFS_BTNUM_MAX: ASSERT(0); /* fucking gcc */ ; break;	\
	}       \
} while (0)
/*
 * Maximum and minimum records in a btree block.
 * Given block size, type prefix, and leaf flag (0 or 1).