123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- <?xml version="1.0" encoding='ISO-8859-1'?>
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
- "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
- <!-- Include general documentation entities -->
- <!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
- %docentities;
- ]>
- <!-- Module User's Guide -->
- <chapter>
-
- <title>&adminguide;</title>
-
- <section>
- <title>Overview</title>
- <para>
- This module helps developers to benchmark their module functions. By adding
- this module's functions via the configuration file or through its API, &kamailio;
- can log profiling information for every function.
- </para>
- <para>
- The duration between calls to start_timer and log_timer is stored and logged
- via &kamailio;'s logging facility. Please note that all durations are given as
- microseconds (don't confuse with milliseconds!).
- </para>
- </section>
- <section>
- <title>Dependencies</title>
- <section>
- <title>&kamailio; Modules</title>
- <para>
- The following modules must be loaded before this module:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>No dependencies on other &kamailio; modules</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- <section>
- <title>External Libraries or Applications</title>
- <para>
- The following libraries or applications must be installed before running
- &kamailio; with this module loaded:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>None</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </section>
- <section>
- <title>Parameters</title>
- <section>
- <title><varname>enable</varname> (int)</title>
- <para>
- Even when the module is loaded, benchmarking is not enabled
- per default. This variable may have three different values:
- <itemizedlist>
- <listitem>
- <para>
- -1 - Globally disable benchmarking
- </para>
- </listitem>
- <listitem>
- <para>
- 0 - Enable per-timer enabling. Single timers are inactive by default
- and can be activated through the MI interface as soon as that feature is
- implemented.
- </para>
- </listitem>
- <listitem>
- <para>
- 1 - Globally enable benchmarking
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- <emphasis>
- Default value is <quote>0</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>enable</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("benchmark", "enable", 1)
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>granularity</varname> (int)</title>
- <para>
- Logging normally is not done for every reference to the log_timer()
- function, but only every n'th call. n is defined through this variable.
- A sensible granularity seems to be 100.
- </para>
- <para>
- <emphasis>
- Default value is <quote>1</quote>.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>granularity</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("benchmark", "granularity", 500)
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><varname>loglevel</varname> (int)</title>
- <para>
- Set the log level for the benchmark logs. These levels should be used:
- <itemizedlist>
- <listitem><para>-5 - L_ALERT</para></listitem>
- <listitem><para>-4 - L_BUG</para></listitem>
- <listitem><para>-3 - L_CRIT</para></listitem>
- <listitem><para>-2 - L_CRIT (no prefix)</para></listitem>
- <listitem><para>-1 - L_ERR</para></listitem>
- <listitem><para>0 - L_WARN</para></listitem>
- <listitem><para>1 - L_NOTICE</para></listitem>
- <listitem><para>2 - L_INFO</para></listitem>
- <listitem><para>3 - L_DBG</para></listitem>
- </itemizedlist>
- </para>
- <para>
- <emphasis>
- Default value is <quote>3</quote> (L_INFO).
- </emphasis>
- </para>
- <example>
- <title>Set <varname>loglevel</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("benchmark", "loglevel", 4)
- ...
- </programlisting>
- </example>
- <para>
- This will set the logging level to L_DBG.
- </para>
- </section>
- </section>
- <section>
- <title>Functions</title>
- <section>
- <title>
- <function moreinfo="none">bm_start_timer(name)</function>
- </title>
- <para>
- Start timer <quote>name</quote>. A later call to
- <quote>bm_log_timer()</quote> logs this timer..
- </para>
- <example>
- <title><function>bm_start_timer</function> usage</title>
- <programlisting format="linespecific">
- ...
- bm_start_timer("test");
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title>
- <function moreinfo="none">bm_log_timer(name)</function>
- </title>
- <para>
- This function logs the timer with the given ID. The following data are
- logged:
- <itemizedlist>
- <listitem>
- <para><emphasis>Last msgs</emphasis> is the number of calls in the last logging interval. This equals the granularity variable.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Last sum</emphasis> is the accumulated duration in the current logging interval (i.e. for the last <quote>granularity</quote> calls).
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Last min</emphasis> is the minimum duration between start/log_timer calls during the last interval.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Last max</emphasis> - maximum duration.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Last average</emphasis> is the average duration between
- bm_start_timer() and bm_log_timer() since the last logging.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Global msgs</emphasis> number of calls to log_timer.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Global sum</emphasis> total duration in microseconds.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Global min</emphasis>... You get the point. :)
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Global max</emphasis> also obvious.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para><emphasis>Global avg</emphasis> possibly the most interesting value.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <example>
- <title><function>bm_log_timer</function> usage</title>
- <programlisting format="linespecific">
- ...
- bm_log_timer("test");
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section>
- <title>Exported pseudo-variables</title>
- <para>
- Exported pseudo-variables are listed in the next sections.
- </para>
- <section>
- <title>$BM_time_diff</title>
- <para>
- <emphasis>$BM_time_diff</emphasis> - the time difference
- elapsed between calls of bm_start_timer(name) and
- bm_log_timer(name). The value is 0 if no bm_log_timer()
- was called.
- </para>
- </section>
- </section>
- <section>
- <title>MI Commands</title>
- <section>
- <title><function moreinfo="none">bm_enable_global</function></title>
- <para>
- Enables/disables the module. Parameter may be -1, 0 or 1. See
- discription of "enable" parameter.
- </para>
- </section>
- <section>
- <title><function moreinfo="none">bm_enable_timer</function></title>
- <para>
- Enable or disable a single timer. The following example enables
- timer "test" (the second parameter must be 0 to disable):
- </para>
- <example>
- <title>Enabling a timer</title>
- <programlisting format="linespecific">
- ...
- &ctltool; fifo bm_enable_timer test 1
- ...
- </programlisting>
- </example>
- </section>
- <section>
- <title><function moreinfo="none">bm_granularity</function></title>
- <para>
- Modifies the benchmarking granularity. See "granularity" variable.
- </para>
- </section>
- <section>
- <title><function moreinfo="none">bm_loglevel</function></title>
- <para>
- Modifies the module log level. See "loglevel" variable.
- </para>
- </section>
- </section>
- <section>
- <title>Example of usage</title>
- <para>
- Measure the duration of user location lookup.
- </para>
- <example>
- <title>benchmark usage</title>
- <programlisting format="linespecific">
- ...
- bm_start_timer("usrloc-lookup");
- lookup("location");
- bm_log_timer("usrloc-lookup");
- ...
- </programlisting>
- </example>
- </section>
- </chapter>
|