PROF(1)PROF(1)NAME
prof, tprof, kprof - display profiling data
SYNOPSISprof [ -dr ] [ program ] [ profile ]
tprof pid
kprof kernel kpdata
DESCRIPTION
Prof interprets files produced automatically by programs loaded using
the -p option of 8l(1) or other loader. The symbol table in the named
program file etc., according to $objtype, by default) is read and cor‐
related with the profile file by default). For each symbol, the per‐
centage of time (in seconds) spent executing between that symbol and
the next is printed (in decreasing order), together with the time spent
there and the number of times that routine was called.
Under option -d, prof prints the dynamic call graph of the target pro‐
gram, annotating the calls with the time spent in each routine and
those it calls, recursively. The output is indented two spaces for
each call, and is formatted as
symbol:time/ncall
where symbol is the entry point of the call, time is in milliseconds,
and ncall is the number of times that entry point was called at that
point in the call graph. If ncall is one, the /ncall is elided. Nor‐
mally recursive calls are compressed to keep the output brief; option
-r prints the full call graph.
The size of the buffer in program used to hold the profiling data, by
default 2000 entries, may be controlled by setting the environment
variable profsize before running program. If the buffer fills, subse‐
quent function calls may not be recorded.
The profiling code provided by the linker initializes itself to profile
the current pid, producing a file called prof.pid. If a process forks,
only the parent will continue to be profiled. Forked children can
cause themselves to be profile by calling
prof(fn, arg, entries, what)
which causes the function fn(arg) to be profiled. When fn returns
prof.pid is produced for the current process pid.
The environment variable proftype can be set to one of user, kernel,
elapsed, or sample, to profile time measured spent in user mode, time
spent in user+kernel mode, or elapsed time, using the cycle counter, or
the time in user mode using the kernel's HZ clock. The cycle counter
is currently only available on modern PCs and on the PowerPC. Default
profiling measures user time, using the cycle counter if it is avail‐
able.
Tprof is similar to prof, but is intended for profiling multiprocess
programs. It uses the /proc/pid/profile file to collect instruction
frequency counts for the text image associated with the process, for
all processes that share that text. It must be run while the program
is still active, since the data is stored with the running program. To
enable tprof profiling for a given process,
echo profile > /proc/pid/ctl
and then, after the program has run for a while, execute
tprof pid
Since the data collected for tprof is based on interrupt-time sampling
of the program counter, tprof has no -d or -r options.
Kprof is similar to prof, but presents the data accumulated by the ker‐
nel profiling device, kprof(3). The symbol table file, that of the
operating system kernel, and the data file, typically /dev/kpdata, must
be provided. Kprof has no options and cannot present dynamic data.
SOURCE
/sys/src/cmd/prof.c
/sys/src/cmd/kprof.c
SEE ALSO8l(1), exec(2), kprof(3)PROF(1)