package core_profiler

  1. Overview
  2. Docs
Module type
Class type

For a tutorial on using Core_profiler please look at: http://docs/programming/performance/core_profiler.html

This interface file defines the Profiler_intf interface, which has three implementations:

(1) By opening Core_profiler_disabled.Std you get an implementation of the interface where the profiling functions are no-ops.

(2) By opening Core_profiler.Std_online you get an implementation where the profiling stats like mean, stddev etc are maintained online, i.e. in-process with the process that is being profiled. Running the online profiler causes the program to print a table of stats periodically to stdout as your program runs.

(3) By opening Core_profiler.Std_offline you get the implementation where the profiling data is held in-memory in a buffer and is written out to a file at process exit and the stats can be analyzed offline. For most programs this is the preferred approach to profiling.

Broadly, there are two ways to collect metrics using Core_profiler:

(1) One can collect time-stamped metrics at various points in your programs using Probes. The metrics are integers that represent some application specific quantity, for example the length of some list, the number of allocated words on the heap etc.

(2) Alternately, one can use Timers to collect time stamps without recording any associated metric. Timers are a special kind of Probe that are useful when one only wants to measure *when something happened* and there is no associated quantity to measure. Timers are strictly less general than Probes, but are slightly more efficient.

module type Probe = sig ... end
type 'a timer_create_args = 'a
type 'a timer_record_args = 'a -> unit
type 'a probe_create_args = units:Profiler_units.t -> 'a
type 'a probe_record_args = 'a -> int -> unit
module type Profiler_intf = sig ... end

All three profilers -- the disabled one, the online one and the offline one -- implement Profiler_intf.

val core_profiler_env_help_string : string