Running Instrumented Programs

High-Level Control Via Launchers

We have created wrapper tools which launch instrumented applications, collect sample reports, and upload them to a central collection sever based on some simple configuration files. Documentation for these tools is not yet available, but should be coming along soon. Most readers should wait for that documentation rather than fretting over the environment variables described in the next section.

The launchers currently assume that the program was compiled using -fsampler-random=online. We should either remove that restriction or document it clearly here.

Low-Level Control Via Environment Variables

The instrumented executable uses a set of environment variables to control sampling and post-execution reporting. Most applications should not need to deal with these directly, and can instead use a launcher as described in the previous section.

The following environment variables influence the behavior of an instrumented executable:

$SAMPLER_EVENT_COUNTDOWNS

Used when the executable was built with -fsampler-random=offline. Set this to the name of a file containing pre-generated random countdowns. See the section called “precompute for information on a tool for building these countdown files.

If not set, countdowns are always initialized to UINT_MAX, effectively disabling sampling.

$SAMPLER_SPARSITY

Used when the executable was built with -fsampler-random=online or -fsampler-random=fixed.

For online random sampling, set this to a positive integer or floating point number: the mean number of samples skipped between samples taken. 1000, for example, will sample approximately one instrumentation point per thousand opportunities.

For fixed random sampling, set this to a positive integer: the exact number of samples skipped between samples taken. 1000, for example, will sample exactly one instrumentation point per thousand opportunities.

If not set, countdowns are always initialized to UINT_MAX, effectively disabling sampling.

$SAMPLER_SEED

Used when the executable was built with -fsampler-random=online. Seeds the random number generator. In multithreaded code, each new thread seeds its own generator using this same value.

If not set, the seed is selected at runtime using some system entropy source (e.g. /dev/urandom). In multithreaded code, each new thread seeds its own generator using a new seed drawn from this system entropy source.

$SAMPLER_REPORT_FD, $SAMPLER_FILE

If $SAMPLER_REPORT_FD is set, then it gives the number of a file descriptor into which the sampler report will be written at program exit time. This file descriptor must already be open, and will be closed once the report is complete.

$SAMPLER_FILE is set, then names a file which is to receive the report. The named file will be created if it does not already exist. If the file does already exist, any existing contents will be overwritten.

If neither of these environment variables is set, then no post-execution report will be produced. This does not disable sampling while the program runs, but it does mean that the results of the sampling will not be recorded anywhere once the program exits.

If both of these environment variables are set, then $SAMPLER_REPORT_FD is used and $SAMPLER_FILE is disregarded.

$SAMPLER_VERBOSE

If $SAMPLER_VERBOSE is set, then instrumented applications will print some additional CBI debugging information to standard error. This is intended as a tool for debugging the instrumentation infrastructure. The exact messages printed may vary from release to release.

Supporting Tools

precompute

/usr/local/lib/sampler/tools/precompute is a tool for producing pre-generated countdowns. This should be used in conjunction with the -fsampler-random=offline flag and the $SAMPLER_EVENT_COUNTDOWNS environment variable. Before starting the instrumented program:

  1. Set $SAMPLER_SEED to some random seed integer.

  2. Run precompute outfile to generate and store random countdowns in outfile.

  3. Set $SAMPLER_EVENT_COUNTDOWNS to name this same file when running the instrumented program.