public inbox for linux-ext4@vger.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Li Chen <me@linux.beauty>
Cc: Zhang Yi <yi.zhang@huaweicloud.com>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Andreas Dilger <adilger.kernel@dilger.ca>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-trace-kernel@vger.kernel.org
Subject: Re: [RFC v4 6/7] ext4: fast commit: add lock_updates tracepoint
Date: Fri, 23 Jan 2026 12:57:37 -0500	[thread overview]
Message-ID: <20260123125737.2b6ddbbe@gandalf.local.home> (raw)
In-Reply-To: <20260120112538.132774-7-me@linux.beauty>

On Tue, 20 Jan 2026 19:25:35 +0800
Li Chen <me@linux.beauty> wrote:

> Commit-time fast commit snapshots run under jbd2_journal_lock_updates(),
> so it is useful to quantify the time spent with updates locked and to
> understand why snapshotting can fail.
> 
> Add a new tracepoint, ext4_fc_lock_updates, reporting the time spent in
> the updates-locked window along with the number of snapshotted inodes
> and ranges. Record the first snapshot failure reason in a stable snap_err
> field for tooling.
> 
> Signed-off-by: Li Chen <me@linux.beauty>
> ---
>  fs/ext4/fast_commit.c       | 86 ++++++++++++++++++++++++++++++-------
>  include/trace/events/ext4.h | 33 ++++++++++++++
>  2 files changed, 104 insertions(+), 15 deletions(-)
> 
> diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c
> index d1eefee60912..d266eb2a4219 100644
> --- a/fs/ext4/fast_commit.c
> +++ b/fs/ext4/fast_commit.c
> @@ -193,6 +193,27 @@ static struct kmem_cache *ext4_fc_range_cachep;
>  #define EXT4_FC_SNAPSHOT_MAX_INODES	1024
>  #define EXT4_FC_SNAPSHOT_MAX_RANGES	2048
>  
> +/*
> + * Snapshot failure reasons for ext4_fc_lock_updates tracepoint.
> + * Keep these stable for tooling.
> + */
> +enum ext4_fc_snap_err {
> +	EXT4_FC_SNAP_ERR_NONE = 0,
> +	EXT4_FC_SNAP_ERR_ES_MISS,
> +	EXT4_FC_SNAP_ERR_ES_DELAYED,
> +	EXT4_FC_SNAP_ERR_ES_OTHER,
> +	EXT4_FC_SNAP_ERR_INODES_CAP,
> +	EXT4_FC_SNAP_ERR_RANGES_CAP,
> +	EXT4_FC_SNAP_ERR_NOMEM,
> +	EXT4_FC_SNAP_ERR_INODE_LOC,
> +};
> +
> +static inline void ext4_fc_set_snap_err(int *snap_err, int err)
> +{
> +	if (snap_err && *snap_err == EXT4_FC_SNAP_ERR_NONE)
> +		*snap_err = err;
> +}
> +



> diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h
> index fd76d14c2776..a1493971821d 100644
> --- a/include/trace/events/ext4.h
> +++ b/include/trace/events/ext4.h
> @@ -2812,6 +2812,39 @@ TRACE_EVENT(ext4_fc_commit_stop,
>  		  __entry->num_fc_ineligible, __entry->nblks_agg, __entry->tid)
>  );
>  

Why not make the snap_err into a human readable format?

#define TRACE_SNAP_ERR		\
	EM(NONE)		\
	EM(ES_MISS)		\
	EM(ES_DELAYED)		\
	EM(ES_OTHER)		\
	EM(INODES_CAP)		\
	EM(RANGES_CAP)		\
	EM(NOMEM)		\
	EMe(INODE_LOC)		\

#undef EM
#undef EMe

#define EM(a)	TRACE_DEFINE_ENUM(EXT4_FC_SNAP_ERR_##a);
#define EMe(a)	TRACE_DEFINE_ENUM(EXT4_FC_SNAP_ERR_##a);

TRACE_SNAP_ERR

#undef EM
#undef EMe

#define EM(a)	{ EXT4_FC_SNAP_ERR_##a, #a },
#define EM(a)	{ EXT4_FC_SNAP_ERR_##a, #a }


> +TRACE_EVENT(ext4_fc_lock_updates,
> +	    TP_PROTO(struct super_block *sb, tid_t commit_tid, u64 locked_ns,
> +		     unsigned int nr_inodes, unsigned int nr_ranges, int err,
> +		     int snap_err),
> +
> +	TP_ARGS(sb, commit_tid, locked_ns, nr_inodes, nr_ranges, err, snap_err),
> +
> +	TP_STRUCT__entry(/* entry */
> +		__field(dev_t, dev)
> +		__field(tid_t, tid)
> +		__field(u64, locked_ns)
> +		__field(unsigned int, nr_inodes)
> +		__field(unsigned int, nr_ranges)
> +		__field(int, err)
> +		__field(int, snap_err)
> +	),
> +
> +	TP_fast_assign(/* assign */
> +		__entry->dev = sb->s_dev;
> +		__entry->tid = commit_tid;
> +		__entry->locked_ns = locked_ns;
> +		__entry->nr_inodes = nr_inodes;
> +		__entry->nr_ranges = nr_ranges;
> +		__entry->err = err;
> +		__entry->snap_err = snap_err;
> +	),
> +
> +	TP_printk("dev %d,%d tid %u locked_ns %llu nr_inodes %u nr_ranges %u err %d snap_err %d",
> +		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
> +		  __entry->locked_ns, __entry->nr_inodes, __entry->nr_ranges,
> +		  __entry->err, __entry->snap_err)

And instead of having the raw value of __entry->snap_err, use:

		__entry->err, __print_symbolic(__entry->snap_err, TRACE_SNAP_ERR))

-- Steve


> +);
> +
>  #define FC_REASON_NAME_STAT(reason)					\
>  	show_fc_reason(reason),						\
>  	__entry->fc_ineligible_rc[reason]

1

  reply	other threads:[~2026-01-23 17:57 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-20 11:25 [RFC v4 0/7] ext4: fast commit: snapshot inode state for FC log Li Chen
2026-01-20 11:25 ` [RFC v4 1/7] ext4: fast commit: snapshot inode state before writing log Li Chen
2026-01-20 11:25 ` [RFC v4 2/7] ext4: lockdep: handle i_data_sem subclassing for special inodes Li Chen
2026-01-20 11:25 ` [RFC v4 3/7] ext4: fast commit: avoid waiting for FC_COMMITTING Li Chen
2026-01-20 11:25 ` [RFC v4 4/7] ext4: fast commit: avoid self-deadlock in inode snapshotting Li Chen
2026-01-20 11:25 ` [RFC v4 5/7] ext4: fast commit: avoid i_data_sem by dropping ext4_map_blocks() in snapshots Li Chen
2026-01-20 11:25 ` [RFC v4 6/7] ext4: fast commit: add lock_updates tracepoint Li Chen
2026-01-23 17:57   ` Steven Rostedt [this message]
2026-01-27 12:05     ` Li Chen
2026-01-20 11:25 ` [RFC v4 7/7] ext4: fast commit: export snapshot stats in fc_info Li Chen
2026-04-10  1:18 ` [RFC v4 0/7] ext4: fast commit: snapshot inode state for FC log Theodore Tso

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=20260123125737.2b6ddbbe@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=adilger.kernel@dilger.ca \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=me@linux.beauty \
    --cc=mhiramat@kernel.org \
    --cc=tytso@mit.edu \
    --cc=yi.zhang@huaweicloud.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox