| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | 
# Note that you must do all the following as root (I believe).
# Although the program to be profiled can be run by anybody.
# start the profiler
opcontrol --stop ; opcontrol --reset ; opcontrol --callgraph=5 --start
# now run the program(s) to be profiled
# stop the profiler and dump results to .. um .. some file somewhere
opcontrol --stop ; opcontrol --dump
# get total cost
opreport --merge=tgid -x \
    /home/sewardj/VgTRUNK/atomk/Inst/lib/valgrind/helgrind-amd64-linux \
    | less
# produce a flat profile
opreport --merge=tgid --symbols -x \
    /home/sewardj/VgTRUNK/atomk/Inst/lib/valgrind/helgrind-amd64-linux \
    | less
# produce a profile w/ callgraph
opreport --merge=tgid --callgraph -x \
    /home/sewardj/VgTRUNK/atomk/Inst/lib/valgrind/helgrind-amd64-linux \
    | less
# print annotated source
opannotate --merge=tgid --source --include-file=libhb_core.c | less
#### notes.
1. on amd64, need to build V with -fno-omit-frame-pointer, else the
   w/ callgraph profiles are useless.  (oprofile doesn't do CFI based
   stack unwinding, I guess).  Add -fno-omit-frame-pointer to
   AM_CFLAGS_BASE in Makefile.flags.am, and rebuild from clean.
2. even at the best of times the callgraph profiles seem pretty
   flaky to me.
3. Even oprofile 0.9.4 (the latest) on amd64-linux doesn't work
   for callgraph profiling.  There is however a patch that
   makes it work.  See 
http://sourceforge.net/tracker/index.php?func=detail&aid=1685267&group_id=16191&atid=116191
   for details.  Even then it sometimes fails at the "opcontrol
   --dump" phase, complaining that the daemon died (or something like
   that).  But apart from that, it seems usable.
 |