On 2015-11-09 at 15:41 "'Davide Libenzi' via Akaros" <[email protected]> wrote: > > > + for (;; dst++, src++) { > > > + int error = __get_user(dst, src, 1); > > > > > > - static_assert(ULIM % PGSIZE == 0 && ULIM != 0); // prevent > > wrap-around > > > + if (unlikely(error)) > > > + return error; > > > + if (unlikely(!*dst)) > > > + break; > > > > How unlikely is this? It'll happen once per strcpy, right? Is that > > going to be a TLB miss or something based on what the compiler does > > to make something unlikely? This example gets at the tradeoff of > > using likely/unlikely. > > > > If AVG string length is, say, 8, then that is more unlikely than > likely. So the question is, in a tight loop like that, out of 8 > times, would you prefer to be kicked in the ankle 7 times out of 8, > or 1 out of 8? ☺
It depends how hard the kicks are. If the 7 kicks are light taps, and the 1 kick is really painful, then I don't mind the 7. That's my understanding of the tradeoffs with these branch hints: due to the techniques used by the compiler, it may be that taking the unlikely branch is disproportionately more painful than not taking the branch without a hint, such that the inflection point for using unlikely is not necessarily 51%. Anyway, that's why I don't like the use of likely/unlikely except in provably better cases (e.g. as in assert()) or with actual performance numbers. Barret -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
