glenda.party
term% ls -F
term% pwd
$home/manuals/9front/1/prof
term% cat index.txt
PROF(1)                     General Commands Manual                    PROF(1)



NAME
       prof, tprof, kprof - display profiling data

SYNOPSIS
       prof [ -dr ] [ 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 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 op‐
       erating  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 ALSO
       2l(1), exec(2), kprof(3)



                                                                       PROF(1)