Basic instructions to use ctracer:

1. Install dwarves, if you are not that excited about building it I'm
   keeping rpms for Fedora Core 6 here:

   http://oops.ghostprotocols.net:81/acme/dwarves/rpm/

   The .src.rpm is there in case you want to rebuild it for another
   rpm based distro.

   Since fedora 9 you just have to run:

   yum install dwarves

2. build the kernel with CONFIG_DEBUG_INFO=y, i.e. gcc -g, that will
   insert the DWARF info needed by all the pahole tools, ctracer, etc, or
   just install the kernel-debuginfo rpm package on FC6, other distros
   have it with a different name, its just the kernel built with debug
   info.

3. Assuming you installed the kernel-debuginfo package, to run ctracer
   on your workstation, just do the following steps:

mkdir foo
cd foo
ln -s /usr/share/dwarves/runtime/* .
make CLASS=sock # to trace struct sock methods, this one is safe, try others
                # and tell me your horror (or success :-) ) story.

(kbuild gurus, send suggestions to simplify this procedure! :-) )

4. load the resulting module:

insmod ctracer.ko

dmesg will show how many probes were successfully installed

5. Do some related activity (ssh, in the above example should do)

6. Make sure debugfs is mounted

[root@filo ~]# mount -t debugfs none_debugfs /sys/kernel/debug/

7. Get the log:

cat /sys/kernel/debug/ctracer0 > /tmp/ctracer.log

8. Generate the callgraph!

make callgraph

9. rmmod ctracer

Change the shipped Makefile accordingly to build a module for qemu or another test
machine.

The relay transport is mostly ready and will be included in the upcoming changesets.
