2021-11-09 12:18:22

by Jaegeuk Kim

[permalink] [raw]
Subject: [PATCH] f2fs: provide a way to attach HIPRI for Direct IO

This patch adds a way to attach HIPRI by expanding the existing sysfs's
data_io_flag. User can measure IO performance by enabling it.

Signed-off-by: Jaegeuk Kim <[email protected]>
---
Documentation/ABI/testing/sysfs-fs-f2fs | 16 +++++++++-------
fs/f2fs/data.c | 2 ++
fs/f2fs/f2fs.h | 3 +++
3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index b268e3e18b4a..ac52e1c6bcbc 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -369,13 +369,15 @@ Contact: "Jaegeuk Kim" <[email protected]>
Description: Give a way to attach REQ_META|FUA to data writes
given temperature-based bits. Now the bits indicate:

- +-------------------+-------------------+
- | REQ_META | REQ_FUA |
- +------+------+-----+------+------+-----+
- | 5 | 4 | 3 | 2 | 1 | 0 |
- +------+------+-----+------+------+-----+
- | Cold | Warm | Hot | Cold | Warm | Hot |
- +------+------+-----+------+------+-----+
+ +------------+-------------------+-------------------+
+ | HIPRI_DIO | REQ_META | REQ_FUA |
+ +------------+------+------+-----+------+------+-----+
+ | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+ +------------+------+------+-----+------+------+-----+
+ | All | Cold | Warm | Hot | Cold | Warm | Hot |
+ +------------+------+------+-----+------+------+-----+
+
+ Note that, HIPRI_DIO bit is only for direct IO path.

What: /sys/fs/f2fs/<disk>/node_io_flag
Date: June 2020
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 9f754aaef558..faa40aca2848 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -3707,6 +3707,8 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
if (do_opu)
down_read(&fi->i_gc_rwsem[READ]);
}
+ if (sbi->data_io_flag & HIPRI_DIO)
+ iocb->ki_flags |= IOCB_HIPRI;

err = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
iter, rw == WRITE ? get_data_block_dio_write :
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index ce9fc9f13000..094f1e8ff82b 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1557,6 +1557,9 @@ struct decompress_io_ctx {
#define MAX_COMPRESS_LOG_SIZE 8
#define MAX_COMPRESS_WINDOW_SIZE(log_size) ((PAGE_SIZE) << (log_size))

+/* HIPRI for direct IO used in sysfs/data_io_flag */
+#define HIPRI_DIO (1 << 6)
+
struct f2fs_sb_info {
struct super_block *sb; /* pointer to VFS super block */
struct proc_dir_entry *s_proc; /* proc entry */
--
2.34.0.rc0.344.g81b53c2807-goog


2021-11-09 23:55:07

by Chao Yu

[permalink] [raw]
Subject: Re: [f2fs-dev] [PATCH] f2fs: provide a way to attach HIPRI for Direct IO

On 2021/11/9 10:13, Jaegeuk Kim wrote:
> This patch adds a way to attach HIPRI by expanding the existing sysfs's
> data_io_flag. User can measure IO performance by enabling it.
>
> Signed-off-by: Jaegeuk Kim <[email protected]>

Reviewed-by: Chao Yu <[email protected]>

Thanks,

2021-11-10 00:07:16

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] f2fs: provide a way to attach HIPRI for Direct IO

On 11/9/21 9:39 AM, Christoph Hellwig wrote:
> On Mon, Nov 08, 2021 at 06:13:36PM -0800, Jaegeuk Kim wrote:
>> This patch adds a way to attach HIPRI by expanding the existing sysfs's
>> data_io_flag. User can measure IO performance by enabling it.
>
> NAK. This flag should only be used when explicitly specified by
> the submitter of the I/O.

Yes, this cannot be set in the middle for a multitude of reasons. I wonder
if we should add a comment to that effect near the definition of it.

--
Jens Axboe

2021-11-10 00:07:56

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] f2fs: provide a way to attach HIPRI for Direct IO

On Mon, Nov 08, 2021 at 06:13:36PM -0800, Jaegeuk Kim wrote:
> This patch adds a way to attach HIPRI by expanding the existing sysfs's
> data_io_flag. User can measure IO performance by enabling it.

NAK. This flag should only be used when explicitly specified by
the submitter of the I/O.

>
> Signed-off-by: Jaegeuk Kim <[email protected]>
> ---
> Documentation/ABI/testing/sysfs-fs-f2fs | 16 +++++++++-------
> fs/f2fs/data.c | 2 ++
> fs/f2fs/f2fs.h | 3 +++
> 3 files changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> index b268e3e18b4a..ac52e1c6bcbc 100644
> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> @@ -369,13 +369,15 @@ Contact: "Jaegeuk Kim" <[email protected]>
> Description: Give a way to attach REQ_META|FUA to data writes
> given temperature-based bits. Now the bits indicate:
>
> - +-------------------+-------------------+
> - | REQ_META | REQ_FUA |
> - +------+------+-----+------+------+-----+
> - | 5 | 4 | 3 | 2 | 1 | 0 |
> - +------+------+-----+------+------+-----+
> - | Cold | Warm | Hot | Cold | Warm | Hot |
> - +------+------+-----+------+------+-----+
> + +------------+-------------------+-------------------+
> + | HIPRI_DIO | REQ_META | REQ_FUA |
> + +------------+------+------+-----+------+------+-----+
> + | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
> + +------------+------+------+-----+------+------+-----+
> + | All | Cold | Warm | Hot | Cold | Warm | Hot |
> + +------------+------+------+-----+------+------+-----+
> +
> + Note that, HIPRI_DIO bit is only for direct IO path.
>
> What: /sys/fs/f2fs/<disk>/node_io_flag
> Date: June 2020
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 9f754aaef558..faa40aca2848 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -3707,6 +3707,8 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
> if (do_opu)
> down_read(&fi->i_gc_rwsem[READ]);
> }
> + if (sbi->data_io_flag & HIPRI_DIO)
> + iocb->ki_flags |= IOCB_HIPRI;
>
> err = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
> iter, rw == WRITE ? get_data_block_dio_write :
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index ce9fc9f13000..094f1e8ff82b 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -1557,6 +1557,9 @@ struct decompress_io_ctx {
> #define MAX_COMPRESS_LOG_SIZE 8
> #define MAX_COMPRESS_WINDOW_SIZE(log_size) ((PAGE_SIZE) << (log_size))
>
> +/* HIPRI for direct IO used in sysfs/data_io_flag */
> +#define HIPRI_DIO (1 << 6)
> +
> struct f2fs_sb_info {
> struct super_block *sb; /* pointer to VFS super block */
> struct proc_dir_entry *s_proc; /* proc entry */
> --
> 2.34.0.rc0.344.g81b53c2807-goog
>
---end quoted text---

2021-11-10 19:09:00

by Jaegeuk Kim

[permalink] [raw]
Subject: Re: [PATCH] f2fs: provide a way to attach HIPRI for Direct IO

On 11/09, Jens Axboe wrote:
> On 11/9/21 9:39 AM, Christoph Hellwig wrote:
> > On Mon, Nov 08, 2021 at 06:13:36PM -0800, Jaegeuk Kim wrote:
> >> This patch adds a way to attach HIPRI by expanding the existing sysfs's
> >> data_io_flag. User can measure IO performance by enabling it.
> >
> > NAK. This flag should only be used when explicitly specified by
> > the submitter of the I/O.
>
> Yes, this cannot be set in the middle for a multitude of reasons. I wonder
> if we should add a comment to that effect near the definition of it.

Not surprising. I was wondering we can add this for testing purpose only.
Btw, is there a reasonable way that filesystem can use IO polling?

>
> --
> Jens Axboe

2021-11-11 00:26:44

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] f2fs: provide a way to attach HIPRI for Direct IO

On 11/10/21 12:08 PM, Jaegeuk Kim wrote:
> On 11/09, Jens Axboe wrote:
>> On 11/9/21 9:39 AM, Christoph Hellwig wrote:
>>> On Mon, Nov 08, 2021 at 06:13:36PM -0800, Jaegeuk Kim wrote:
>>>> This patch adds a way to attach HIPRI by expanding the existing sysfs's
>>>> data_io_flag. User can measure IO performance by enabling it.
>>>
>>> NAK. This flag should only be used when explicitly specified by
>>> the submitter of the I/O.
>>
>> Yes, this cannot be set in the middle for a multitude of reasons. I wonder
>> if we should add a comment to that effect near the definition of it.
>
> Not surprising. I was wondering we can add this for testing purpose only.
> Btw, is there a reasonable way that filesystem can use IO polling?

Whether an IO is polled or not belongs to the issuer of the IO, as it
comes with certain obligations like "I will actively poll for the
completion of this request", and it incurs certain restrictions in the
block layer in terms of whether or not you can ever sleep for requests.

You could certainly use in in an fs, but only IFF you are the original
issuer of the request, which then also means that you are the one that
needs to poll for completion of it.

It's not a drive-by "let's set this flag to speed things up" kind of
flag, there are a lot more moving parts than that.

I don't think it will be useful for you.

--
Jens Axboe