Finding a profiler that works, damnit
Posted Mar 23, 2010 23:19 UTC (Tue) by
foom (subscriber, #14868)
In reply to:
unikernels and unified projects by mingo
Parent article:
KVM, QEMU, and kernel project management
> - working call-graph profiling
Really?
Over the last week, I've tried just about every profiler I can get my hands on, in hopes of finding
ONE that
works properly on x86-64. And I did find one. Just one. And it doesn't do system profiling. If you
know some secret way of making perf actually work, do tell.
gprof: Old standby -- I used to use this all the time back in the day... Unfortunately,
only
works on staticly linked programs. Not only does it not report functions in shared libraries, it
simply
IGNORES any samples where the PC was outside the staticly linked area entirely. So, pretty much
useless.
sprof: Doesn't even work at all. Not even a little bit. Completely useless, waste of disk
space.
oprofile: Works fine unless you want callgraphs. Then you need to recompile
everything with -
fno-omit-frame-pointers. Then it works okay. Also, can get *really* confused when you have
chroots,
which is rather annoying. Not particularly practical, due to recompilation requirement. Also found
no way
to convert to callgrind format (except a hacky script which only does flat profiles)
perf: I upgraded to kernel 2.6.32, and installed this, cause I heard it was the great new
thing....
but it *also* only seems to output proper callgraphs when programs (and all libraries...) are
compiled with
-fno-omit-frame-pointer. Furthermore, even when having done that, I can't make heads or tails
of the
callgraph output report. It is almost 100% unintelligible. It looks nothing like any callgraph
profile I've
ever seen before. I also found no way to convert to output to callgrind format. Bonus fail:
ungoogleable name.
valgrind callgrind: Best so far. Has a *GREAT* UI (kcachegrind), and outputs a reliable
profile.
Downside: program runs 100 times slower. (ARGH!).
google-perftools libprofile: Seems to actually work. Hooray! Bonus: Outputs callgrind
format, so I
can use kcachegrind. Only downside: no system profiling.
(
Log in to post comments)