From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Yangtao Li <frank.li@vivo.com>
Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH v4 3/3] f2fs: introduce ipu_mode sysfs node
Date: Tue, 7 Feb 2023 10:50:46 -0800 [thread overview]
Message-ID: <Y+Kdhh6b1TAl0ntT@google.com> (raw)
In-Reply-To: <20230206144310.2344-3-frank.li@vivo.com>
On 02/06, Yangtao Li wrote:
> Add a ipu_mode sysfs node to show the current ipu policy as a string
> for readability, like we do in commit a3951cd199a5 ("f2fs: introduce
> gc_mode sysfs node").
>
> Since we use ipu_policy as a bitmap, and the bitmap API parameter is
> unsigned long type data, let's change ipu_policy to unsigned long type.
>
> Signed-off-by: Yangtao Li <frank.li@vivo.com>
> ---
> v4:
> -rebase, no code change
> Documentation/ABI/testing/sysfs-fs-f2fs | 6 ++++++
> fs/f2fs/f2fs.h | 4 ++--
> fs/f2fs/segment.h | 1 +
> fs/f2fs/sysfs.c | 28 ++++++++++++++++++++++++-
> 4 files changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> index 94132745ecbe..b2d8c1e84073 100644
> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> @@ -729,3 +729,9 @@ What: /sys/fs/f2fs/<disk>/last_age_weight
> Date: January 2023
> Contact: "Ping Xiong" <xiongping1@xiaomi.com>
> Description: When DATA SEPARATION is on, it controls the weight of last data block age.
> +
> +What: /sys/fs/f2fs/<disk>/ipu_mode
> +Date: February 2023
> +Contact: "Yangtao Li" <frank.li@vivo.com>
> +Description: Show the current ipu policy as a string.
> + This is a read-only entry.
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 44f2d76525bf..b699ed74f438 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -1070,7 +1070,7 @@ struct f2fs_sm_info {
>
> struct list_head sit_entry_set; /* sit entry set list */
>
> - unsigned int ipu_policy; /* in-place-update policy */
> + unsigned long ipu_policy; /* in-place-update policy */
> unsigned int min_ipu_util; /* in-place-update threshold */
> unsigned int min_fsync_blocks; /* threshold for fsync */
> unsigned int min_seq_blocks; /* threshold for sequential blocks */
> @@ -1322,7 +1322,7 @@ enum {
> MAX_TIME,
> };
>
> -/* Note that you need to keep synchronization with this gc_mode_names array */
> +/* Modification on enum should be synchronized with gc_mode_names array */
> enum {
> GC_NORMAL,
> GC_IDLE_CB,
> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
> index 8ee5e5db9287..92c8be00d396 100644
> --- a/fs/f2fs/segment.h
> +++ b/fs/f2fs/segment.h
> @@ -672,6 +672,7 @@ static inline int utilization(struct f2fs_sb_info *sbi)
>
> #define F2FS_IPU_DISABLE 0
>
> +/* Modification on enum should be synchronized with ipu_mode_names array */
> enum {
> F2FS_IPU_FORCE,
> F2FS_IPU_SSR,
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 3c3dae3ce84e..4a2d895cd52c 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -51,6 +51,17 @@ static const char *gc_mode_names[MAX_GC_MODE] = {
> "GC_URGENT_MID"
> };
>
> +static const char *ipu_mode_names[F2FS_IPU_MAX] = {
> + "FORCE",
> + "SSR",
> + "UTIL",
> + "SSR_UTIL",
> + "FSYNC",
> + "ASYNC",
> + "NOCACHE",
> + "HONOR_OPU_WRITE",
> +};
> +
> struct f2fs_attr {
> struct attribute attr;
> ssize_t (*show)(struct f2fs_attr *a, struct f2fs_sb_info *sbi, char *buf);
> @@ -149,6 +160,19 @@ static ssize_t gc_mode_show(struct f2fs_attr *a,
> return sysfs_emit(buf, "%s\n", gc_mode_names[sbi->gc_mode]);
> }
>
> +static ssize_t ipu_mode_show(struct f2fs_attr *a,
> + struct f2fs_sb_info *sbi, char *buf)
> +{
> + int len = 0, i = 0;
> +
> + if (SM_I(sbi)->ipu_policy == F2FS_IPU_DISABLE)
> + return sysfs_emit(buf, "DISABLE\n");
> +
> + for_each_set_bit(i, &SM_I(sbi)->ipu_policy, F2FS_IPU_MAX)
> + len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n", ipu_mode_names[i]);
I believe this would not be a good usecase for the sysfs entry. How about
putting the info in debugfs?
> + return len;
> +}
> +
> static ssize_t features_show(struct f2fs_attr *a,
> struct f2fs_sb_info *sbi, char *buf)
> {
> @@ -711,7 +735,7 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
> return -EINVAL;
> if (t && f2fs_lfs_mode(sbi))
> return -EINVAL;
> - SM_I(sbi)->ipu_policy = (unsigned int)t;
> + SM_I(sbi)->ipu_policy = t;
> return count;
> }
>
> @@ -907,6 +931,7 @@ F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> F2FS_GENERAL_RO_ATTR(main_blkaddr);
> F2FS_GENERAL_RO_ATTR(pending_discard);
> F2FS_GENERAL_RO_ATTR(gc_mode);
> +F2FS_GENERAL_RO_ATTR(ipu_mode);
> #ifdef CONFIG_F2FS_STAT_FS
> F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_foreground_calls, cp_count);
> F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_background_calls, bg_cp_count);
> @@ -997,6 +1022,7 @@ static struct attribute *f2fs_attrs[] = {
> ATTR_LIST(max_ordered_discard),
> ATTR_LIST(pending_discard),
> ATTR_LIST(gc_mode),
> + ATTR_LIST(ipu_mode),
> ATTR_LIST(ipu_policy),
> ATTR_LIST(min_ipu_util),
> ATTR_LIST(min_fsync_blocks),
> --
> 2.25.1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Yangtao Li <frank.li@vivo.com>
Cc: chao@kernel.org, linux-f2fs-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 3/3] f2fs: introduce ipu_mode sysfs node
Date: Tue, 7 Feb 2023 10:50:46 -0800 [thread overview]
Message-ID: <Y+Kdhh6b1TAl0ntT@google.com> (raw)
In-Reply-To: <20230206144310.2344-3-frank.li@vivo.com>
On 02/06, Yangtao Li wrote:
> Add a ipu_mode sysfs node to show the current ipu policy as a string
> for readability, like we do in commit a3951cd199a5 ("f2fs: introduce
> gc_mode sysfs node").
>
> Since we use ipu_policy as a bitmap, and the bitmap API parameter is
> unsigned long type data, let's change ipu_policy to unsigned long type.
>
> Signed-off-by: Yangtao Li <frank.li@vivo.com>
> ---
> v4:
> -rebase, no code change
> Documentation/ABI/testing/sysfs-fs-f2fs | 6 ++++++
> fs/f2fs/f2fs.h | 4 ++--
> fs/f2fs/segment.h | 1 +
> fs/f2fs/sysfs.c | 28 ++++++++++++++++++++++++-
> 4 files changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> index 94132745ecbe..b2d8c1e84073 100644
> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> @@ -729,3 +729,9 @@ What: /sys/fs/f2fs/<disk>/last_age_weight
> Date: January 2023
> Contact: "Ping Xiong" <xiongping1@xiaomi.com>
> Description: When DATA SEPARATION is on, it controls the weight of last data block age.
> +
> +What: /sys/fs/f2fs/<disk>/ipu_mode
> +Date: February 2023
> +Contact: "Yangtao Li" <frank.li@vivo.com>
> +Description: Show the current ipu policy as a string.
> + This is a read-only entry.
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 44f2d76525bf..b699ed74f438 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -1070,7 +1070,7 @@ struct f2fs_sm_info {
>
> struct list_head sit_entry_set; /* sit entry set list */
>
> - unsigned int ipu_policy; /* in-place-update policy */
> + unsigned long ipu_policy; /* in-place-update policy */
> unsigned int min_ipu_util; /* in-place-update threshold */
> unsigned int min_fsync_blocks; /* threshold for fsync */
> unsigned int min_seq_blocks; /* threshold for sequential blocks */
> @@ -1322,7 +1322,7 @@ enum {
> MAX_TIME,
> };
>
> -/* Note that you need to keep synchronization with this gc_mode_names array */
> +/* Modification on enum should be synchronized with gc_mode_names array */
> enum {
> GC_NORMAL,
> GC_IDLE_CB,
> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
> index 8ee5e5db9287..92c8be00d396 100644
> --- a/fs/f2fs/segment.h
> +++ b/fs/f2fs/segment.h
> @@ -672,6 +672,7 @@ static inline int utilization(struct f2fs_sb_info *sbi)
>
> #define F2FS_IPU_DISABLE 0
>
> +/* Modification on enum should be synchronized with ipu_mode_names array */
> enum {
> F2FS_IPU_FORCE,
> F2FS_IPU_SSR,
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 3c3dae3ce84e..4a2d895cd52c 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -51,6 +51,17 @@ static const char *gc_mode_names[MAX_GC_MODE] = {
> "GC_URGENT_MID"
> };
>
> +static const char *ipu_mode_names[F2FS_IPU_MAX] = {
> + "FORCE",
> + "SSR",
> + "UTIL",
> + "SSR_UTIL",
> + "FSYNC",
> + "ASYNC",
> + "NOCACHE",
> + "HONOR_OPU_WRITE",
> +};
> +
> struct f2fs_attr {
> struct attribute attr;
> ssize_t (*show)(struct f2fs_attr *a, struct f2fs_sb_info *sbi, char *buf);
> @@ -149,6 +160,19 @@ static ssize_t gc_mode_show(struct f2fs_attr *a,
> return sysfs_emit(buf, "%s\n", gc_mode_names[sbi->gc_mode]);
> }
>
> +static ssize_t ipu_mode_show(struct f2fs_attr *a,
> + struct f2fs_sb_info *sbi, char *buf)
> +{
> + int len = 0, i = 0;
> +
> + if (SM_I(sbi)->ipu_policy == F2FS_IPU_DISABLE)
> + return sysfs_emit(buf, "DISABLE\n");
> +
> + for_each_set_bit(i, &SM_I(sbi)->ipu_policy, F2FS_IPU_MAX)
> + len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n", ipu_mode_names[i]);
I believe this would not be a good usecase for the sysfs entry. How about
putting the info in debugfs?
> + return len;
> +}
> +
> static ssize_t features_show(struct f2fs_attr *a,
> struct f2fs_sb_info *sbi, char *buf)
> {
> @@ -711,7 +735,7 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
> return -EINVAL;
> if (t && f2fs_lfs_mode(sbi))
> return -EINVAL;
> - SM_I(sbi)->ipu_policy = (unsigned int)t;
> + SM_I(sbi)->ipu_policy = t;
> return count;
> }
>
> @@ -907,6 +931,7 @@ F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> F2FS_GENERAL_RO_ATTR(main_blkaddr);
> F2FS_GENERAL_RO_ATTR(pending_discard);
> F2FS_GENERAL_RO_ATTR(gc_mode);
> +F2FS_GENERAL_RO_ATTR(ipu_mode);
> #ifdef CONFIG_F2FS_STAT_FS
> F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_foreground_calls, cp_count);
> F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_background_calls, bg_cp_count);
> @@ -997,6 +1022,7 @@ static struct attribute *f2fs_attrs[] = {
> ATTR_LIST(max_ordered_discard),
> ATTR_LIST(pending_discard),
> ATTR_LIST(gc_mode),
> + ATTR_LIST(ipu_mode),
> ATTR_LIST(ipu_policy),
> ATTR_LIST(min_ipu_util),
> ATTR_LIST(min_fsync_blocks),
> --
> 2.25.1
next prev parent reply other threads:[~2023-02-07 18:50 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-06 14:43 [f2fs-dev] [PATCH v4 1/3] f2fs: fix to set ipu policy Yangtao Li via Linux-f2fs-devel
2023-02-06 14:43 ` Yangtao Li
2023-02-06 14:43 ` [f2fs-dev] [PATCH v4 2/3] f2fs: add missing description for ipu_policy node Yangtao Li via Linux-f2fs-devel
2023-02-06 14:43 ` Yangtao Li
2023-02-06 14:43 ` [f2fs-dev] [PATCH v4 3/3] f2fs: introduce ipu_mode sysfs node Yangtao Li via Linux-f2fs-devel
2023-02-06 14:43 ` Yangtao Li
2023-02-07 18:50 ` Jaegeuk Kim [this message]
2023-02-07 18:50 ` Jaegeuk Kim
2023-02-07 13:24 ` [f2fs-dev] [PATCH v4 1/3] f2fs: fix to set ipu policy Chao Yu
2023-02-07 13:24 ` Chao Yu
2023-02-07 18:46 ` [f2fs-dev] " Jaegeuk Kim
2023-02-07 18:46 ` Jaegeuk Kim
2023-02-07 19:00 ` [f2fs-dev] " patchwork-bot+f2fs
2023-02-07 19:00 ` patchwork-bot+f2fs
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=Y+Kdhh6b1TAl0ntT@google.com \
--to=jaegeuk@kernel.org \
--cc=frank.li@vivo.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
/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.