From: Jaegeuk Kim <jaegeuk@kernel.org>
To: liujinbao1 <jinbaoliu365@gmail.com>
Cc: liujinbao1 <liujinbao1@xiaomi.com>,
linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH v3] f2fs: sysfs: support gc_io_aware
Date: Wed, 7 Feb 2024 16:21:20 -0800 [thread overview]
Message-ID: <ZcQegCzMgIFjgtGW@google.com> (raw)
In-Reply-To: <3b2852b3d404ecbb53d9affa781d12d0e9ea3951.1707022643.git.liujinbao1@xiaomi.com>
On 02/04, liujinbao1 wrote:
> From: liujinbao1 <liujinbao1@xiaomi.com>
>
> Currently, IO can only be ignored when GC_URGENT_HIGH is set,
> and the default algorithm used for GC_URGENT_HIGH is greedy.
> It gives a way to enable/disable IO aware feature for background
> gc, so that we can tune background gc more precisely. e.g.
> force to disable IO aware and choose more suitable algorithm
> if there are large number of dirty segments.
>
> Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
> ---
> Documentation/ABI/testing/sysfs-fs-f2fs | 6 ++++++
> fs/f2fs/gc.c | 3 ++-
> fs/f2fs/gc.h | 1 +
> fs/f2fs/sysfs.c | 9 +++++++++
> 4 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> index 36c3cb547901..47f02fa471fe 100644
> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> @@ -16,6 +16,12 @@ Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
> Description: Controls the default sleep time for gc_thread. Time
> is in milliseconds.
>
> +What: /sys/fs/f2fs/<disk>/gc_io_aware
> +Date: January 2024
> +Contact: "Jinbao Liu" <liujinbao1@xiaomi.com>
> +Description: It controls to enable/disable IO aware feature for background gc.
> ++ By default, the value is 1 which indicates IO aware is on.
> +
> What: /sys/fs/f2fs/<disk>/gc_idle
> Date: July 2013
> Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index 309da3d0faff..0b75d37acc63 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -109,7 +109,7 @@ static int gc_thread_func(void *data)
> goto next;
> }
>
> - if (!is_idle(sbi, GC_TIME)) {
> + if (gc_th->io_aware && !is_idle(sbi, GC_TIME)) {
This voids GC_URGENT_HIGH, which looks wrong?
> increase_sleep_time(gc_th, &wait_ms);
> f2fs_up_write(&sbi->gc_lock);
> stat_io_skip_bggc_count(sbi);
> @@ -182,6 +182,7 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
> gc_th->min_sleep_time = DEF_GC_THREAD_MIN_SLEEP_TIME;
> gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME;
> gc_th->no_gc_sleep_time = DEF_GC_THREAD_NOGC_SLEEP_TIME;
> + gc_th->io_aware = true;
>
> gc_th->gc_wake = false;
>
> diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h
> index 28a00942802c..51d6ad26b76a 100644
> --- a/fs/f2fs/gc.h
> +++ b/fs/f2fs/gc.h
> @@ -41,6 +41,7 @@ struct f2fs_gc_kthread {
> unsigned int min_sleep_time;
> unsigned int max_sleep_time;
> unsigned int no_gc_sleep_time;
> + bool io_aware;
>
> /* for changing gc mode */
> bool gc_wake;
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 417fae96890f..e8d5667cfddd 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -516,6 +516,13 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
> return count;
> }
>
> + if (!strcmp(a->attr.name, "gc_io_aware")) {
> + if (t > 1)
> + return -EINVAL;
> + *ui = t ? true : false;
> + return count;
> + }
> +
> if (!strcmp(a->attr.name, "migration_granularity")) {
> if (t == 0 || t > sbi->segs_per_sec)
> return -EINVAL;
> @@ -906,6 +913,7 @@ GC_THREAD_RW_ATTR(gc_urgent_sleep_time, urgent_sleep_time);
> GC_THREAD_RW_ATTR(gc_min_sleep_time, min_sleep_time);
> GC_THREAD_RW_ATTR(gc_max_sleep_time, max_sleep_time);
> GC_THREAD_RW_ATTR(gc_no_gc_sleep_time, no_gc_sleep_time);
> +GC_THREAD_RW_ATTR(gc_io_aware, io_aware);
>
> /* SM_INFO ATTR */
> SM_INFO_RW_ATTR(reclaim_segments, rec_prefree_segments);
> @@ -1061,6 +1069,7 @@ static struct attribute *f2fs_attrs[] = {
> ATTR_LIST(gc_min_sleep_time),
> ATTR_LIST(gc_max_sleep_time),
> ATTR_LIST(gc_no_gc_sleep_time),
> + ATTR_LIST(gc_io_aware),
> ATTR_LIST(gc_idle),
> ATTR_LIST(gc_urgent),
> ATTR_LIST(reclaim_segments),
> --
> 2.43.0
_______________________________________________
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: liujinbao1 <jinbaoliu365@gmail.com>
Cc: chao@kernel.org, linux-f2fs-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org, liujinbao1 <liujinbao1@xiaomi.com>
Subject: Re: [PATCH v3] f2fs: sysfs: support gc_io_aware
Date: Wed, 7 Feb 2024 16:21:20 -0800 [thread overview]
Message-ID: <ZcQegCzMgIFjgtGW@google.com> (raw)
In-Reply-To: <3b2852b3d404ecbb53d9affa781d12d0e9ea3951.1707022643.git.liujinbao1@xiaomi.com>
On 02/04, liujinbao1 wrote:
> From: liujinbao1 <liujinbao1@xiaomi.com>
>
> Currently, IO can only be ignored when GC_URGENT_HIGH is set,
> and the default algorithm used for GC_URGENT_HIGH is greedy.
> It gives a way to enable/disable IO aware feature for background
> gc, so that we can tune background gc more precisely. e.g.
> force to disable IO aware and choose more suitable algorithm
> if there are large number of dirty segments.
>
> Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
> ---
> Documentation/ABI/testing/sysfs-fs-f2fs | 6 ++++++
> fs/f2fs/gc.c | 3 ++-
> fs/f2fs/gc.h | 1 +
> fs/f2fs/sysfs.c | 9 +++++++++
> 4 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> index 36c3cb547901..47f02fa471fe 100644
> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> @@ -16,6 +16,12 @@ Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
> Description: Controls the default sleep time for gc_thread. Time
> is in milliseconds.
>
> +What: /sys/fs/f2fs/<disk>/gc_io_aware
> +Date: January 2024
> +Contact: "Jinbao Liu" <liujinbao1@xiaomi.com>
> +Description: It controls to enable/disable IO aware feature for background gc.
> ++ By default, the value is 1 which indicates IO aware is on.
> +
> What: /sys/fs/f2fs/<disk>/gc_idle
> Date: July 2013
> Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index 309da3d0faff..0b75d37acc63 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -109,7 +109,7 @@ static int gc_thread_func(void *data)
> goto next;
> }
>
> - if (!is_idle(sbi, GC_TIME)) {
> + if (gc_th->io_aware && !is_idle(sbi, GC_TIME)) {
This voids GC_URGENT_HIGH, which looks wrong?
> increase_sleep_time(gc_th, &wait_ms);
> f2fs_up_write(&sbi->gc_lock);
> stat_io_skip_bggc_count(sbi);
> @@ -182,6 +182,7 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
> gc_th->min_sleep_time = DEF_GC_THREAD_MIN_SLEEP_TIME;
> gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME;
> gc_th->no_gc_sleep_time = DEF_GC_THREAD_NOGC_SLEEP_TIME;
> + gc_th->io_aware = true;
>
> gc_th->gc_wake = false;
>
> diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h
> index 28a00942802c..51d6ad26b76a 100644
> --- a/fs/f2fs/gc.h
> +++ b/fs/f2fs/gc.h
> @@ -41,6 +41,7 @@ struct f2fs_gc_kthread {
> unsigned int min_sleep_time;
> unsigned int max_sleep_time;
> unsigned int no_gc_sleep_time;
> + bool io_aware;
>
> /* for changing gc mode */
> bool gc_wake;
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 417fae96890f..e8d5667cfddd 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -516,6 +516,13 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
> return count;
> }
>
> + if (!strcmp(a->attr.name, "gc_io_aware")) {
> + if (t > 1)
> + return -EINVAL;
> + *ui = t ? true : false;
> + return count;
> + }
> +
> if (!strcmp(a->attr.name, "migration_granularity")) {
> if (t == 0 || t > sbi->segs_per_sec)
> return -EINVAL;
> @@ -906,6 +913,7 @@ GC_THREAD_RW_ATTR(gc_urgent_sleep_time, urgent_sleep_time);
> GC_THREAD_RW_ATTR(gc_min_sleep_time, min_sleep_time);
> GC_THREAD_RW_ATTR(gc_max_sleep_time, max_sleep_time);
> GC_THREAD_RW_ATTR(gc_no_gc_sleep_time, no_gc_sleep_time);
> +GC_THREAD_RW_ATTR(gc_io_aware, io_aware);
>
> /* SM_INFO ATTR */
> SM_INFO_RW_ATTR(reclaim_segments, rec_prefree_segments);
> @@ -1061,6 +1069,7 @@ static struct attribute *f2fs_attrs[] = {
> ATTR_LIST(gc_min_sleep_time),
> ATTR_LIST(gc_max_sleep_time),
> ATTR_LIST(gc_no_gc_sleep_time),
> + ATTR_LIST(gc_io_aware),
> ATTR_LIST(gc_idle),
> ATTR_LIST(gc_urgent),
> ATTR_LIST(reclaim_segments),
> --
> 2.43.0
next prev parent reply other threads:[~2024-02-08 0:21 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-04 4:58 [f2fs-dev] [PATCH v3] f2fs: sysfs: support gc_io_aware liujinbao1
2024-02-04 4:58 ` liujinbao1
2024-02-04 9:57 ` [f2fs-dev] " Chao Yu
2024-02-04 9:57 ` Chao Yu
2024-02-08 0:21 ` Jaegeuk Kim [this message]
2024-02-08 0:21 ` Jaegeuk Kim
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=ZcQegCzMgIFjgtGW@google.com \
--to=jaegeuk@kernel.org \
--cc=jinbaoliu365@gmail.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=liujinbao1@xiaomi.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 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.