
  -spec erlang:system_profile(ProfilerPid, Options) -> ProfilerSettings
                                 when
                                     ProfilerPid ::
                                         pid() | port() | undefined,
                                     Options :: [system_profile_option()],
                                     ProfilerSettings ::
                                         undefined |
                                         {pid() | port(),
                                          [system_profile_option()]}.

  Types:
    -type system_profile_option() ::
          exclusive | runnable_ports | runnable_procs | scheduler |
          timestamp | monotonic_timestamp | strict_monotonic_timestamp.

  Sets system profiler options. ProfilerPid is a local process
  identifier (pid) or port receiving profiling messages. The
  receiver is excluded from all profiling. The second argument is a
  list of profiling options:

  exclusive:
    If a synchronous call to a port from a process is done, the
    calling process is considered not runnable during the call
    runtime to the port. The calling process is notified as 
    inactive, and later active when the port callback returns.

  monotonic_timestamp:
    Time stamps in profile messages use Erlang monotonic time.
    The time stamp (Ts) has the same format and value as produced
    by erlang:monotonic_time(nanosecond).

  runnable_procs:
    If a process is put into or removed from the run queue, a
    message, {profile, Pid, State, Mfa, Ts}, is sent to 
    ProfilerPid. Running processes that are reinserted into the
    run queue after having been pre-empted do not trigger this
    message.

  runnable_ports:
    If a port is put into or removed from the run queue, a
    message, {profile, Port, State, 0, Ts}, is sent to 
    ProfilerPid.

  scheduler:
    If a scheduler is put to sleep or awoken, a message, 
    {profile, scheduler, Id, State, NoScheds, Ts}, is sent to 
    ProfilerPid.

  strict_monotonic_timestamp:
    Time stamps in profile messages consist of Erlang monotonic
    time and a monotonically increasing integer. The time stamp
    (Ts) has the same format and value as produced by 
    {erlang:monotonic_time(nanosecond),
    erlang:unique_integer([monotonic])}.

  timestamp:
    Time stamps in profile messages include a time stamp (Ts) that
    has the same form as returned by erlang:now(). This is also
    the default if no time stamp flag is specified. If 
    cpu_timestamp has been enabled through erlang:trace/3, this
    also effects the time stamp produced in profiling messages
    when flag timestamp is enabled.

  Note:
    erlang:system_profile behavior can change in a future
    release.
