2018-11-18 12:03:57

by Yafang Shao

[permalink] [raw]
Subject: [PATCH] mm/filemap.c: minor optimization in write_iter file operation

This little adjustment on bitwise operation could make the code a little
faster.
As write_iter is used in lots of critical path, so this code change is
useful for performance.

Signed-off-by: Yafang Shao <[email protected]>
---
mm/filemap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mm/filemap.c b/mm/filemap.c
index 81adec8..a65056ea 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2881,7 +2881,8 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
if (iocb->ki_flags & IOCB_APPEND)
iocb->ki_pos = i_size_read(inode);

- if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT))
+ if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) ==
+ IOCB_NOWAIT)
return -EINVAL;

count = iov_iter_count(from);
--
1.8.3.1



2018-11-18 12:14:52

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] mm/filemap.c: minor optimization in write_iter file operation

On Sun, Nov 18, 2018 at 08:02:18PM +0800, Yafang Shao wrote:
> This little adjustment on bitwise operation could make the code a little
> faster.
> As write_iter is used in lots of critical path, so this code change is
> useful for performance.

Did you check the before/after code generation with this patch applied?

$ diff -u before.S after.S
--- before.S 2018-11-18 07:11:48.031096768 -0500
+++ after.S 2018-11-18 07:11:36.883069103 -0500
@@ -1,5 +1,5 @@

-before.o: file format elf32-i386
+after.o: file format elf32-i386


Disassembly of section .text:

with gcc 8.2.0, I see no difference, indicating that the compiler already
makes this optimisation.

2018-11-18 15:05:22

by Yafang Shao

[permalink] [raw]
Subject: Re: [PATCH] mm/filemap.c: minor optimization in write_iter file operation

On Sun, Nov 18, 2018 at 8:13 PM Matthew Wilcox <[email protected]> wrote:
>
> On Sun, Nov 18, 2018 at 08:02:18PM +0800, Yafang Shao wrote:
> > This little adjustment on bitwise operation could make the code a little
> > faster.
> > As write_iter is used in lots of critical path, so this code change is
> > useful for performance.
>
> Did you check the before/after code generation with this patch applied?
>

Yes, I did.
My oompiler is gcc-4.8.5, a litte old, and with CONFIG_CC_OPTIMIZE_FOR_SIZE on.
The output file is differrent.

> $ diff -u before.S after.S
> --- before.S 2018-11-18 07:11:48.031096768 -0500
> +++ after.S 2018-11-18 07:11:36.883069103 -0500
> @@ -1,5 +1,5 @@
>
> -before.o: file format elf32-i386
> +after.o: file format elf32-i386
>
>
> Disassembly of section .text:
>
> with gcc 8.2.0, I see no difference, indicating that the compiler already
> makes this optimisation.

Could pls. try set CONFIG_CC_OPTIMIZE_FOR_SIZE on and then compare them again ?

Thanks
Yafang

2018-11-19 01:03:53

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] mm/filemap.c: minor optimization in write_iter file operation

On Sun, Nov 18, 2018 at 11:02:19PM +0800, Yafang Shao wrote:
> On Sun, Nov 18, 2018 at 8:13 PM Matthew Wilcox <[email protected]> wrote:
> > Did you check the before/after code generation with this patch applied?
>
> Yes, I did.
> My oompiler is gcc-4.8.5, a litte old, and with CONFIG_CC_OPTIMIZE_FOR_SIZE on.
> > with gcc 8.2.0, I see no difference, indicating that the compiler already
> > makes this optimisation.
>
> Could pls. try set CONFIG_CC_OPTIMIZE_FOR_SIZE on and then compare them again ?

Actually it was already on:

# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y

I happened to build it in my build-tiny output tree.