mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
330 lines
8.2 KiB
330 lines
8.2 KiB
<?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>-3 - L_ALERT</para></listitem>
|
|
<listitem><para>-2 - L_CRIT</para></listitem>
|
|
<listitem><para>-1 - L_ERR</para></listitem>
|
|
<listitem><para>1 - L_WARN</para></listitem>
|
|
<listitem><para>2 - L_NOTICE</para></listitem>
|
|
<listitem><para>3 - L_INFO</para></listitem>
|
|
<listitem><para>4 - 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>
|
|
|