From: Jeff Layton <jlayton@kernel.org>
To: Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Chandan Babu R <chandan.babu@oracle.com>,
"Darrick J. Wong" <djwong@kernel.org>,
Theodore Ts'o <tytso@mit.edu>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Chris Mason <clm@fb.com>, Josef Bacik <josef@toxicpanda.com>,
David Sterba <dsterba@suse.com>, Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Jonathan Corbet <corbet@lwn.net>
Cc: Dave Chinner <david@fromorbit.com>,
Andi Kleen <ak@linux.intel.com>,
Christoph Hellwig <hch@infradead.org>,
Uros Bizjak <ubizjak@gmail.com>,
Kent Overstreet <kent.overstreet@linux.dev>,
Arnd Bergmann <arnd@arndb.de>,
Randy Dunlap <rdunlap@infradead.org>,
kernel-team@fb.com, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org,
linux-mm@kvack.org, linux-nfs@vger.kernel.org,
linux-doc@vger.kernel.org, Jeff Layton <jlayton@kernel.org>
Subject: [PATCH v5 3/9] fs: add percpu counters for significant multigrain timestamp events
Date: Thu, 11 Jul 2024 07:08:07 -0400 [thread overview]
Message-ID: <20240711-mgtime-v5-3-37bb5b465feb@kernel.org> (raw)
In-Reply-To: <20240711-mgtime-v5-0-37bb5b465feb@kernel.org>
Four percpu counters for counting various stats around mgtimes, and a
new debugfs file for displaying them:
- number of attempted ctime updates
- number of successful i_ctime_nsec swaps
- number of fine-grained timestamp fetches
- number of floor value swaps
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/inode.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/fs/inode.c b/fs/inode.c
index 81b45e0a95a6..011148c82901 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -21,6 +21,8 @@
#include <linux/list_lru.h>
#include <linux/iversion.h>
#include <linux/rw_hint.h>
+#include <linux/seq_file.h>
+#include <linux/debugfs.h>
#include <trace/events/writeback.h>
#define CREATE_TRACE_POINTS
#include <trace/events/timestamp.h>
@@ -70,6 +72,11 @@ static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
*/
static __cacheline_aligned_in_smp atomic64_t ctime_floor;
+static struct percpu_counter mg_ctime_updates;
+static struct percpu_counter mg_floor_swaps;
+static struct percpu_counter mg_ctime_swaps;
+static struct percpu_counter mg_fine_stamps;
+
/*
* Empty aops. Can be used for the cases where the user does not
* define any of the address_space operations.
@@ -2654,6 +2661,7 @@ struct timespec64 inode_set_ctime_current(struct inode *inode)
/* Get a fine-grained time */
fine = ktime_get();
+ percpu_counter_inc(&mg_fine_stamps);
/*
* If the cmpxchg works, we take the new floor value. If
@@ -2662,11 +2670,14 @@ struct timespec64 inode_set_ctime_current(struct inode *inode)
* as good, so keep it.
*/
old = floor;
- if (!atomic64_try_cmpxchg(&ctime_floor, &old, fine))
+ if (atomic64_try_cmpxchg(&ctime_floor, &old, fine))
+ percpu_counter_inc(&mg_floor_swaps);
+ else
fine = old;
now = ktime_mono_to_real(fine);
}
}
+ percpu_counter_inc(&mg_ctime_updates);
now_ts = timestamp_truncate(ktime_to_timespec64(now), inode);
cur = cns;
retry:
@@ -2675,6 +2686,7 @@ struct timespec64 inode_set_ctime_current(struct inode *inode)
/* If swap occurred, then we're (mostly) done */
inode->i_ctime_sec = now_ts.tv_sec;
trace_ctime_ns_xchg(inode, cns, now_ts.tv_nsec, cur);
+ percpu_counter_inc(&mg_ctime_swaps);
} else {
/*
* Was the change due to someone marking the old ctime QUERIED?
@@ -2744,3 +2756,49 @@ umode_t mode_strip_sgid(struct mnt_idmap *idmap,
return mode & ~S_ISGID;
}
EXPORT_SYMBOL(mode_strip_sgid);
+
+static int mgts_show(struct seq_file *s, void *p)
+{
+ u64 ctime_updates = percpu_counter_sum(&mg_ctime_updates);
+ u64 ctime_swaps = percpu_counter_sum(&mg_ctime_swaps);
+ u64 fine_stamps = percpu_counter_sum(&mg_fine_stamps);
+ u64 floor_swaps = percpu_counter_sum(&mg_floor_swaps);
+
+ seq_printf(s, "%llu %llu %llu %llu\n",
+ ctime_updates, ctime_swaps, fine_stamps, floor_swaps);
+ return 0;
+}
+
+DEFINE_SHOW_ATTRIBUTE(mgts);
+
+static int __init mg_debugfs_init(void)
+{
+ int ret = percpu_counter_init(&mg_ctime_updates, 0, GFP_KERNEL);
+
+ if (ret)
+ return ret;
+
+ ret = percpu_counter_init(&mg_floor_swaps, 0, GFP_KERNEL);
+ if (ret) {
+ percpu_counter_destroy(&mg_ctime_updates);
+ return ret;
+ }
+
+ ret = percpu_counter_init(&mg_ctime_swaps, 0, GFP_KERNEL);
+ if (ret) {
+ percpu_counter_destroy(&mg_floor_swaps);
+ percpu_counter_destroy(&mg_ctime_updates);
+ return ret;
+ }
+
+ ret = percpu_counter_init(&mg_fine_stamps, 0, GFP_KERNEL);
+ if (ret) {
+ percpu_counter_destroy(&mg_floor_swaps);
+ percpu_counter_destroy(&mg_ctime_updates);
+ percpu_counter_destroy(&mg_ctime_swaps);
+ return ret;
+ }
+ debugfs_create_file("multigrain_timestamps", S_IFREG | S_IRUGO, NULL, NULL, &mgts_fops);
+ return 0;
+}
+late_initcall(mg_debugfs_init);
--
2.45.2
next prev parent reply other threads:[~2024-07-11 11:08 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-11 11:08 [PATCH v5 0/9] fs: multigrain timestamp redux Jeff Layton
2024-07-11 11:08 ` [PATCH v5 1/9] fs: add infrastructure for multigrain timestamps Jeff Layton
2024-07-11 16:59 ` Darrick J. Wong
2024-07-11 11:08 ` [PATCH v5 2/9] fs: tracepoints around multigrain timestamp events Jeff Layton
2024-07-11 16:49 ` Darrick J. Wong
2024-07-11 17:28 ` Jeff Layton
2024-07-11 11:08 ` Jeff Layton [this message]
2024-07-11 11:08 ` [PATCH v5 4/9] fs: have setattr_copy handle multigrain timestamps appropriately Jeff Layton
2024-07-11 16:51 ` Darrick J. Wong
2024-07-11 11:08 ` [PATCH v5 5/9] Documentation: add a new file documenting multigrain timestamps Jeff Layton
2024-07-11 19:12 ` Darrick J. Wong
2024-07-11 19:34 ` Jeff Layton
2024-07-11 11:08 ` [PATCH v5 6/9] xfs: switch to " Jeff Layton
2024-07-11 15:09 ` Darrick J. Wong
2024-07-11 15:58 ` Jeff Layton
2024-07-11 19:14 ` Darrick J. Wong
2024-07-11 19:40 ` Jeff Layton
2024-07-11 11:08 ` [PATCH v5 7/9] ext4: " Jeff Layton
2024-07-11 11:08 ` [PATCH v5 8/9] btrfs: convert " Jeff Layton
2024-07-11 11:08 ` [PATCH v5 9/9] tmpfs: add support for " Jeff Layton
2024-07-11 14:44 ` [PATCH v5 0/9] fs: multigrain timestamp redux Josef Bacik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240711-mgtime-v5-3-37bb5b465feb@kernel.org \
--to=jlayton@kernel.org \
--cc=adilger.kernel@dilger.ca \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=brauner@kernel.org \
--cc=chandan.babu@oracle.com \
--cc=clm@fb.com \
--cc=corbet@lwn.net \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=dsterba@suse.com \
--cc=hch@infradead.org \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=josef@toxicpanda.com \
--cc=kent.overstreet@linux.dev \
--cc=kernel-team@fb.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tytso@mit.edu \
--cc=ubizjak@gmail.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.