9. Lackey: a very simple profiler

To use this tool, you must specify --tool=lackey on the Valgrind command line.

Lackey is a simple Valgrind tool that does some basic program measurement. It adds quite a lot of simple instrumentation to the program's code. It is primarily intended to be of use as an example tool.

It measures and reports:

  1. The number of calls to _dl_runtime_resolve(), the function in glibc's dynamic linker that resolves function references to shared objects.

    You can change the name of the function with command line option --fnname=<name>.

  2. The number of conditional branches encountered and the number and proportion of those taken.

  3. Statistics about the amount of work done during the execution of the client program:

    1. The number of basic blocks entered and completed by the program. Note that due to optimisations done by the JIT, this is not really an accurate value.

    2. The number of guest (x86, amd64, ppc, etc.) instructions and IR statements executed. IR is Valgrind's RISC-like intermediate representation via which all instrumentation is done.

    3. Ratios between some of these counts.

    4. When command line option --detailed-counts=yes is specified, a table is printed with counts of loads, stores and ALU operations for various types of operands.

      The types are identified by their IR name ("I1" ... "I128", "F32", "F64", and "V128").

  4. The exit code of the client program.

Note that Lackey runs quite slowly, especially when --detailed-counts=yes is specified. It could be made to run a lot faster by doing a slightly more sophisticated job of the instrumentation, but that would undermine its role as a simple example tool. Hence we have chosen not to do so.