168 lines
3.5 KiB
Plaintext
168 lines
3.5 KiB
Plaintext
.TH PROF 1
|
|
.SH NAME
|
|
prof, tprof, kprof \- display profiling data
|
|
.SH SYNOPSIS
|
|
.B prof
|
|
[
|
|
.B -dr
|
|
]
|
|
[
|
|
.I program
|
|
]
|
|
[
|
|
.I profile
|
|
]
|
|
.PP
|
|
.B tprof
|
|
.I pid
|
|
.PP
|
|
.B kprof
|
|
.I kernel
|
|
.I kpdata
|
|
.SH DESCRIPTION
|
|
.I Prof
|
|
interprets files produced automatically by programs loaded using the
|
|
.B -p
|
|
option of
|
|
.IR 2l (1)
|
|
or other loader.
|
|
The symbol table in the
|
|
named program file
|
|
.RL ( 2.out
|
|
etc., according to
|
|
.BR $objtype ,
|
|
by default)
|
|
is read and correlated with the
|
|
profile file
|
|
.RL ( prof.out
|
|
by default).
|
|
For each symbol, the percentage
|
|
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.
|
|
.PP
|
|
Under option
|
|
.BR -d ,
|
|
.I 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
|
|
.IP
|
|
.EX
|
|
symbol:time/ncall
|
|
.EE
|
|
.LP
|
|
where
|
|
.I symbol
|
|
is the entry point of the call,
|
|
.I time
|
|
is in milliseconds,
|
|
and
|
|
.I ncall
|
|
is the number of times that entry point was called at that
|
|
point in the call graph. If
|
|
.I ncall
|
|
is one, the
|
|
.B /ncall
|
|
is elided.
|
|
Normally recursive calls are compressed to keep the output brief;
|
|
option
|
|
.B -r
|
|
prints the full call graph.
|
|
.PP
|
|
The size of the buffer
|
|
in
|
|
.I program
|
|
used to hold the profiling
|
|
data, by default 2000 entries,
|
|
may be controlled by setting the environment variable
|
|
.B profsize
|
|
before running
|
|
.IR program .
|
|
If the buffer fills, subsequent function calls may not be recorded.
|
|
.PP
|
|
The profiling code provided by the linker initializes itself to profile the current pid,
|
|
producing a file called
|
|
.B prof.\f2pid\fP.
|
|
If a process forks, only the parent will continue to be profiled. Forked children
|
|
can cause themselves to be profile by calling
|
|
.IP
|
|
.EX
|
|
prof(fn, arg, entries, what)
|
|
.EE
|
|
.LP
|
|
which causes the function \f2fn\fP(\f2arg\fP) to be profiled. When \f2fn\fP
|
|
returns
|
|
.B prof.\f2pid\fP
|
|
is produced for the current process pid.
|
|
.PP
|
|
The environment variable
|
|
.B proftype
|
|
can be set to one of
|
|
.BR user ,
|
|
.BR kernel ,
|
|
.BR elapsed ,
|
|
or
|
|
.BR 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.
|
|
.PP
|
|
.I Tprof
|
|
is similar to
|
|
.IR prof ,
|
|
but is intended for profiling multiprocess programs.
|
|
It uses the
|
|
.BI /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
|
|
.I tprof
|
|
profiling for a given process,
|
|
.IP
|
|
.EX
|
|
echo profile > /proc/\f2pid\f1/ctl
|
|
.EE
|
|
.LP
|
|
and then, after the program has run for a while, execute
|
|
.IP
|
|
.EX
|
|
tprof \f2pid\f1
|
|
.EE
|
|
.LP
|
|
Since the data collected for
|
|
.I tprof
|
|
is based on interrupt-time sampling of the program counter,
|
|
.I tprof
|
|
has no
|
|
.B -d
|
|
or
|
|
.B -r
|
|
options.
|
|
.PP
|
|
.I Kprof
|
|
is similar to
|
|
.IR prof ,
|
|
but presents the data accumulated by the kernel
|
|
profiling device,
|
|
.IR kprof (3) .
|
|
The symbol table file, that of the operating system kernel,
|
|
and the data file, typically
|
|
.BR /dev/kpdata ,
|
|
must be provided.
|
|
.I Kprof
|
|
has no options and cannot present dynamic data.
|
|
.SH SOURCE
|
|
.B /sys/src/cmd/prof.c
|
|
.br
|
|
.B /sys/src/cmd/kprof.c
|
|
.SH SEE ALSO
|
|
.IR 2l (1),
|
|
.IR exec (2),
|
|
.IR kprof (3)
|