[lustre-devel] [PATCH 05/40] lustre: readahead: add stats for read-ahead page count

James Simmons <[email protected]>
Newsgroups org.lustre.lists.lustre-devel
Message-ID <[email protected]>
From: Qian Yingjin <[email protected]>

This patch adds the stats for read-ahead page count:

lctl get_param llite.*.read_ahead_stats
llite.lustre-ffff938b7849d000.read_ahead_stats=
snapshot_time           4011.320890492 secs.nsecs
start_time              0.000000000 secs.nsecs
elapsed_time            4011.320890492 secs.nsecs
hits                    4 samples [pages]
misses                  1 samples [pages]
zero_size_window        4 samples [pages]
failed_to_reach_end     1 samples [pages]
failed_to_fast_read     1 samples [pages]
readahead_pages         1 samples [pages] 255 255 255

WC-bug-id: https://jira.whamcloud.com/browse/LU-16338
Lustre-commit: cdcf97e17e73dfdd6 ("LU-16338 readahead: add stats for read-ahead page count")
Signed-off-by: Qian Yingjin <[email protected]>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49224
Reviewed-by: Andreas Dilger <[email protected]>
Reviewed-by: Patrick Farrell <[email protected]>
Reviewed-by: Oleg Drokin <[email protected]>
Signed-off-by: James Simmons <[email protected]>
---
 fs/lustre/llite/llite_internal.h |  1 +
 fs/lustre/llite/lproc_llite.c    | 15 ++++++++++++---
 fs/lustre/llite/rw.c             | 12 ++++++++++++
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/fs/lustre/llite/llite_internal.h b/fs/lustre/llite/llite_internal.h
index 0dac71d..1d85d0b 100644
--- a/fs/lustre/llite/llite_internal.h
+++ b/fs/lustre/llite/llite_internal.h
@@ -578,6 +578,7 @@ enum ra_stat {
 	RA_STAT_ASYNC,
 	RA_STAT_FAILED_FAST_READ,
 	RA_STAT_MMAP_RANGE_READ,
+	RA_STAT_READAHEAD_PAGES,
 	_NR_RA_STAT,
 };
 
diff --git a/fs/lustre/llite/lproc_llite.c b/fs/lustre/llite/lproc_llite.c
index 3d64a93..70dbc87 100644
--- a/fs/lustre/llite/lproc_llite.c
+++ b/fs/lustre/llite/lproc_llite.c
@@ -1858,6 +1858,7 @@ void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, long count)
 	[RA_STAT_ASYNC]			= "async readahead",
 	[RA_STAT_FAILED_FAST_READ]	= "failed to fast read",
 	[RA_STAT_MMAP_RANGE_READ]	= "mmap range read",
+	[RA_STAT_READAHEAD_PAGES]	= "readahead_pages",
 };
 
 int ll_debugfs_register_super(struct super_block *sb, const char *name)
@@ -1911,9 +1912,17 @@ int ll_debugfs_register_super(struct super_block *sb, const char *name)
 		goto out_stats;
 	}
 
-	for (id = 0; id < ARRAY_SIZE(ra_stat_string); id++)
-		lprocfs_counter_init(sbi->ll_ra_stats, id, LPROCFS_TYPE_PAGES,
-				     ra_stat_string[id]);
+	for (id = 0; id < ARRAY_SIZE(ra_stat_string); id++) {
+		if (id == RA_STAT_READAHEAD_PAGES)
+			lprocfs_counter_init(sbi->ll_ra_stats, id,
+					     LPROCFS_TYPE_PAGES |
+					     LPROCFS_CNTR_AVGMINMAX,
+					     ra_stat_string[id]);
+		else
+			lprocfs_counter_init(sbi->ll_ra_stats, id,
+					     LPROCFS_TYPE_PAGES,
+					     ra_stat_string[id]);
+	}
 
 	debugfs_create_file("read_ahead_stats", 0644, sbi->ll_debugfs_entry,
 			    sbi->ll_ra_stats, &lprocfs_stats_seq_fops);
diff --git a/fs/lustre/llite/rw.c b/fs/lustre/llite/rw.c
index 2290b31..0b14ea6 100644
--- a/fs/lustre/llite/rw.c
+++ b/fs/lustre/llite/rw.c
@@ -150,6 +150,14 @@ void ll_ra_stats_inc(struct inode *inode, enum ra_stat which)
 	ll_ra_stats_inc_sbi(sbi, which);
 }
 
+void ll_ra_stats_add(struct inode *inode, enum ra_stat which, long count)
+{
+	struct ll_sb_info *sbi = ll_i2sbi(inode);
+
+	LASSERTF(which < _NR_RA_STAT, "which: %u\n", which);
+	lprocfs_counter_add(sbi->ll_ra_stats, which, count);
+}
+
 #define RAS_CDEBUG(ras) \
 	CDEBUG(D_READA,							     \
 	       "lre %llu cr %lu cb %llu wsi %lu wp %lu nra %lu rpc %lu r %lu csr %lu so %llu sb %llu sl %llu lr %lu\n", \
@@ -528,6 +536,10 @@ static bool ras_inside_ra_window(pgoff_t idx, struct ra_io_arg *ria)
 	}
 	cl_read_ahead_release(env, &ra);
 
+	if (count)
+		ll_ra_stats_add(vvp_object_inode(io->ci_obj),
+				RA_STAT_READAHEAD_PAGES, count);
+
 	return count;
 }
 
-- 
1.8.3.1

_______________________________________________
lustre-devel mailing list
[email protected]
http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.