2023-11-24 01:10:12

by 牛志国 (Zhiguo Niu)

[permalink] [raw]
Subject: [PATCH] f2fs: show more discard stat by sysfs

The current pending_discard attr just only shows the discard_cmd_cnt
information, which is not very meaningful. More discard information
can be shown so that we can check them through sysfs when needed.

Signed-off-by: Zhiguo Niu <[email protected]>
---
fs/f2fs/sysfs.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 417fae96..f98e680 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -134,13 +134,22 @@ static ssize_t cp_status_show(struct f2fs_attr *a,
return sysfs_emit(buf, "%x\n", le32_to_cpu(F2FS_CKPT(sbi)->ckpt_flags));
}

-static ssize_t pending_discard_show(struct f2fs_attr *a,
+static ssize_t discard_stat_show(struct f2fs_attr *a,
struct f2fs_sb_info *sbi, char *buf)
{
- if (!SM_I(sbi)->dcc_info)
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+
+ if (!dcc)
return -EINVAL;
- return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
- &SM_I(sbi)->dcc_info->discard_cmd_cnt));
+
+ return sysfs_emit(buf, "%llu, %llu, %llu, %u\n",
+ (unsigned long long)atomic_read(
+ &dcc->discard_cmd_cnt),
+ (unsigned long long)atomic_read(
+ &dcc->issued_discard),
+ (unsigned long long)atomic_read(
+ &dcc->queued_discard),
+ dcc->undiscard_blks);
}

static ssize_t gc_mode_show(struct f2fs_attr *a,
@@ -1016,7 +1025,7 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
F2FS_GENERAL_RO_ATTR(encoding);
F2FS_GENERAL_RO_ATTR(mounted_time_sec);
F2FS_GENERAL_RO_ATTR(main_blkaddr);
-F2FS_GENERAL_RO_ATTR(pending_discard);
+F2FS_GENERAL_RO_ATTR(discard_stat);
F2FS_GENERAL_RO_ATTR(gc_mode);
#ifdef CONFIG_F2FS_STAT_FS
F2FS_GENERAL_RO_ATTR(moved_blocks_background);
@@ -1074,7 +1083,7 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
ATTR_LIST(discard_urgent_util),
ATTR_LIST(discard_granularity),
ATTR_LIST(max_ordered_discard),
- ATTR_LIST(pending_discard),
+ ATTR_LIST(discard_stat),
ATTR_LIST(gc_mode),
ATTR_LIST(ipu_policy),
ATTR_LIST(min_ipu_util),
--
1.9.1


2023-11-28 02:13:36

by Chao Yu

[permalink] [raw]
Subject: Re: [PATCH] f2fs: show more discard stat by sysfs

On 2023/11/24 9:08, Zhiguo Niu wrote:
> The current pending_discard attr just only shows the discard_cmd_cnt
> information, which is not very meaningful. More discard information
> can be shown so that we can check them through sysfs when needed.

What about adding this entry to /sys/fs/f2fs/<dev>/stat/?

>
> Signed-off-by: Zhiguo Niu <[email protected]>
> ---
> fs/f2fs/sysfs.c | 21 +++++++++++++++------
> 1 file changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 417fae96..f98e680 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -134,13 +134,22 @@ static ssize_t cp_status_show(struct f2fs_attr *a,
> return sysfs_emit(buf, "%x\n", le32_to_cpu(F2FS_CKPT(sbi)->ckpt_flags));
> }
>
> -static ssize_t pending_discard_show(struct f2fs_attr *a,
> +static ssize_t discard_stat_show(struct f2fs_attr *a,
> struct f2fs_sb_info *sbi, char *buf)
> {
> - if (!SM_I(sbi)->dcc_info)
> + struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
> +
> + if (!dcc)
> return -EINVAL;
> - return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> - &SM_I(sbi)->dcc_info->discard_cmd_cnt));

It's better to keep the old one for any potential user.

> +
> + return sysfs_emit(buf, "%llu, %llu, %llu, %u\n",
> + (unsigned long long)atomic_read(
> + &dcc->discard_cmd_cnt),
> + (unsigned long long)atomic_read(
> + &dcc->issued_discard),
> + (unsigned long long)atomic_read(
> + &dcc->queued_discard),
> + dcc->undiscard_blks);
> }
>
> static ssize_t gc_mode_show(struct f2fs_attr *a,
> @@ -1016,7 +1025,7 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> F2FS_GENERAL_RO_ATTR(encoding);
> F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> F2FS_GENERAL_RO_ATTR(main_blkaddr);
> -F2FS_GENERAL_RO_ATTR(pending_discard);
> +F2FS_GENERAL_RO_ATTR(discard_stat);

It needs to adjust Documentation/ABI/testing/sysfs-fs-f2fs.

Thanks,

> F2FS_GENERAL_RO_ATTR(gc_mode);
> #ifdef CONFIG_F2FS_STAT_FS
> F2FS_GENERAL_RO_ATTR(moved_blocks_background);
> @@ -1074,7 +1083,7 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> ATTR_LIST(discard_urgent_util),
> ATTR_LIST(discard_granularity),
> ATTR_LIST(max_ordered_discard),
> - ATTR_LIST(pending_discard),
> + ATTR_LIST(discard_stat),
> ATTR_LIST(gc_mode),
> ATTR_LIST(ipu_policy),
> ATTR_LIST(min_ipu_util),

2023-11-28 02:45:39

by Zhiguo Niu

[permalink] [raw]
Subject: Re: [PATCH] f2fs: show more discard stat by sysfs

Dear Chao,

On Tue, Nov 28, 2023 at 10:13 AM Chao Yu <[email protected]> wrote:
>
> On 2023/11/24 9:08, Zhiguo Niu wrote:
> > The current pending_discard attr just only shows the discard_cmd_cnt
> > information, which is not very meaningful. More discard information
> > can be shown so that we can check them through sysfs when needed.
>
> What about adding this entry to /sys/fs/f2fs/<dev>/stat/?
I think it is ok!
The purpose of this patch is to obtain f2fs discard related status
when necessary.
Because sys/kernel/debug/f2fs/status cannot be used on the user version,
I will change it according to your suggestion.
>
> >
> > Signed-off-by: Zhiguo Niu <[email protected]>
> > ---
> > fs/f2fs/sysfs.c | 21 +++++++++++++++------
> > 1 file changed, 15 insertions(+), 6 deletions(-)
> >
> > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> > index 417fae96..f98e680 100644
> > --- a/fs/f2fs/sysfs.c
> > +++ b/fs/f2fs/sysfs.c
> > @@ -134,13 +134,22 @@ static ssize_t cp_status_show(struct f2fs_attr *a,
> > return sysfs_emit(buf, "%x\n", le32_to_cpu(F2FS_CKPT(sbi)->ckpt_flags));
> > }
> >
> > -static ssize_t pending_discard_show(struct f2fs_attr *a,
> > +static ssize_t discard_stat_show(struct f2fs_attr *a,
> > struct f2fs_sb_info *sbi, char *buf)
> > {
> > - if (!SM_I(sbi)->dcc_info)
> > + struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
> > +
> > + if (!dcc)
> > return -EINVAL;
> > - return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> > - &SM_I(sbi)->dcc_info->discard_cmd_cnt));
>
> It's better to keep the old one for any potential user.
>
> > +
> > + return sysfs_emit(buf, "%llu, %llu, %llu, %u\n",
> > + (unsigned long long)atomic_read(
> > + &dcc->discard_cmd_cnt),
> > + (unsigned long long)atomic_read(
> > + &dcc->issued_discard),
> > + (unsigned long long)atomic_read(
> > + &dcc->queued_discard),
> > + dcc->undiscard_blks);
> > }
> >
> > static ssize_t gc_mode_show(struct f2fs_attr *a,
> > @@ -1016,7 +1025,7 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> > F2FS_GENERAL_RO_ATTR(encoding);
> > F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> > F2FS_GENERAL_RO_ATTR(main_blkaddr);
> > -F2FS_GENERAL_RO_ATTR(pending_discard);
> > +F2FS_GENERAL_RO_ATTR(discard_stat);
>
> It needs to adjust Documentation/ABI/testing/sysfs-fs-f2fs.
>
> Thanks,
>
> > F2FS_GENERAL_RO_ATTR(gc_mode);
> > #ifdef CONFIG_F2FS_STAT_FS
> > F2FS_GENERAL_RO_ATTR(moved_blocks_background);
> > @@ -1074,7 +1083,7 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> > ATTR_LIST(discard_urgent_util),
> > ATTR_LIST(discard_granularity),
> > ATTR_LIST(max_ordered_discard),
> > - ATTR_LIST(pending_discard),
> > + ATTR_LIST(discard_stat),
> > ATTR_LIST(gc_mode),
> > ATTR_LIST(ipu_policy),
> > ATTR_LIST(min_ipu_util),