mod_timerfd
About
Mod_timerfd uses the Linux kernel timerfd API to create and use a kernel timer that delivers timer expire notifications via a file descriptor.
Requires kernel >= 2.6.25, libc >= 2.8, and FreeSWITCH commit 48b1193552983e37f1724bd9a87d48ade5de74e5 or later.
You must enable it in switch.conf.xml with the param enable-softtimer-timerfd=true Or, enable it per channel with:
<action application="set" data="rtp_timer_name=timerfd"/>
Click here to expand Table of Contents
Testing TIMERFD feature in FreeSWITCH git
The TIMERFD feature is a linux specific feature to support timing in applications without using signals. I have no clue what specific advantages you get from this, but it's a new and modern way to do timing. So it must be very great :-)
Note that TIMERFD support is experimental and thus you should always use latest git when trying to use it.
To use the TIMERFD feature, you have to have a kernel with support for it. Check wether your kernel has such support with:
grep '^CONFIG_TIMERFD=' /boot/config-*
OR zgrep CONFIG_TIMERFD= /proc/config.gz
If you kernel does not support TIMERFD feature, you will need to rebuild it or use a different build/kernel.
Secondly, you will need the FreeSWITCH support. There are two ways to get this, as native core support or as mod_timerfd module.
TIMERFD support as mod_timerfd
To check wether the module is available, do:
find /usr/local/freeswitch/mod/ -name mod_timerfd.*
To build the mod_timerfd in case it's not already there, add this line to your FreeSWITCH sources' modules.conf:
timers/mod_timerfd
Then build the module with this command:
make mod_timerfd
Finally install the module with this command:
make mod_timerfd-install
Then you need to configure FreeSWITCH to actually load the mod_timerfd on startup. In /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml put a line like this:
<load module="mod_timerfd"/>
Then restart FreeSWITCH:
/etc/init.d/freeswitch restart
Alternatively load the module from the CLI:
/usr/local/freeswitch/bin/fs_cli
load mod_timerfd
^D
Verify wether timerfd timer is available when using mod_timerfd:
freeswitch@internal> show timer
type,name,ikey
timer,soft,CORE_SOFTTIMER_MODULE
timer,timerfd,mod_timerfd
2 total.
TIMERFD support natively in FreeSWITCH core
In the file /usr/local/freeswitch/conf/autoload_configs/switch.conf.xml you have to put this:
<param name="enable-softtimer-timerfd" value="true"/>
FreeSWITCH should then use TIMERFD to implement normal soft timer.
WARNING! Don't use both TIMERFD support methods. I accidentally tried and got huge performance loss on incoming calls while RINGING. I got a severe lag in Xorg. As soon as call was hungup, the lag was gone. I think to use both methods at the same time is not meant to be done.