91 lines
5.1 KiB
Text
91 lines
5.1 KiB
Text
|
Asterisk Timing Interfaces
|
||
|
-------------------------------------
|
||
|
In the past, if internal timing were desired for an Asterisk system, then the
|
||
|
only source acceptable was from DAHDI. Beginning with Asterisk 1.6.1, a new
|
||
|
timing API was introduced which allows for various timing modules to be used.
|
||
|
Included with Asterisk are the following timing modules:
|
||
|
|
||
|
res_timing_pthread.so
|
||
|
res_timing_dahdi.so
|
||
|
res_timing_timerfd.so (Beginning with Asterisk 1.6.2)
|
||
|
|
||
|
res_timing_pthread uses the POSIX pthreads library in order to provide timing.
|
||
|
Since the code uses a commonly-implemented set of functions, res_timing_pthread
|
||
|
is portable to many types of systems. In fact, this is the only timing source
|
||
|
currently usable on a non-Linux system. Due to the fact that a single userspace
|
||
|
thread is used to provide timing for all users of the timer, res_timing_pthread
|
||
|
is also the least efficient of the timing sources and has been known to lose
|
||
|
its effectiveness in a heavily-loaded environment.
|
||
|
|
||
|
res_timing_dahdi uses timing mechanisms provided by DAHDI. This method of
|
||
|
timing was previously the only means by which Asterisk could receive timing. It
|
||
|
has the benefit of being efficient, and if a system is already going to use
|
||
|
DAHDI hardware, then it makes good sense to use this timing source. If,
|
||
|
however, there is no need for DAHDI other than as a timing source, this timing
|
||
|
source may seem unattractive. For people who are upgrading from 1.4 and are used
|
||
|
to the old ztdummy timing interface, res_timing_dahdi provides the interface
|
||
|
to dahdi_dummy, which is ztdummy's replacement.
|
||
|
|
||
|
res_timing_timerfd uses a timing mechanism provided directly by the Linux
|
||
|
kernel. This timing interface is only available on Linux systems using a kernel
|
||
|
version at least 2.6.25 and a glibc version at least 2.8. This interface has
|
||
|
the benefit of being very efficient, but at the time this is being written,
|
||
|
it is a relatively new feature on Linux, meaning that its availability is not
|
||
|
widespread.
|
||
|
|
||
|
What Asterisk does with the Timing Interfaces
|
||
|
---------------------------------------------
|
||
|
By default, Asterisk will build and load all of the timing interfaces. These
|
||
|
timing interfaces are "ordered" based on a hard-coded priority number defined
|
||
|
in each of the modules. As of the time of this writing, the preferences for the
|
||
|
modules is the following: res_timing_timerfd.so, res_timing_dahdi.so,
|
||
|
res_timing_pthread.so.
|
||
|
|
||
|
The only functionality that requires internal timing is IAX2 trunking. It may
|
||
|
also be used when generating audio for playback, such as from a file. Even
|
||
|
though internal timing is not a requirement for most Asterisk functionality,
|
||
|
it may be advantageous to use it since the alternative is to use timing based
|
||
|
on incoming frames of audio. If there are no incoming frames or if the incoming
|
||
|
frames of audio are from an unreliable or jittery source, then the
|
||
|
corresponding outgoing audio will also be unreliable, or even worse,
|
||
|
nonexistent. Using internal timing prevents such unreliability.
|
||
|
|
||
|
Customizations/Troubleshooting
|
||
|
---------------------------------------------
|
||
|
Now that you know Asterisk's default preferences for timing modules, you may
|
||
|
decide that you have a different preference. Maybe you're on a timerfd-capable
|
||
|
system but you would prefer to get your timing from DAHDI since you already are
|
||
|
using DAHDI to drive your hardware.
|
||
|
|
||
|
Alternatively, you may have been directed to this document due to an error you
|
||
|
are currently experiencing with Asterisk. If you receive an error message
|
||
|
regarding timing not working correctly, then you can use one of the following
|
||
|
suggestions to disable a faulty timing module.
|
||
|
|
||
|
1. Don't build the timing modules you know you will not use. You can disable
|
||
|
the compilation of any of the timing modules using menuselect. The modules are
|
||
|
listed in the "Resource Modules" section. Note that if you have already built
|
||
|
Asterisk and have received an error about a timing module not working properly,
|
||
|
it is not sufficient to disable it from being built. You will need to remove
|
||
|
the module from your modules directory (by default, /usr/lib/asterisk/modules)
|
||
|
to make sure that it does not get loaded again.
|
||
|
|
||
|
2. Build, but do not load the timing modules you know you will not use. You can
|
||
|
edit modules.conf using "noload" lines to disable the loading of specific
|
||
|
timing modules by default. Based on the note in the section above, you may
|
||
|
realize that your Asterisk setup does not require internal timing at all. If
|
||
|
this is the case, you can safely noload all timing modules.
|
||
|
|
||
|
Important Notes
|
||
|
----------------------------------------------
|
||
|
Some confusion has arisen regarding the fact that non-DAHDI timing interfaces
|
||
|
are available now. One common misconception which has arisen is that since
|
||
|
timing can be provided elsewhere, DAHDI is no longer required for using the
|
||
|
MeetMe application. Unfortunately, this is not the case. In addition to
|
||
|
providing timing, DAHDI also provides a conferencing engine which the MeetMe
|
||
|
application requires.
|
||
|
|
||
|
Starting with Asterisk 1.6.2, however, there will be a new application,
|
||
|
ConfBridge, which will be capable of conference bridging without the use
|
||
|
of DAHDI's built-in mixing engine.
|