[f2fs-dev] [PATCH] f2fs: adjust iostat tracepoints
liujinbao1 <[email protected]> Fri, 31 Jul 2026 19:29:54 +0800
| Newsgroups | net.sourceforge.lists.linux-f2fs-devel |
|---|---|
| Message-ID | <[email protected]> |
From: liujinbao1 <[email protected]> Move trace_f2fs_submit_read_bio() and trace_f2fs_submit_write_bio() after iostat context initialization, and add trace_f2fs_iostat_update() so f2fs iostat can be adjusted through tracepoints. Use ktime_get_ns() for more accurate iostat accounting. Signed-off-by: liujinbao1 <[email protected]> --- fs/f2fs/data.c | 4 ++-- fs/f2fs/iostat.c | 5 ++++- fs/f2fs/iostat.h | 2 +- include/trace/events/f2fs.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index a765fda71536..0b6aab302f02 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -568,9 +568,9 @@ void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio, return; WARN_ON_ONCE(!is_read_io(bio_op(bio))); - trace_f2fs_submit_read_bio(sbi->sb, type, bio); iostat_update_submit_ctx(bio, type); + trace_f2fs_submit_read_bio(sbi->sb, type, bio); blk_crypto_submit_bio(bio); } @@ -578,8 +578,8 @@ static void f2fs_submit_write_bio(struct f2fs_sb_info *sbi, struct bio *bio, enum page_type type) { WARN_ON_ONCE(is_read_io(bio_op(bio))); - trace_f2fs_submit_write_bio(sbi->sb, type, bio); iostat_update_submit_ctx(bio, type); + trace_f2fs_submit_write_bio(sbi->sb, type, bio); blk_crypto_submit_bio(bio); } diff --git a/fs/f2fs/iostat.c b/fs/f2fs/iostat.c index ae265e3e9b2c..73d810b3b7ff 100644 --- a/fs/f2fs/iostat.c +++ b/fs/f2fs/iostat.c @@ -257,7 +257,7 @@ static inline void __update_iostat_latency(struct bio_iostat_ctx *iostat_ctx, if (!sbi->iostat_enable) return; - ts_diff = jiffies - iostat_ctx->submit_ts; + ts_diff = ktime_get_ns() - iostat_ctx->submit_ts; if (page_type == META_FLUSH) { page_type = META; } else if (page_type >= NR_PAGE_TYPE) { @@ -278,6 +278,9 @@ void iostat_update_and_unbind_ctx(struct bio *bio) struct bio_iostat_ctx *iostat_ctx = bio->bi_private; enum iostat_lat_type lat_type; + trace_f2fs_iostat_update(iostat_ctx->sbi->sb, bio, + iostat_ctx->submit_ts); + if (op_is_write(bio_op(bio))) { lat_type = bio->bi_opf & REQ_SYNC ? WRITE_SYNC_IO : WRITE_ASYNC_IO; diff --git a/fs/f2fs/iostat.h b/fs/f2fs/iostat.h index 2025225b5bed..2e3e1e4ce8b3 100644 --- a/fs/f2fs/iostat.h +++ b/fs/f2fs/iostat.h @@ -49,7 +49,7 @@ static inline void iostat_update_submit_ctx(struct bio *bio, { struct bio_iostat_ctx *iostat_ctx = bio->bi_private; - iostat_ctx->submit_ts = jiffies; + iostat_ctx->submit_ts = ktime_get_ns(); iostat_ctx->type = type; } diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h index 270c1a2c24c4..b97e0740d7ed 100644 --- a/include/trace/events/f2fs.h +++ b/include/trace/events/f2fs.h @@ -2315,6 +2315,38 @@ TRACE_EVENT(f2fs_iostat_latency, __entry->n_wr_as_peak, __entry->n_wr_as_avg, __entry->n_wr_as_cnt, __entry->m_wr_as_peak, __entry->m_wr_as_avg, __entry->m_wr_as_cnt) ); + +TRACE_EVENT(f2fs_iostat_update, + + TP_PROTO(struct super_block *sb, struct bio *bio, + unsigned long submit_ts), + + TP_ARGS(sb, bio, submit_ts), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(enum req_op, op) + __field(blk_opf_t, op_flags) + __field(sector_t, sector) + __field(unsigned int, size) + __field(unsigned long, submit_ts) + ), + + TP_fast_assign( + __entry->dev = sb->s_dev; + __entry->op = bio_op(bio); + __entry->op_flags = bio->bi_opf; + __entry->sector = bio->bi_iter.bi_sector; + __entry->size = bio->bi_iter.bi_size; + __entry->submit_ts = submit_ts; + ), + + TP_printk("dev=(%d,%d), rw = %s(%s), sector = %llu, size = %u", + show_dev(__entry->dev), + show_bio_type(__entry->op, __entry->op_flags), + (unsigned long long)__entry->sector, + __entry->size) +); #endif TRACE_EVENT(f2fs_bmap, -- 2.43.0 _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel