PROF(1) PROF(1)
NAME
prof, tprof, kprof - display profiling data
SYNOPSIS
prof [ -dr ] program profile
flambe program profile
tprof pid
kprof kernel kpdata
DESCRIPTION
Prof interprets files produced automatically by programs
loaded using the -p option of 2l(1) or other loader. The
symbol table in the named program file is read and corre-
lated with the profile file. For each symbol, the percent-
age 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 program, 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 sec-
onds, 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. Normally recursive calls are com-
pressed 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 256k entries, may be controlled by setting
the environment variable profsize before running program. If
the buffer fills, subsequent 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)
Page 1 Plan 9 (printed 11/9/25)
PROF(1) PROF(1)
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 available.
Flambe presents an interactive flame graph using information
gathered by prof. The graph is presented as a series of
rows, each row representing a level in the call stack. Each
row is split up among all the siblings of the respective
call stack level, their width representative of the portion
of their parent's time they occupied. Hovering the mouse
over any block shows its full name, the total time spent in
the function, and the number of calls made to it in the top
left hand side of the window. Clicking a block reroots the
the graph with the selected block as the base. The escape
key can be used to return to the real root of the graph.
Tprof is similar to prof, but is intended for profiling mul-
tiprocess 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 kernel 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
Page 2 Plan 9 (printed 11/9/25)
PROF(1) PROF(1)
SEE ALSO
2l(1), exec(2), kprof(3)
Page 3 Plan 9 (printed 11/9/25)