LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Andi Kleen <andi@firstfloor.org>
To: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Andi Kleen <andi@firstfloor.org>,
	Arjan van de Ven <arjan@infradead.org>, Willy Tarreau <w@1wt.eu>,
	Roel Kluin <12o3l@tiscali.nl>,
	geoffrey.levand@am.sony.com, linuxppc-dev@ozlabs.org,
	cbe-oss-dev@ozlabs.org, lkml <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/3] Fix Unlikely(x) == y
Date: Tue, 19 Feb 2008 10:25:37 +0100	[thread overview]
Message-ID: <20080219092537.GA6485@one.firstfloor.org> (raw)
In-Reply-To: <200802191333.53607.nickpiggin@yahoo.com.au>

On Tue, Feb 19, 2008 at 01:33:53PM +1100, Nick Piggin wrote:
> On Tuesday 19 February 2008 01:39, Andi Kleen wrote:
> > Arjan van de Ven <arjan@infradead.org> writes:
> > > you have more faith in the authors knowledge of how his code actually
> > > behaves than I think is warranted  :)
> >
> > iirc there was a mm patch some time ago to keep track of the actual
> > unlikely values at runtime and it showed indeed some wrong ones. But the
> > far majority of them are probably correct.
> >
> > > Or faith in that he knows what "unlikely" means.
> > > I should write docs about this; but unlikely() means:
> > > 1) It happens less than 0.01% of the cases.
> > > 2) The compiler couldn't have figured this out by itself
> > >    (NULL pointer checks are compiler done already, same for some other
> > > conditions) 3) It's a hot codepath where shaving 0.5 cycles (less even on
> > > x86) matters (and the author is ok with taking a 500 cycles hit if he's
> > > wrong)
> >
> > One more thing unlikely() does is to move the unlikely code out of line.
> > So it should conserve some icache in critical functions, which might
> > well be worth some more cycles (don't have numbers though).
> 
> I actually once measured context switching performance in the scheduler,
> and removing the  unlikely hint for testing RT tasks IIRC gave about 5%
> performance drop.

OT: what benchmarks did you use for that? I had a change some time
ago to the CFS scheduler to avoid unpredicted indirect calls for
the common case, but I wasn't able to benchmark a difference with the usual 
suspect benchmark (lmbench). Since it increased code size by
a few bytes it was rejected then.

> 
> This was on a P4 which is very different from more modern CPUs both in
> terms of branch performance characteristics, 

> and icache characteristics.

Hmm, the P4 the trace cache actually should not care about inline
code that is not executed.

> However, the P4's branch predictor is pretty good, and it should easily

I think it depends on the generation. Prescott class branch
prediction should be much better than the earlier ones.

> Actually one thing I don't like about gcc is that I think it still emits
> cmovs for likely/unlikely branches, 

That's -Os.

> which is silly (the gcc developers

It depends on the CPU. e.g. on K8 and P6 using CMOV if possible
makes sense. P4 doesn't like it though.

> the quite good numbers that cold CPU predictors can attain. However
> for really performance critical code (or really "never" executed
> code), then I think it is OK to have the hints and not have to rely
> on gcc heuristics.

But only when the explicit hints are different from what the implicit
branch predictors would predict anyways. And if you look at the
heuristics that is not often the case...

Also I really think that mm patch that measured unlikely efficiency
should be dug out and merged to mainline and them regularly rechecked.

-Andi

  parent reply	other threads:[~2008-02-19  9:26 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-16 16:08 Roel Kluin
2008-02-16 17:25 ` Arjan van de Ven
2008-02-16 17:33   ` Willy Tarreau
2008-02-16 17:42     ` Arjan van de Ven
2008-02-16 17:58       ` Willy Tarreau
2008-02-16 18:29         ` Arjan van de Ven
2008-02-17  9:45         ` [Cbe-oss-dev] " Andrew Pinski
2008-02-17 10:08           ` Willy Tarreau
2008-02-16 18:31       ` Geoff Levand
2008-02-16 18:39         ` Arjan van de Ven
2008-02-17 11:50           ` Michael Ellerman
2008-02-18 13:56             ` Adrian Bunk
2008-02-18 14:01               ` Geert Uytterhoeven
2008-02-18 14:13                 ` Adrian Bunk
2008-02-18 21:46                   ` Michael Ellerman
2008-02-19  7:43                     ` Adrian Bunk
2008-02-18 19:22                 ` [Cbe-oss-dev] " Andrew Pinski
2008-02-18 14:27               ` David Howells
2008-02-18 14:59                 ` Roel Kluin
2008-02-18 18:11                 ` Valdis.Kletnieks
2008-02-18 18:33                   ` Arjan van de Ven
2008-02-18 14:39       ` Andi Kleen
2008-02-19  2:33         ` Nick Piggin
2008-02-19  2:40           ` Arjan van de Ven
2008-02-19  4:41             ` Nick Piggin
2008-02-19  5:58           ` Willy Tarreau
2008-02-19  6:20             ` Nick Piggin
2008-02-19  9:28             ` Andi Kleen
2008-02-20  7:32               ` Willy Tarreau
2008-02-19  9:25           ` Andi Kleen [this message]
2008-02-19  9:46             ` Nick Piggin
2008-02-19  9:57               ` Andi Kleen
2008-02-19 22:25                 ` Nick Piggin
2008-02-16 18:41 ` Geoff Levand

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=20080219092537.GA6485@one.firstfloor.org \
    --to=andi@firstfloor.org \
    --cc=12o3l@tiscali.nl \
    --cc=arjan@infradead.org \
    --cc=cbe-oss-dev@ozlabs.org \
    --cc=geoffrey.levand@am.sony.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=nickpiggin@yahoo.com.au \
    --cc=w@1wt.eu \
    --subject='Re: [PATCH 1/3] Fix Unlikely(x) == y' \
    /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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).