From: Jeff Garzik <jeff@garzik.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Phillip Susi <psusi@cfl.rr.com>,
Alex Volkov <avcp-lkmail@usa.net>,
"'Linux Kernel Mailing List'" <linux-kernel@vger.kernel.org>
Subject: Re: aio is unlikely
Date: Fri, 18 May 2007 18:37:26 -0400 [thread overview]
Message-ID: <464E2AA6.3080402@garzik.org> (raw)
In-Reply-To: <20070518151259.319e09da.akpm@linux-foundation.org>
Andrew Morton wrote:
> On Fri, 18 May 2007 17:54:32 -0400
> Phillip Susi <psusi@cfl.rr.com> wrote:
>
>> Andrew Morton wrote:
>>> Yes, if you agree with Jeff's original point.
>>>
>>> But I don't, actually. Sure, on some machines+workloads, AIO is more
>>> common than sync IO. But I expect that when we sum across all the
>>> machines+workloads in the world, sync IO is more common and is hence the
>>> case we should optimise for.
>>>
>>> That's assuming that the unlikely() actually does something.
>> But as Jeff said, that's not what unlikely is for. It should only be
>> used when it is unlikely for everybody, all the time, because when it is
>> right, it helps rather little, but when it is wrong, it hurts a lot.
>
> It does? Tell us more.
It is difficult to quantify either way. The details are both
CPU-specific and compiler-specific. The best information can be culled
from the gcc list archives, which is where I obtained my knowledge on
the subject (which is now ~2 years old).
Under the hood, likely() and unlikely() are implemented as percentage
predictions. likely() is implemented in the kernel as a 99-100% chance
of success, and unlikely() is implemented as a 0-1% chance of success.
As such, for our purposes, likely() and unlikely() should only be used
when a situation is [likely | unlikely] across all runtime
configurations. So if you mark a branch unlikely() when it is hit often
by 1% of your users, that is an incorrect usage.
The effects are probably most dramatic on older CPUs. Repeatedly
hitting an unlikely() can cause a pipeline stall on every single access.
Branch delay slots are filled improperly, with obvious implications.
But on modern hardware, I would /guess/ that the effect of repeatedly
hitting an unlikely() would be mitigated by smarter branch prediction.
We really need a GCC expert to answer this question in any more detail.
Jeff
next prev parent reply other threads:[~2007-05-18 22:38 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200705092101.l49L1CF1023363@hera.kernel.org>
2007-05-09 22:06 ` aio is unlikely Jeff Garzik
2007-05-09 22:18 ` Andrew Morton
2007-05-09 22:37 ` Jeff Garzik
2007-05-18 20:49 ` Alex Volkov
2007-05-18 21:06 ` Andrew Morton
2007-05-18 21:11 ` Jeff Garzik
2007-05-18 21:54 ` Phillip Susi
2007-05-18 22:12 ` Andrew Morton
2007-05-18 22:37 ` Jeff Garzik [this message]
2007-05-19 3:43 ` Nick Piggin
2007-05-19 3:50 ` Jeff Garzik
2007-05-18 21:30 ` Bernd Eckenfels
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=464E2AA6.3080402@garzik.org \
--to=jeff@garzik.org \
--cc=akpm@linux-foundation.org \
--cc=avcp-lkmail@usa.net \
--cc=linux-kernel@vger.kernel.org \
--cc=psusi@cfl.rr.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.