This module is used to profile a system in order
to find out how time is used. It is usually very difficult
to measure time in a large system. The eprof
tool was designed
to overcome this.
The modules that will be included in the profiling must be compiled with the trace flag. The trace flag itself makes the system slightly slower, but the code in the part of the system which is profiled only runs at approximately 20 % of its original speed.
start() -> {ok, Pid} | {error, {already_started, Pid}}
profile(Rootset, Mod, Fun, Args)
This function evaluates the expression spawn(Mod, Fun, Args)
and profiles the process which evaluates it. The profiling is done for one function with a set of arguments in a certain root set of processes. All processes which are created by that function are profiled, together with its root set and all processes which are created by processes in that root set.
The profiling is terminated when the given function returns a value. The application must check that the function is truly synchronized and that no work continues after the function has returned a value.
For example, if a portion of code with a large amount of file I/O is
to be profiled, the Erlang module file
should be
compiled with the trace flag and file
should then
be included in the root set.
The root set is a list of Pids or atoms. If atoms, they are assumed to be registered processes.
profile(Rootset) -> profiling | error
Sometimes, it is not possible to start profiling with the aid of a single function.
For example, if some external stimuli enters the
Erlang system through a port, and the handling of this stimuli
is to be profiled until a response goes out through a port, it
may be appropriate to change the source code and insert
an explicit call to this function. The profile(Rootset)
function
starts the profiling for processes included in Rootset
.
stop_profiling() -> profiling_stopped | profiling_already_stopped
This function stops the collection of statistics performed by the
eprof
process. The eprof
process then holds data which
can be analysed at a later stage.
When the profiling has ended - profiling using profile/4
, or profile/1
together with stop_profiling/0
- the eprof
process can print the data collected during the
run. The printed profiling statistics show the activity for each process.
With this function, the total results of profiling is printed irrespective which process each function has used.
This function ensures that a copy of all printouts are sent to
both File
and the screen.
The actual supervision of execution times is in itself a
CPU intensive activity. A message is sent to the eprof
process
for every function call that is made by the profiled code.
This can only be done for trace compiled code and timings will be incorrect if parts of the code to be profiled uses non-trace compiled code. It is therefore strongly recommended that all code, including all library code, is compiled with the
trace flag.
compile(3)