On 09/11/2018 16.16, Andy Lutomirski wrote: > On Thu, Nov 8, 2018 at 11:28 PM Ingo Molnar <mi...@kernel.org> wrote: >> >> >> All other usecases are bonus, but it would certainly be interesting to >> investigate the impact of using these APIs for tracing: that too is a >> feature enabled everywhere but utilized only by a small fraction of Linux >> users - so literally every single cycle or instruction saved or hot-path >> shortened is a major win. > > For tracing, we'd want static_call_set_to_nop() or something like that, right? >
Hm. IIUC, when gcc sees static_call(key)(...), it has to generate code to put the right values in %rdi, %rsi etc.. Even if the function is void (*)(void), gcc would still need to shuffle things around (either spill and reload, or move %rdi to some callee saved register). So if the static_call is noop'ed out most of the time, that seems like a net loss? With an unlikely static_key, gcc can do all the parameter setup and reloading in an out-of-line chunk of code. static calls seems like a quite useful concept, but only/mostly if _some_ function needs to be called at that spot. Aside: there should be some compile-time check that static_call_set_to_nop can only be used if the return type is void. Rasmus