Messages in this thread | | | From | Linus Torvalds <> | Date | Fri, 22 Jun 2012 11:52:43 -0700 | Subject | Re: [GIT PULL] perf fixes |
| |
On Fri, Jun 22, 2012 at 11:38 AM, Hagen Paul Pfeifer <hagen@jauu.net> wrote: >> >>Because that mcount thing is expensive as hell, if people haven't >>noticed (and I'm not talking about just the call instruction that I >>think we can stub out - it changes code generation in other ways too). >>And it looks like distros enable it by default, which annoys my >>performance-optimizing soul deeply. > > Isn't it stubed out already? Already replaced by nops at boot time by > ftrace_code_disable() and friends!? But yes, there may be spots where the > additional mcount() call avoid optimization.
So even stubbed out, it's quite noticeable. The call causes the function prologue to change quite a bit.
That's actually especially true with newer versions of gcc that *finally* seem to have done the "don't always generate the full prologue if some case doesn't need it" optimization. So functions that have early-out conditions (quite common) will exit before even having done the prologue, and without doing the whole frame pointer setup etc.
Except if mcount generation is on. Then gcc will always do the prologue and frame pointer setup before doing the mcount, because mcount wants it.
So it really isn't just the extra call instruction.
I may be more sensitive to this than most, because I look at profiles and the function prologue just looks very ugly with the call mcount thing. Ugh.
Linus
| |