All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Jeff Layton <jlayton@kernel.org>
Cc: 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>,
	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>,
	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>,
	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
Subject: Re: [PATCH v6 3/9] fs: add percpu counters for significant multigrain timestamp events
Date: Mon, 15 Jul 2024 13:03:23 -0700	[thread overview]
Message-ID: <20240715200323.GA103010@frogsfrogsfrogs> (raw)
In-Reply-To: <7bb897f31fded59aae8d62a6796dd21feebd0642.camel@kernel.org>

On Mon, Jul 15, 2024 at 03:53:42PM -0400, Jeff Layton wrote:
> On Mon, 2024-07-15 at 11:32 -0700, Darrick J. Wong wrote:
> > On Mon, Jul 15, 2024 at 08:48:54AM -0400, Jeff Layton wrote:
> > > 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
> > > 
> > > Reviewed-by: Josef Bacik <josef@toxicpanda.com>
> > > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > > ---
> > >  fs/inode.c | 70
> > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> > >  1 file changed, 69 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/fs/inode.c b/fs/inode.c
> > > index 869994285e87..fff844345c35 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>
> > > @@ -80,6 +82,10 @@ EXPORT_SYMBOL(empty_aops);
> > >  
> > >  static DEFINE_PER_CPU(unsigned long, nr_inodes);
> > >  static DEFINE_PER_CPU(unsigned long, nr_unused);
> > > +static DEFINE_PER_CPU(unsigned long, mg_ctime_updates);
> > > +static DEFINE_PER_CPU(unsigned long, mg_fine_stamps);
> > > +static DEFINE_PER_CPU(unsigned long, mg_floor_swaps);
> > > +static DEFINE_PER_CPU(unsigned long, mg_ctime_swaps);
> > 
> > Should this all get switched off if CONFIG_DEBUG_FS=n?
> > 
> > --D
> > 
> 
> Sure, why not. That's simple enough to do.
> 
> I pushed an updated mgtime branch to my git tree. Here's the updated
> patch that's the only difference:
> 
>     https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/commit/?h=mgtime&id=ee7fe6e9c0598754861c8620230f15f3de538ca5
> 
> Seems to build OK both with and without CONFIG_DEBUG_FS.

LGTM,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

Thank you for your work on all this multigrain stuff. :)

--D

>  
> > >  
> > >  static struct kmem_cache *inode_cachep __ro_after_init;
> > >  
> > > @@ -101,6 +107,42 @@ static inline long get_nr_inodes_unused(void)
> > >  	return sum < 0 ? 0 : sum;
> > >  }
> > >  
> > > +static long get_mg_ctime_updates(void)
> > > +{
> > > +	int i;
> > > +	long sum = 0;
> > > +	for_each_possible_cpu(i)
> > > +		sum += per_cpu(mg_ctime_updates, i);
> > > +	return sum < 0 ? 0 : sum;
> > > +}
> > > +
> > > +static long get_mg_fine_stamps(void)
> > > +{
> > > +	int i;
> > > +	long sum = 0;
> > > +	for_each_possible_cpu(i)
> > > +		sum += per_cpu(mg_fine_stamps, i);
> > > +	return sum < 0 ? 0 : sum;
> > > +}
> > > +
> > > +static long get_mg_floor_swaps(void)
> > > +{
> > > +	int i;
> > > +	long sum = 0;
> > > +	for_each_possible_cpu(i)
> > > +		sum += per_cpu(mg_floor_swaps, i);
> > > +	return sum < 0 ? 0 : sum;
> > > +}
> > > +
> > > +static long get_mg_ctime_swaps(void)
> > > +{
> > > +	int i;
> > > +	long sum = 0;
> > > +	for_each_possible_cpu(i)
> > > +		sum += per_cpu(mg_ctime_swaps, i);
> > > +	return sum < 0 ? 0 : sum;
> > > +}
> > > +
> > >  long get_nr_dirty_inodes(void)
> > >  {
> > >  	/* not actually dirty inodes, but a wild approximation */
> > > @@ -2655,6 +2697,7 @@ struct timespec64
> > > inode_set_ctime_current(struct inode *inode)
> > >  
> > >  			/* Get a fine-grained time */
> > >  			fine = ktime_get();
> > > +			this_cpu_inc(mg_fine_stamps);
> > >  
> > >  			/*
> > >  			 * If the cmpxchg works, we take the new
> > > floor value. If
> > > @@ -2663,11 +2706,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))
> > > +				this_cpu_inc(mg_floor_swaps);
> > > +			else
> > >  				fine = old;
> > >  			now = ktime_mono_to_real(fine);
> > >  		}
> > >  	}
> > > +	this_cpu_inc(mg_ctime_updates);
> > >  	now_ts = timestamp_truncate(ktime_to_timespec64(now),
> > > inode);
> > >  	cur = cns;
> > >  
> > > @@ -2682,6 +2728,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);
> > > +		this_cpu_inc(mg_ctime_swaps);
> > >  	} else {
> > >  		/*
> > >  		 * Was the change due to someone marking the old
> > > ctime QUERIED?
> > > @@ -2751,3 +2798,24 @@ 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)
> > > +{
> > > +	long ctime_updates = get_mg_ctime_updates();
> > > +	long ctime_swaps = get_mg_ctime_swaps();
> > > +	long fine_stamps = get_mg_fine_stamps();
> > > +	long floor_swaps = get_mg_floor_swaps();
> > > +
> > > +	seq_printf(s, "%lu %lu %lu %lu\n",
> > > +		   ctime_updates, ctime_swaps, fine_stamps,
> > > floor_swaps);
> > > +	return 0;
> > > +}
> > > +
> > > +DEFINE_SHOW_ATTRIBUTE(mgts);
> > > +
> > > +static int __init mg_debugfs_init(void)
> > > +{
> > > +	debugfs_create_file("multigrain_timestamps", S_IFREG |
> > > S_IRUGO, NULL, NULL, &mgts_fops);
> > > +	return 0;
> > > +}
> > > +late_initcall(mg_debugfs_init);
> > > 
> > > -- 
> > > 2.45.2
> > > 
> > > 
> 
> -- 
> Jeff Layton <jlayton@kernel.org>
> 

  reply	other threads:[~2024-07-15 20:03 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-15 12:48 [PATCH v6 0/9] fs: multigrain timestamp redux Jeff Layton
2024-07-15 12:48 ` [PATCH v6 1/9] fs: add infrastructure for multigrain timestamps Jeff Layton
2024-07-17 10:40   ` Jan Kara
2024-08-08 22:09   ` Mateusz Guzik
2024-08-09  0:00     ` Jeff Layton
2024-08-08 23:43   ` Mateusz Guzik
2024-08-09  0:29     ` Jeff Layton
2024-07-15 12:48 ` [PATCH v6 2/9] fs: tracepoints around multigrain timestamp events Jeff Layton
2024-07-15 18:29   ` Darrick J. Wong
2024-07-17 10:41   ` Jan Kara
2024-07-15 12:48 ` [PATCH v6 3/9] fs: add percpu counters for significant " Jeff Layton
2024-07-15 18:32   ` Darrick J. Wong
2024-07-15 19:53     ` Jeff Layton
2024-07-15 20:03       ` Darrick J. Wong [this message]
2024-07-17 10:45       ` Jan Kara
2024-07-15 12:48 ` [PATCH v6 4/9] fs: have setattr_copy handle multigrain timestamps appropriately Jeff Layton
2024-07-17 11:24   ` Jan Kara
2024-07-15 12:48 ` [PATCH v6 5/9] Documentation: add a new file documenting multigrain timestamps Jeff Layton
2024-07-15 18:45   ` Darrick J. Wong
2024-07-17  6:00   ` Randy Dunlap
2024-07-17 11:31   ` Jan Kara
2024-07-17 12:02     ` Jeff Layton
2024-07-15 12:48 ` [PATCH v6 6/9] xfs: switch to " Jeff Layton
2024-07-15 18:47   ` Darrick J. Wong
2024-07-15 12:48 ` [PATCH v6 7/9] ext4: " Jeff Layton
2024-07-17 11:32   ` Jan Kara
2024-07-15 12:48 ` [PATCH v6 8/9] btrfs: convert " Jeff Layton
2024-07-15 12:49 ` [PATCH v6 9/9] tmpfs: add support for " Jeff Layton
2024-07-17 11:34   ` Jan Kara
2024-07-16  7:37 ` [PATCH v6 0/9] fs: multigrain timestamp redux Christian Brauner
2024-07-16 12:45   ` Jeff Layton
2024-07-22 15:30     ` Christian Brauner

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=20240715200323.GA103010@frogsfrogsfrogs \
    --to=djwong@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=dsterba@suse.com \
    --cc=hch@infradead.org \
    --cc=hughd@google.com \
    --cc=jack@suse.cz \
    --cc=jlayton@kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=kent.overstreet@linux.dev \
    --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.