Go to main content

man pages section 3: Extended Library Functions, Volume 1

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

cprof (3erl)

Name

cprof - mal runtime performance impact.

Synopsis

Please see following description for synopsis

Description

cprof(3)                   Erlang Module Definition                   cprof(3)



NAME
       cprof  - A simple Call Count Profiling Tool using breakpoints for mini-
       mal runtime performance impact.

DESCRIPTION
       The cprof module is used to profile a program  to  find  out  how  many
       times different functions are called. Breakpoints similar to local call
       trace, but containing a counter, are used to minimise  runtime  perfor-
       mance impact.

       Since  breakpoints are used there is no need for special compilation of
       any module to be profiled. For now these breakpoints can only be set on
       BEAM code so BIFs cannot be call count traced.

       The size of the call counters is the host machine word size. One bit is
       used when pausing the counter, so  the  maximum  counter  value  for  a
       32-bit host is 2147483647.

       The profiling result is delivered as a term containing a sorted list of
       entries, one per module. Each module entry contains a  sorted  list  of
       functions. The sorting order in both cases is of decreasing call count.

       Call count tracing is very lightweight compared to other forms of trac-
       ing since no trace message has to be generated. Some measurements indi-
       cates performance degradation in the vicinity of 10 percent.

EXPORTS
       analyse() ->
                  {AllCallCount :: integer() >= 0,
                   ModAnalysisList :: mod_analysis_list()}

       analyse(Limit) ->
                  {AllCallCount :: integer() >= 0,
                   ModAnalysisList :: mod_analysis_list()}

       analyse(Mod) -> ModAnalysis :: mod_analysis()

       analyse(Mod, Limit) -> ModAnalysis :: mod_analysis()

              Types:

                 Mod = module()
                 Limit = integer() >= 0
                 mod_analysis_list() = [mod_analysis()]
                 mod_analysis() =
                     {Mod :: module(),
                      ModCallCount :: integer() >= 0,
                      FuncAnalysisList :: func_analysis_list()}
                 func_analysis_list() =
                     [{mfa(), FuncCallCount :: integer() >= 0}]

              Collects  and  analyses  the call counters presently in the node
              for either module Mod, or for all modules (except cprof itself),
              and returns:

                FuncAnalysisList:
                  A  list  of  tuples,  one  for each function in a module, in
                  decreasing FuncCallCount order.

                ModCallCount:
                  The sum of FuncCallCount values for all functions in  module
                  Mod.

                AllCallCount:
                  The  sum of ModCallCount values for all modules concerned in
                  ModAnalysisList.

                ModAnalysisList:
                  A list of tuples, one  for  each  module  except  cprof,  in
                  decreasing ModCallCount order.

              If call counters are still running while analyse/0..2 is execut-
              ing, you might get an inconsistent result. This happens  if  the
              process  executing analyse/0..2 gets scheduled out so some other
              process can increment the  counters  that  are  being  analysed,
              Calling pause() before analysing takes care of the problem.

              If  the Mod argument is given, the result contains a ModAnalysis
              tuple for module Mod only, otherwise  the  result  contains  one
              ModAnalysis    tuple    for    all    modules    returned   from
              code:all_loaded() except cprof itself.

              All functions with a FuncCallCount lower than Limit are excluded
              from  FuncAnalysisList. They are still included in ModCallCount,
              though. The default value for Limit is 1.

       pause() -> integer() >= 0

              Pause call count tracing for all functions in  all  modules  and
              stop  it  for all functions in modules to be loaded. This is the
              same as (pause({'_','_','_'})+stop({on_load})).

              See also pause/1..3 below.

       pause(FuncSpec) -> integer() >= 0

       pause(Mod, Func) -> integer() >= 0

       pause(Mod, Func, Arity) -> integer() >= 0

              Types:

                 Mod = module()
                 Func = atom()
                 Arity = arity()

              Pause call counters for matching functions in matching  modules.
              The  FS  argument  can  be used to specify the first argument to
              erlang:trace_pattern/3.

              The call counters for all matching functions that has  got  call
              count breakpoints are paused at their current count.

              Return the number of matching functions that can have call count
              breakpoints, the same as  start/0..3  with  the  same  arguments
              would have returned.

       restart() -> integer() >= 0

       restart(FuncSpec) -> integer() >= 0

       restart(Mod, Func) -> integer() >= 0

       restart(Mod, Func, Arity) -> integer() >= 0

              Types:

                 Mod = module()
                 Func = atom()
                 Arity = arity()

              Restart  call  counters  for  the matching functions in matching
              modules that are call count traced. The FS argument can be  used
              to specify the first argument to erlang:trace_pattern/3.

              The  call  counters for all matching functions that has got call
              count breakpoints are set to zero and running.

              Return the number of matching functions that can have call count
              breakpoints,  the  same  as  start/0..3  with the same arguments
              would have returned.

       start() -> integer() >= 0

              Start call count tracing for all functions in all  modules,  and
              also for all functions in modules to be loaded. This is the same
              as (start({'_','_','_'})+start({on_load})).

              See also start/1..3 below.

       start(FuncSpec) -> integer() >= 0

       start(Mod, Func) -> integer() >= 0

       start(Mod, Func, Arity) -> integer() >= 0

              Types:

                 Mod = module()
                 Func = atom()
                 Arity = arity()

              Start call count tracing for matching functions in matching mod-
              ules.  The FS argument can be used to specify the first argument
              to erlang:trace_pattern/3, for example on_load.

              Set call count breakpoints on the matching functions that has no
              call  count  breakpoints. Call counters are set to zero and run-
              ning for all matching functions.

              Return the number of matching functions that has got call  count
              breakpoints.

       stop() -> integer() >= 0

              Stop  call  count  tracing for all functions in all modules, and
              also for all functions in modules to be loaded. This is the same
              as (stop({'_','_','_'})+stop({on_load})).

              See also stop/1..3 below.

       stop(FuncSpec) -> integer() >= 0

       stop(Mod, Func) -> integer() >= 0

       stop(Mod, Func, Arity) -> integer() >= 0

              Types:

                 Mod = module()
                 Func = atom()
                 Arity = arity()

              Stop  call count tracing for matching functions in matching mod-
              ules. The FS argument can be used to specify the first  argument
              to erlang:trace_pattern/3, for example on_load.

              Remove  call  count breakpoints from the matching functions that
              has call count breakpoints.

              Return the number of matching functions that can have call count
              breakpoints,  the  same  as  start/0..3  with the same arguments
              would have returned.

SEE ALSO
       eprof(3), fprof(3), erlang(3), User's Guide



Ericsson AB                       tools 3.5.2                         cprof(3)