2014-06-19 10:02:51

by Rasmus Villemoes

[permalink] [raw]
Subject: [PATCH] mm: percpu: micro-optimize round-to-even

This change shaves a few bytes off the generated code.

Signed-off-by: Rasmus Villemoes <[email protected]>
---
mm/percpu.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/percpu.c b/mm/percpu.c
index 2ddf9a9..978097f 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -720,8 +720,7 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved)
if (unlikely(align < 2))
align = 2;

- if (unlikely(size & 1))
- size++;
+ size += size & 1;

if (unlikely(!size || size > PCPU_MIN_UNIT_SIZE || align > PAGE_SIZE)) {
WARN(true, "illegal size (%zu) or align (%zu) for "
--
1.9.2


2014-06-19 13:25:42

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] mm: percpu: micro-optimize round-to-even

On Thu, Jun 19, 2014 at 12:02:29PM +0200, Rasmus Villemoes wrote:
> This change shaves a few bytes off the generated code.
>
> Signed-off-by: Rasmus Villemoes <[email protected]>
> ---
> mm/percpu.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/mm/percpu.c b/mm/percpu.c
> index 2ddf9a9..978097f 100644
> --- a/mm/percpu.c
> +++ b/mm/percpu.c
> @@ -720,8 +720,7 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved)
> if (unlikely(align < 2))
> align = 2;
>
> - if (unlikely(size & 1))
> - size++;
> + size += size & 1;

I'm not gonna apply this. This isn't that hot a path. It's not
worthwhile to micro optimize code like this.

Thanks.

--
tejun

2014-06-19 13:27:32

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] mm: percpu: micro-optimize round-to-even

On Thu, Jun 19, 2014 at 09:25:36AM -0400, Tejun Heo wrote:
> On Thu, Jun 19, 2014 at 12:02:29PM +0200, Rasmus Villemoes wrote:
> > This change shaves a few bytes off the generated code.
> >
> > Signed-off-by: Rasmus Villemoes <[email protected]>
> > ---
> > mm/percpu.c | 3 +--
> > 1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/mm/percpu.c b/mm/percpu.c
> > index 2ddf9a9..978097f 100644
> > --- a/mm/percpu.c
> > +++ b/mm/percpu.c
> > @@ -720,8 +720,7 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved)
> > if (unlikely(align < 2))
> > align = 2;
> >
> > - if (unlikely(size & 1))
> > - size++;
> > + size += size & 1;
>
> I'm not gonna apply this. This isn't that hot a path. It's not
> worthwhile to micro optimize code like this.

Another thing is that it isn't even clear whether the micro
optimization is even actually better given that predicted branches are
extremely cheap and this one is extremely predictable. So, again,
let's please leave it to the compiler.

Thanks.

--
tejun

Subject: Re: [PATCH] mm: percpu: micro-optimize round-to-even

On Thu, 19 Jun 2014, Tejun Heo wrote:

> On Thu, Jun 19, 2014 at 12:02:29PM +0200, Rasmus Villemoes wrote:
> > This change shaves a few bytes off the generated code.
> >
> > Signed-off-by: Rasmus Villemoes <[email protected]>
> > ---
> > mm/percpu.c | 3 +--
> > 1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/mm/percpu.c b/mm/percpu.c
> > index 2ddf9a9..978097f 100644
> > --- a/mm/percpu.c
> > +++ b/mm/percpu.c
> > @@ -720,8 +720,7 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved)
> > if (unlikely(align < 2))
> > align = 2;
> >
> > - if (unlikely(size & 1))
> > - size++;
> > + size += size & 1;
>
> I'm not gonna apply this. This isn't that hot a path. It's not
> worthwhile to micro optimize code like this.

Dont we have an ALIGN() macro for this?

2014-06-19 14:35:06

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] mm: percpu: micro-optimize round-to-even

On Thu, Jun 19, 2014 at 09:29:52AM -0500, Christoph Lameter wrote:
> > > - if (unlikely(size & 1))
> > > - size++;
> > > + size += size & 1;
> >
> > I'm not gonna apply this. This isn't that hot a path. It's not
> > worthwhile to micro optimize code like this.
>
> Dont we have an ALIGN() macro for this?

Indeed, a patch?

--
tejun

Subject: Re: [PATCH] mm: percpu: micro-optimize round-to-even

On Thu, 19 Jun 2014, Tejun Heo wrote:

> Indeed, a patch?

Subject: percpu: Use ALIGN macro instead of hand coding alignment calculation

Signed-off-by: Christoph Lameter <[email protected]>

Index: linux/mm/percpu.c
===================================================================
--- linux.orig/mm/percpu.c 2014-06-04 13:43:12.541466633 -0500
+++ linux/mm/percpu.c 2014-06-19 09:56:10.458023912 -0500
@@ -720,8 +720,7 @@ static void __percpu *pcpu_alloc(size_t
if (unlikely(align < 2))
align = 2;

- if (unlikely(size & 1))
- size++;
+ size = ALIGN(size, 2);

if (unlikely(!size || size > PCPU_MIN_UNIT_SIZE || align > PAGE_SIZE)) {
WARN(true, "illegal size (%zu) or align (%zu) for "

2014-06-19 15:01:09

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] mm: percpu: micro-optimize round-to-even

On Thu, Jun 19, 2014 at 09:59:18AM -0500, Christoph Lameter wrote:
> On Thu, 19 Jun 2014, Tejun Heo wrote:
>
> > Indeed, a patch?
>
> Subject: percpu: Use ALIGN macro instead of hand coding alignment calculation
>
> Signed-off-by: Christoph Lameter <[email protected]>

Applied to percpu/for-3.17. Thanks.

--
tejun