|| ||Ingo Molnar <mingo-AT-elte.hu> |
|| ||"H. Peter Anvin" <hpa-AT-zytor.com> |
|| ||Re: [PATCH 00/10] jump label: introduce very_[un]likely + cleanups +
|| ||Wed, 22 Feb 2012 07:50:16 +0100|
|| ||Jason Baron <jbaron-AT-redhat.com>, a.p.zijlstra-AT-chello.nl,
Linus Torvalds <torvalds-AT-linux-foundation.org>|
|| ||Article, Thread
* H. Peter Anvin <email@example.com> wrote:
> On 02/21/2012 12:02 PM, Jason Baron wrote:
> > Hi,
> > Renames 'static_branch()' -> very_unlikely(), hopefully, to be more intuitive
> > as to what jump labels is about. I'm also introducing 'very_likely()', as
> > the analogue to very_unlikely(). Patch is against the -tip perf branch.
> Erk... I'm not happy about this. very_unlikely() makes it
> sound like it operates like unlikely(), which really is not
> the case. There is a huge difference in mechanism here as
> well as usage.
There are three issues why I insisted for Jason to rename these
nonsensically 'jump_label' patterned methods before I send any
more jump label commits to Linus:
The pattern has spread beyond the niche of tracing internals and
nobody seemed to have any second thoughts about the actual
readability of these names. That is a major FAIL and it was my
For those *reading* the code, the similarity of
very_likely()/very_unlikely() to the likely()/unlikely()
patterns is *INTENTIONAL*, as functionally the branch site
itself is very similar to a real branch!
Secondly, for those *writing* such code, you cannot just
'accidentally' change a unlikely() to a very_unlikely() and get
something you didn't ask for ...
It is the modification site that is dissimilar (and which is
slow in the jump label case) - and that is very apparently
dissimilar that it takes some effort to change these flags. If
you write such code you have to add the whole jump label
mechanism to it, which makes it very apparent what is happening
and makes the costs very apparent as well.
Thirdly, the fact that it's a 'jump label' is an
*implementational* detail. On some architectures very_unlikely()
indeed maps to unlikely(), because jump labels have not been
implemented yet. On some architectures very_unlikely() is
implemented via jump labels. On some future architectures it
might be implemented via JIT-ing the target function. (I made
the last one up)
So it makes sense to decouple 'jump labels' from the actual high
level naming of this API.
Anyway, I've Cc:-ed Linus and Andrew, I plan to take the renames
but they can NAK me if doing that is stupid.
to post comments)