2020-01-07 02:09:11

by Jaegeuk Kim

[permalink] [raw]
Subject: [PATCH] f2fs: add a way to turn off ipu bio cache

Setting 0x40 in /sys/fs/f2fs/dev/ipu_policy gives a way to turn off
bio cache, which is useufl to check whether block layer using hardware
encryption engine merges IOs correctly.

Signed-off-by: Jaegeuk Kim <[email protected]>
---
Documentation/filesystems/f2fs.txt | 1 +
fs/f2fs/segment.c | 2 +-
fs/f2fs/segment.h | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
index 41b5aa94b30f..cd93bcc34726 100644
--- a/Documentation/filesystems/f2fs.txt
+++ b/Documentation/filesystems/f2fs.txt
@@ -335,6 +335,7 @@ Files in /sys/fs/f2fs/<devname>
0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
0x04: F2FS_IPU_UTIL, 0x08: F2FS_IPU_SSR_UTIL,
0x10: F2FS_IPU_FSYNC.
+ 0x40: F2FS_IPU_NOCACHE disables bio caches.

min_ipu_util This parameter controls the threshold to trigger
in-place-updates. The number indicates percentage
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index a9519532c029..311fe4937f6a 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -3289,7 +3289,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)

stat_inc_inplace_blocks(fio->sbi);

- if (fio->bio)
+ if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
err = f2fs_merge_page_bio(fio);
else
err = f2fs_submit_page_bio(fio);
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index a1b3951367cd..02e620470eef 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -623,6 +623,7 @@ enum {
F2FS_IPU_SSR_UTIL,
F2FS_IPU_FSYNC,
F2FS_IPU_ASYNC,
+ F2FS_IPU_NOCACHE,
};

static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
--
2.24.0.525.g8f36a354ae-goog


2020-01-08 08:01:40

by Chao Yu

[permalink] [raw]
Subject: Re: [f2fs-dev] [PATCH] f2fs: add a way to turn off ipu bio cache

On 2020/1/7 10:07, Jaegeuk Kim wrote:
> Setting 0x40 in /sys/fs/f2fs/dev/ipu_policy gives a way to turn off
> bio cache, which is useufl to check whether block layer using hardware
> encryption engine merges IOs correctly.
>
> Signed-off-by: Jaegeuk Kim <[email protected]>
> ---
> Documentation/filesystems/f2fs.txt | 1 +
> fs/f2fs/segment.c | 2 +-
> fs/f2fs/segment.h | 1 +
> 3 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
> index 41b5aa94b30f..cd93bcc34726 100644
> --- a/Documentation/filesystems/f2fs.txt
> +++ b/Documentation/filesystems/f2fs.txt
> @@ -335,6 +335,7 @@ Files in /sys/fs/f2fs/<devname>
> 0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
> 0x04: F2FS_IPU_UTIL, 0x08: F2FS_IPU_SSR_UTIL,
> 0x10: F2FS_IPU_FSYNC.

. -> ,

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

Thanks,

> + 0x40: F2FS_IPU_NOCACHE disables bio caches.
>
> min_ipu_util This parameter controls the threshold to trigger
> in-place-updates. The number indicates percentage
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index a9519532c029..311fe4937f6a 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -3289,7 +3289,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
>
> stat_inc_inplace_blocks(fio->sbi);
>
> - if (fio->bio)
> + if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
> err = f2fs_merge_page_bio(fio);
> else
> err = f2fs_submit_page_bio(fio);
> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
> index a1b3951367cd..02e620470eef 100644
> --- a/fs/f2fs/segment.h
> +++ b/fs/f2fs/segment.h
> @@ -623,6 +623,7 @@ enum {
> F2FS_IPU_SSR_UTIL,
> F2FS_IPU_FSYNC,
> F2FS_IPU_ASYNC,
> + F2FS_IPU_NOCACHE,
> };
>
> static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
>

2020-01-08 13:57:37

by Jaegeuk Kim

[permalink] [raw]
Subject: Re: [f2fs-dev] [PATCH] f2fs: add a way to turn off ipu bio cache

On 01/08, Chao Yu wrote:
> On 2020/1/7 10:07, Jaegeuk Kim wrote:
> > Setting 0x40 in /sys/fs/f2fs/dev/ipu_policy gives a way to turn off
> > bio cache, which is useufl to check whether block layer using hardware
> > encryption engine merges IOs correctly.
> >
> > Signed-off-by: Jaegeuk Kim <[email protected]>
> > ---
> > Documentation/filesystems/f2fs.txt | 1 +
> > fs/f2fs/segment.c | 2 +-
> > fs/f2fs/segment.h | 1 +
> > 3 files changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
> > index 41b5aa94b30f..cd93bcc34726 100644
> > --- a/Documentation/filesystems/f2fs.txt
> > +++ b/Documentation/filesystems/f2fs.txt
> > @@ -335,6 +335,7 @@ Files in /sys/fs/f2fs/<devname>
> > 0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
> > 0x04: F2FS_IPU_UTIL, 0x08: F2FS_IPU_SSR_UTIL,
> > 0x10: F2FS_IPU_FSYNC.
>
> . -> ,

Actually, we can't do it. I revised it a bit instead.

>
> Reviewed-by: Chao Yu <[email protected]>
>
> Thanks,
>
> > + 0x40: F2FS_IPU_NOCACHE disables bio caches.
> >
> > min_ipu_util This parameter controls the threshold to trigger
> > in-place-updates. The number indicates percentage
> > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> > index a9519532c029..311fe4937f6a 100644
> > --- a/fs/f2fs/segment.c
> > +++ b/fs/f2fs/segment.c
> > @@ -3289,7 +3289,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
> >
> > stat_inc_inplace_blocks(fio->sbi);
> >
> > - if (fio->bio)
> > + if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
> > err = f2fs_merge_page_bio(fio);
> > else
> > err = f2fs_submit_page_bio(fio);
> > diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
> > index a1b3951367cd..02e620470eef 100644
> > --- a/fs/f2fs/segment.h
> > +++ b/fs/f2fs/segment.h
> > @@ -623,6 +623,7 @@ enum {
> > F2FS_IPU_SSR_UTIL,
> > F2FS_IPU_FSYNC,
> > F2FS_IPU_ASYNC,
> > + F2FS_IPU_NOCACHE,
> > };
> >
> > static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
> >