MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


User Commands                                             prof(1)



NAME
     prof - display profile data

SYNOPSIS
     prof [-ChsVz] [-a  c  n  t] [-o  x] [-g  l] [-m mdata]
          [prog]


DESCRIPTION
     The prof command interprets a profile file produced  by  the
     monitor  function.  The symbol table in the object file prog
     (a.out by default) is read and  correlated  with  a  profile
     file  (mon.out  by  default).  For each external text symbol
     the percentage of time spent executing between  the  address
     of  that  symbol  and  the  address  of the next is printed,
     together with the number of times that function  was  called
     and the average number of milliseconds per call.

OPTIONS
     The mutually exclusive options -a, -c, -n, and -t  determine
     the type of sorting of the output lines:

     -a    Sort by increasing symbol address.


     -c    Sort by decreasing number of calls.


     -n    Sort lexically by symbol name.


     -t    Sort by decreasing percentage of total time (default).



     The mutually exclusive options -o and  -x specify the print-
     ing of the address of each symbol monitored:

     -o    Print each symbol address (in octal)  along  with  the
           symbol name.


     -x    Print each symbol address (in hexadecimal) along  with
           the symbol name.



     The mutually exclusive options -g and -l control the type of
     symbols  to  be  reported.  The  -l option must be used with
     care; it applies the time spent in a static function to  the
     preceding (in memory) global function, instead of giving the
     static function a separate  entry  in  the  report.  If  all



SunOS 5.11           Last change: 8 Feb 2007                    1






User Commands                                             prof(1)



     static  functions  are properly located, this feature can be
     very useful. If not, the resulting report may be misleading.


     Assume that  A and B are global functions and only  A  calls
     static function  S. If  S is located immediately after  A in
     the source code (that is, if  S is properly located),  then,
     with  the   -l  option,  the  amount of time spent in  A can
     easily be determined, including the time spent  in   S.  If,
     however,  both   A and B call  S, then, if the  -l option is
     used, the report will be misleading; the time  spent  during
     B's call to  S will be attributed to  A, making it appear as
     if more time had been spent in  A than really had.  In  this
     case, function  S cannot be properly located.

     -g    List the time spent in static  (non-global)  functions
           separately.  The -g option function is the opposite of
           the  -l function.


     -l    Suppress printing statically declared  functions.   If
           this option is given, time spent executing in a static
           function is allocated to the closest  global  function
           loaded  before  the static function in the executable.
           This option is the default.  It  is  the  opposite  of
           the  -g function and should be used with care.



     The following options may be used in any combination:

     -C          Demangle C] symbol names before  printing  them
                 out.


     -h          Suppress the heading  normally  printed  on  the
                 report.  This  is  useful if the report is to be
                 processed further.


     -m mdata    Use file mdata instead of mon.out as  the  input
                 profile file.


     -s          Print a summary of  several  of  the  monitoring
                 parameters  and statistics on the standard error
                 output.


     -V          Print  prof version information on the  standard
                 error output.




SunOS 5.11           Last change: 8 Feb 2007                    2






User Commands                                             prof(1)



     -z          Include all symbols in the profile  range,  even
                 if associated with zero number of calls and zero
                 time.



     A program creates a profile file if it has been link  edited
     with the -p option of cc(1B). This option to the cc(1B) com-
     mand arranges for calls to monitor at the beginning and  end
     of execution. It is the call to monitor at the end of execu-
     tion that causes the system to write  a  profile  file.  The
     number  of  calls  to a function is tallied if the -p option
     was used when the file containing the function was compiled.


     A single function may be split into subfunctions for profil-
     ing by means of the  MARK macro. See  prof(5).

ENVIRONMENT VARIABLES
     PROFDIR    The name of the file created by a  profiled  pro-
                gram  is  controlled  by the environment variable
                PROFDIR. If PROFDIR is not set,  mon.out is  pro-
                duced  in  the directory current when the program
                terminates.          If           PROFDIR=string,
                string/pid.progname  is produced, where  progname
                consists  of   argv[0]  with  any   path   prefix
                removed,  and  pid  is the process ID of the pro-
                gram.  If PROFDIR is set, but null, no  profiling
                output is produced.


FILES
     mon.out    default profile file


     a.out      default namelist (object) file


ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     Availability                 SUNWbtool                   
    






SunOS 5.11           Last change: 8 Feb 2007                    3






User Commands                                             prof(1)



SEE ALSO
     cc(1B),   gprof(1),   exit(2),    pcsample(2),    profil(2),
     malloc(3C),   malloc(3MALOC),  monitor(3C),  attributes(5),
     prof(5)

NOTES
     If the executable image has been stripped and does not  have
     the  .symtab  symbol  table,  gprof reads the global dynamic
     symbol tables .dynsym and .SUNWldynsym,  if  present.   The
     symbols  in  the  dynamic  symbol tables are a subset of the
     symbols that are found in .symtab. The .dynsym symbol  table
     contains  the  global  symbols  used  by the runtime linker.
     .SUNWldynsym augments the information in .dynsym with local
     function  symbols.  In  the  case where .dynsym is found and
     .SUNWldynsym is not, only the  information for  the  global
     symbols is available. Without local symbols, the behavior is
     as described for the  -a option.


     The times reported in successive  identical  runs  may  show
     variances  because  of  varying cache-hit ratios that result
     from sharing the cache with other processes. Even if a  pro-
     gram  seems  to  be  the  only one using the machine, hidden
     background or asynchronous processes may blur the  data.  In
     rare cases, the clock ticks initiating recording of the pro-
     gram counter may beat with loops in a program, grossly  dis-
     torting  measurements.  Call counts are always recorded pre-
     cisely, however.


     Only programs that call   exit  or  return  from   main  are
     guaranteed to produce a profile file, unless a final call to
     monitor is explicitly coded.


     The times for static functions are attributed to the preced-
     ing  external text symbol if the -g option is not used. How-
     ever, the call counts for the preceding function  are  still
     correct;  that  is,  the static function call counts are not
     added to the call counts of the external function.


     If more than one of the options  -t, -c,  -a,   and   -n  is
     specified, the last option specified is used and the user is
     warned.


     LDLIBRARYPATH must not contain  /usr/lib  as  a  component
     when compiling a program for profiling. If   LDLIBRARYPATH
     contains /usr/lib, the program will not be linked  correctly
     with  the  profiling  versions  of  the  system libraries in
     /usr/lib/libp. See gprof(1).



SunOS 5.11           Last change: 8 Feb 2007                    4






User Commands                                             prof(1)



     Functions such as  mcount(), mcount(), moncontrol(),  mon-
     control(),  monitor(), and monitor() may appear in the prof
     report.  These functions are part of the profiling implemen-
     tation and thus account for some amount of the runtime over-
     head.  Since these functions are not present  in  an  unpro-
     filed  application,  time  accumulated  and  call counts for
     these functions may be ignored when evaluating  the  perfor-
     mance of an application.

  64-bit profiling
     64-bit profiling may be used freely with dynamically  linked
     executables,  and profiling information is collected for the
     shared objects if the objects are  compiled  for  profiling.
     Care  must be applied to interpret the profile output, since
     it is possible for symbols from different shared objects  to
     have  the same name. If duplicate names are seen in the pro-
     file output, it is better to use the  -s  (summary)  option,
     which prefixes a module id before each symbol that is dupli-
     cated. The symbols can then be mapped to appropriate modules
     by looking at the modules information in the summary.


     If the -a option is used with a dynamically  linked  execut-
     able, the sorting occurs on a per-shared-object basis. Since
     there is a high likelihood of symbols from  differed  shared
     objects  to  have  the same value, this results in an output
     that is more understandable. A blank line separates the sym-
     bols  from  different  shared  objects,  if the -s option is
     given.

  32-bit profiling
     32-bit profiling may be used with dynamically linked execut-
     ables, but care must be applied. In 32-bit profiling, shared
     objects cannot be profiled with  prof.  Thus,  when  a  pro-
     filed, dynamically linked program is executed, only the main
     portion of the image is sampled. This means  that  all  time
     spent  outside  of the main object, that is, time spent in a
     shared object, will not be included in the profile  summary;
     the total time reported for the program may be less than the
     total time used by the program.


     Because  the  time  spent  in  a  shared  object  cannot  be
     accounted for, the use of shared objects should be minimized
     whenever a program is profiled with  prof. If  desired,  the
     program  should  be  linked  to  the  profiled  version of a
     library (or to the standard archive version if no  profiling
     version  is  available), instead of the shared object to get
     profile information on the functions of a library.  Versions
     of profiled libraries may be supplied with the system in the
     /usr/lib/libp directory. Refer to compiler driver documenta-
     tion on profiling.



SunOS 5.11           Last change: 8 Feb 2007                    5






User Commands                                             prof(1)



     Consider an extreme case.  A  profiled  program  dynamically
     linked with the shared C library spends 100 units of time in
     some  libc routine, say,   malloc().  Suppose   malloc()  is
     called  only  from  routine  B and B consumes only 1 unit of
     time. Suppose further that routine  A consumes 10  units  of
     time,  more  than  any  other routine in the main (profiled)
     portion of the image. In this case,  prof will conclude that
     most  of the time is being spent in  A and almost no time is
     being spent in  B. From this it will be almost impossible to
     tell that the greatest improvement can be made by looking at
     routine  B and not routine  A. The value of the profiler  in
     this  case  is  severely  degraded;  the  solution is to use
     archives as much as possible for profiling.










































SunOS 5.11           Last change: 8 Feb 2007                    6



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™