f2fs: add compressed/gc data read IO stat
authorChao Yu <yuchao0@huawei.com>
Thu, 23 Apr 2020 10:03:06 +0000 (18:03 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 12 May 2020 03:37:13 +0000 (20:37 -0700)
in order to account data read IOs more accurately.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c
fs/f2fs/f2fs.h
fs/f2fs/gc.c
fs/f2fs/sysfs.c
include/trace/events/f2fs.h

index 4d871d2..48a622b 100644 (file)
@@ -2234,6 +2234,7 @@ submit_and_realloc:
 
                inc_page_count(sbi, F2FS_RD_DATA);
                f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+               f2fs_update_iostat(sbi, FS_CDATA_READ_IO, F2FS_BLKSIZE);
                ClearPageError(page);
                *last_block_in_bio = blkaddr;
        }
index 3386220..51863e4 100644 (file)
@@ -1149,6 +1149,8 @@ enum iostat_type {
        APP_READ_IO,                    /* app read IOs */
        APP_MAPPED_READ_IO,             /* app mapped read IOs */
        FS_DATA_READ_IO,                /* data read IOs */
+       FS_GDATA_READ_IO,               /* data read IOs from background gc */
+       FS_CDATA_READ_IO,               /* compressed data read IOs */
        FS_NODE_READ_IO,                /* node read IOs */
        FS_META_READ_IO,                /* meta read IOs */
 
index f3c45ec..5b95d5a 100644 (file)
@@ -740,6 +740,7 @@ got_it:
        f2fs_put_page(page, 1);
 
        f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+       f2fs_update_iostat(sbi, FS_GDATA_READ_IO, F2FS_BLKSIZE);
 
        return 0;
 put_encrypted_page:
@@ -846,6 +847,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
                }
 
                f2fs_update_iostat(fio.sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+               f2fs_update_iostat(fio.sbi, FS_GDATA_READ_IO, F2FS_BLKSIZE);
 
                lock_page(mpage);
                if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
index eaf8088..a117ae1 100644 (file)
@@ -803,6 +803,7 @@ static int __maybe_unused iostat_info_seq_show(struct seq_file *seq,
        seq_printf(seq, "time:          %-16llu\n", now);
 
        /* print app write IOs */
+       seq_puts(seq, "[WRITE]\n");
        seq_printf(seq, "app buffered:  %-16llu\n",
                                sbi->rw_iostat[APP_BUFFERED_IO]);
        seq_printf(seq, "app direct:    %-16llu\n",
@@ -829,6 +830,7 @@ static int __maybe_unused iostat_info_seq_show(struct seq_file *seq,
                                sbi->rw_iostat[FS_CP_META_IO]);
 
        /* print app read IOs */
+       seq_puts(seq, "[READ]\n");
        seq_printf(seq, "app buffered:  %-16llu\n",
                                sbi->rw_iostat[APP_BUFFERED_READ_IO]);
        seq_printf(seq, "app direct:    %-16llu\n",
@@ -839,12 +841,17 @@ static int __maybe_unused iostat_info_seq_show(struct seq_file *seq,
        /* print fs read IOs */
        seq_printf(seq, "fs data:       %-16llu\n",
                                sbi->rw_iostat[FS_DATA_READ_IO]);
+       seq_printf(seq, "fs gc data:    %-16llu\n",
+                               sbi->rw_iostat[FS_GDATA_READ_IO]);
+       seq_printf(seq, "fs compr_data: %-16llu\n",
+                               sbi->rw_iostat[FS_CDATA_READ_IO]);
        seq_printf(seq, "fs node:       %-16llu\n",
                                sbi->rw_iostat[FS_NODE_READ_IO]);
        seq_printf(seq, "fs meta:       %-16llu\n",
                                sbi->rw_iostat[FS_META_READ_IO]);
 
        /* print other IOs */
+       seq_puts(seq, "[OTHER]\n");
        seq_printf(seq, "fs discard:    %-16llu\n",
                                sbi->rw_iostat[FS_DISCARD]);
 
index 4dbcdc6..a8e2e83 100644 (file)
@@ -1840,6 +1840,8 @@ TRACE_EVENT(f2fs_iostat,
                __field(unsigned long long,     app_rio)
                __field(unsigned long long,     app_mrio)
                __field(unsigned long long,     fs_drio)
+               __field(unsigned long long,     fs_gdrio)
+               __field(unsigned long long,     fs_cdrio)
                __field(unsigned long long,     fs_nrio)
                __field(unsigned long long,     fs_mrio)
                __field(unsigned long long,     fs_discard)
@@ -1864,6 +1866,8 @@ TRACE_EVENT(f2fs_iostat,
                __entry->app_rio        = iostat[APP_READ_IO];
                __entry->app_mrio       = iostat[APP_MAPPED_READ_IO];
                __entry->fs_drio        = iostat[FS_DATA_READ_IO];
+               __entry->fs_gdrio       = iostat[FS_GDATA_READ_IO];
+               __entry->fs_cdrio       = iostat[FS_CDATA_READ_IO];
                __entry->fs_nrio        = iostat[FS_NODE_READ_IO];
                __entry->fs_mrio        = iostat[FS_META_READ_IO];
                __entry->fs_discard     = iostat[FS_DISCARD];
@@ -1875,15 +1879,16 @@ TRACE_EVENT(f2fs_iostat,
                "gc [data=%llu, node=%llu], "
                "cp [data=%llu, node=%llu, meta=%llu], "
                "app [read=%llu (direct=%llu, buffered=%llu), mapped=%llu], "
-               "fs [data=%llu, node=%llu, meta=%llu]",
+               "fs [data=%llu, (gc_data=%llu, compr_data=%llu), "
+               "node=%llu, meta=%llu]",
                show_dev(__entry->dev), __entry->app_wio, __entry->app_dio,
                __entry->app_bio, __entry->app_mio, __entry->fs_dio,
                __entry->fs_nio, __entry->fs_mio, __entry->fs_discard,
                __entry->fs_gc_dio, __entry->fs_gc_nio, __entry->fs_cp_dio,
                __entry->fs_cp_nio, __entry->fs_cp_mio,
                __entry->app_rio, __entry->app_drio, __entry->app_brio,
-               __entry->app_mrio, __entry->fs_drio, __entry->fs_nrio,
-               __entry->fs_mrio)
+               __entry->app_mrio, __entry->fs_drio, __entry->fs_gdrio,
+               __entry->fs_cdrio, __entry->fs_nrio, __entry->fs_mrio)
 );
 
 #endif /* _TRACE_F2FS_H */