Hi, On Tue, 2009-11-10 at 08:43 -0800, David Daney wrote: [...] > >>> +ifndef CONFIG_FUNCTION_TRACER > >>> cflags-y := -ffunction-sections > >>> +else > >>> +cflags-y := -mlong-calls > >>> +endif > >>> cflags-y += $(call cc-option, -mno-check-zero-division) > >>> > >> That doesn't make sense to me. Modules are already compiled with > >> -mlong-calls. The only time you would need the entire kernel compiled > >> with -mlong-calls is if the tracer were in a module. The logic here > >> doesn't seem to reflect that. > > > > Yes, I knew the module have gotten the -mlong-calls, Here we just want > > to use -mlong-calls for the whole kernel, and then we get the same > > _mcount stuff in the whole kernel, at last, we can use the same > > scripts/recordmcount.pl and ftrace_make_nop & ftrace_make_call for the > > dynamic ftracer. > > > > -mlong-calls really degrades performance. I have seen things like 6% > drop in network packet forwarding rates with -mlong-calls. > so much drop? seems only two instructions added for it: lui, addi. from this view point, I think the -fno-omit-frame-pointer(add, sd, move...) will also bring with much drop. It's time to remove them? -mlong-calls, -fno-omit-frame-pointer. > It would be better to fix all the tools so that they could handle both > -mlong-calls and -mno-long-calls code. > It's totally possible, will try to make it work later. I just wanted the stuff simple, but if it really brings us with much drop, it's time to fix it. Regards, Wu Zhangjin