cvs commit: src/usr.bin/gprof printgprof.c

Bruce Evans bde at FreeBSD.org
Fri Oct 7 03:59:42 PDT 2005


bde         2005-10-07 10:59:41 UTC

  FreeBSD src repository

  Modified files:
    usr.bin/gprof        printgprof.c 
  Log:
  Improve printing of self times in the flat profile for functions that
  appear to be never called:
  
  (1) If a function is never called according to its call count but it
      must have been called because its child time is nonzero, then print
      it in the flat profile.  Previously, if its call count was zero
      then we only printed it in the flat profile if its self time was
      nonzero.
  
  (2) If a function has a zero call count but has a nonzero self or child
      time, then print its total self time in the self time per call
      column as a percentage of the total (self + child) time.  It is
      not possible to print the times per call in this case because the
      call count is zero.  Previously, this was handled by leaving both
      per-call columns blank.  The self time is printed in another column
      but there was no way to recover the total time.
  
  (1) partially fixes the case of the "never called" function main() and
  prepares for (2) to apply to main() and other functions.  Profiling
  of main() was lost in the conversion from a.out to ELF, so main()'s
  call count has always been zero for many years; then in the common
  case where main() is a tiny function, it gets no profiling ticks, so
  main() was completely lost in the flat profile.
  
  (2) improves mainly cases like kernel threads.  Most kernel threads
  appear to be never called because they are always started before
  userland can run to turn on profiling.  As for main(), the fact that
  they are called is not very interesting and their callers are
  uninteresting, but their relative self time is interesting since they
  are long-running.
  
  Almost always printing percentages in the per-call columns would be
  more useful than almost always printing 0.0ms.  0.1ms is now a long
  time, so only very large functions take that long per call.  The accuracy
  per call can approach 1-10 nsec provided programs are run for about
  100000 times as long as is necessary to get this accuracy with high
  resolution kernel profiling.
  
  Revision  Changes    Path
  1.13      +5 -1      src/usr.bin/gprof/printgprof.c


More information about the cvs-src mailing list