[Freeswitch-users] FS performance using ESL

Anthony Minessale anthony.minessale at gmail.com
Mon Aug 15 20:43:39 MSD 2011


my guess is you need to add the following line right after the
connected info line:

esl_log(ESL_LOG_INFO, "Connected! %d\n", handle.sock);

handle.event_lock = 1; // this keeps the hangup from being queued
right after the playback and ending the call



On Mon, Aug 15, 2011 at 11:30 AM, Anthony Minessale
<anthony.minessale at gmail.com> wrote:
> You must have something setup strangely cos it would definitely reduce
> your overall cps to use ESL but not down to 2 CPS.
>
> Did you look over the server stats like top etc and look for any
> misconfiguration?
>
>
> On Thu, Aug 11, 2011 at 6:56 PM, Tihomir Culjaga <tculjaga at gmail.com> wrote:
>> is there any other method than esl to controll calls on FS from an eternal
>> application?
>> will mod_curl or mod_xml_curl get better performance?
>>
>> T.
>>
>> On Fri, Aug 12, 2011 at 1:33 AM, Tihomir Culjaga <tculjaga at gmail.com> wrote:
>>>
>>> Hi Anthony, thanks for your response ...
>>>
>>>
>>> this is what i have:
>>>
>>>         esl_filter(&handle, "unique-id",
>>> esl_event_get_header(handle.info_event, "caller-unique-id"));
>>>         esl_events(&handle, ESL_EVENT_TYPE_PLAIN, "CHANNEL_DATA
>>> CHANNEL_EXECUTE_COMPLETE CHANNEL_HANGUP");
>>>
>>> what do you suggest i put there ?
>>>
>>>
>>> is the inbound method less costly ?
>>>
>>>
>>>
>>>
>>> I modified testserver.c just a bit...
>>>
>>> #include <sys/types.h>  /* include this before any other sys headers */
>>> #include <sys/wait.h>   /* header for waitpid() and various macros */
>>> #include <signal.h>     /* header for signal functions */
>>> #include <stdio.h>      /* header for fprintf() */
>>> #include <unistd.h>     /* header for fork() */
>>> #include <stdlib.h>
>>> #include <esl.h>
>>>
>>> void sig_chld(int);     /* prototype for our SIGCHLD handler */
>>>
>>> static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock,
>>> struct sockaddr_in *addr)
>>> {
>>>         esl_handle_t handle = {{0}};
>>>         int done = 0;
>>>         esl_status_t status;
>>>         time_t exp = 0;
>>>
>>>         if (fork() != 0) {
>>>                 close(client_sock);
>>>                 return;
>>>         }
>>>
>>>         esl_attach_handle(&handle, client_sock, addr);
>>>
>>>         esl_log(ESL_LOG_INFO, "Connected! %d\n", handle.sock);
>>>
>>>         esl_filter(&handle, "unique-id",
>>> esl_event_get_header(handle.info_event, "caller-unique-id"));
>>>         esl_events(&handle, ESL_EVENT_TYPE_PLAIN, "CHANNEL_DATA
>>> CHANNEL_EXECUTE_COMPLETE CHANNEL_HANGUP");
>>>
>>>         esl_send_recv(&handle, "linger");
>>>
>>>         esl_execute(&handle, "answer", NULL, NULL);
>>>         //esl_execute(&handle, "conference", "3000 at default", NULL);
>>>         esl_execute(&handle, "playback", "/home/tculjaga/myWavFile.wav",
>>> NULL);
>>>         //esl_execute(&handle, "sleep", "1000", NULL);
>>>         //esl_execute(&handle, "hangup", NULL, NULL);
>>>
>>>         while((status = esl_recv_timed(&handle, 1000)) != ESL_FAIL) {
>>>                 if (done) {
>>>                         if (time(NULL) >= exp) {
>>>                                 break;
>>>                         }
>>>                 } else if (status == ESL_SUCCESS) {
>>>                         const char *type =
>>> esl_event_get_header(handle.last_event, "content-type");
>>>                         if (type && !strcasecmp(type,
>>> "text/disconnect-notice")) {
>>>                                 const char *dispo =
>>> esl_event_get_header(handle.last_event, "content-disposition");
>>>                                 esl_log(ESL_LOG_INFO, "Got a disconnection
>>> notice dispostion: [%s]\n", dispo ? dispo : "");
>>>                                 if (!strcmp(dispo, "linger")) {
>>>                                         done = 1;
>>>                                         esl_log(ESL_LOG_INFO, "Waiting 5
>>> seconds for any remaining events.\n");
>>>                                         exp = time(NULL) + 5;
>>>                                 }
>>>                         }
>>>                 }
>>>         }
>>>
>>>         esl_log(ESL_LOG_INFO, "Disconnected! %d\n", handle.sock);
>>>         esl_disconnect(&handle);
>>>
>>>         close(client_sock);
>>>
>>>         _exit(0);
>>> }
>>>
>>> /*
>>>  * The signal handler function -- only gets called when a SIGCHLD
>>>  * is received, ie when a child terminates
>>>  */
>>> void sig_chld(int signo)
>>> {
>>>     int status;
>>>
>>>     /* Wait for any child without blocking */
>>>     if (waitpid(-1, &status, WNOHANG) < 0)
>>>     {
>>>         /*
>>>          * calling standard I/O functions like fprintf() in a
>>>          * signal handler is not recommended, but probably OK
>>>          * in toy programs like this one.
>>>          */
>>>         fprintf(stderr, "waitpid failed\n");
>>>         return;
>>>     }
>>> }
>>>
>>> int main(void)
>>> {
>>>         struct sigaction act;
>>>
>>>         /* Assign sig_chld as our SIGCHLD handler */
>>>         act.sa_handler = sig_chld;
>>>
>>>         /* We don't want to block any other signals in this example */
>>>         sigemptyset(&act.sa_mask);
>>>
>>>         /*
>>>          * We're only interested in children that have terminated, not
>>> ones
>>>          * which have been stopped (eg user pressing control-Z at
>>> terminal)
>>>          */
>>>         act.sa_flags = SA_NOCLDSTOP;
>>>
>>>         /*
>>>          * Make these values effective. If we were writing a real
>>>          * application, we would probably save the old value instead of
>>>          * passing NULL.
>>>          */
>>> /*      if (sigaction(SIGCHLD, &act, NULL) < 0)
>>>         {
>>>                 fprintf(stderr, "sigaction failed\n");
>>>                 return 1;
>>>         }
>>> */
>>>         signal(SIGCHLD, SIG_IGN);
>>>
>>>         esl_global_set_default_logger(0);
>>>         esl_listen("localhost", 8088, mycallback);
>>>
>>>         return 0;
>>> }
>>>
>>>
>>>
>>>
>>> On Thu, Aug 11, 2011 at 9:59 PM, Anthony Minessale
>>> <anthony.minessale at gmail.com> wrote:
>>>>
>>>> try removing the filter and event subscriptions
>>>> it's costly to consume all of the events especially at 75cps.
>>>>
>>>>
>>>> On Thu, Aug 11, 2011 at 5:23 AM, Tihomir Culjaga <tculjaga at gmail.com>
>>>> wrote:
>>>> > hello,
>>>> >
>>>> > im wondering how much performance do we loose when using ESL instead of
>>>> > running it via dialplan?
>>>> >
>>>> >
>>>> > without ESL with a fine tuned FS and a short dialplan ( answer,
>>>> > playback
>>>> > like 20 seconds file, hangup ) im able to service 75 CPS. On the same
>>>> > FS,
>>>> > when i use ESL to answer the call, playback the same file and hangup,
>>>> > im not
>>>> > able to run more than 2 CPS... this is a huge impact and i really can't
>>>> > believe it.
>>>> >
>>>> > I'm using event-socket outbound e.g.:
>>>> >
>>>> > <action application="socket" data="127.0.0.1:8088 async full"/>
>>>> >
>>>> > my extension looks like:
>>>> >
>>>> > <extension name="ESL_C">
>>>> >   <condition field="destination_number" expression="^(6666)$">
>>>> >     <action application="socket" data="127.0.0.1:8088 async full"/>
>>>> >     <action application="sleep" data="1000"/>
>>>> >     <action application="hangup"/>
>>>> >   </condition>
>>>> > </extension>
>>>> >
>>>> >
>>>> > im using testserver from lib/esl/ and i just removed the conference
>>>> > command
>>>> > and added the playback one.... also i moved the esl_debug lvl to 0
>>>> >
>>>> >
>>>> > anyhow, FS cannot run more than 2 CPS compared to 75 CPS when the
>>>> > playback
>>>> > is done from the dialplan.
>>>> >
>>>> >
>>>> > Please, can someone give me a clue on what is going on?
>>>> > Maybe im doing something wrong?
>>>> > how to get maximum FS performance using ESL ?
>>>> >
>>>> >
>>>> >
>>>> > Regards,
>>>> > Tihomir.
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > Join us at ClueCon 2011, Aug 9-11, Chicago
>>>> > http://www.cluecon.com 877-7-4ACLUE
>>>> >
>>>> > FreeSWITCH-users mailing list
>>>> > FreeSWITCH-users at lists.freeswitch.org
>>>> > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> >
>>>> > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>> > http://www.freeswitch.org
>>>> >
>>>> >
>>>>
>>>>
>>>>
>>>> --
>>>> Anthony Minessale II
>>>>
>>>> FreeSWITCH http://www.freeswitch.org/
>>>> ClueCon http://www.cluecon.com/
>>>> Twitter: http://twitter.com/FreeSWITCH_wire
>>>>
>>>> AIM: anthm
>>>> MSN:anthony_minessale at hotmail.com
>>>> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
>>>> IRC: irc.freenode.net #freeswitch
>>>>
>>>> FreeSWITCH Developer Conference
>>>> sip:888 at conference.freeswitch.org
>>>> googletalk:conf+888 at conference.freeswitch.org
>>>> pstn:+19193869900
>>>>
>>>> _______________________________________________
>>>> Join us at ClueCon 2011, Aug 9-11, Chicago
>>>> http://www.cluecon.com 877-7-4ACLUE
>>>>
>>>> FreeSWITCH-users mailing list
>>>> FreeSWITCH-users at lists.freeswitch.org
>>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>> http://www.freeswitch.org
>>>
>>
>>
>> _______________________________________________
>> Join us at ClueCon 2011, Aug 9-11, Chicago
>> http://www.cluecon.com 877-7-4ACLUE
>>
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
>
>
> --
> Anthony Minessale II
>
> FreeSWITCH http://www.freeswitch.org/
> ClueCon http://www.cluecon.com/
> Twitter: http://twitter.com/FreeSWITCH_wire
>
> AIM: anthm
> MSN:anthony_minessale at hotmail.com
> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
> IRC: irc.freenode.net #freeswitch
>
> FreeSWITCH Developer Conference
> sip:888 at conference.freeswitch.org
> googletalk:conf+888 at conference.freeswitch.org
> pstn:+19193869900
>



-- 
Anthony Minessale II

FreeSWITCH http://www.freeswitch.org/
ClueCon http://www.cluecon.com/
Twitter: http://twitter.com/FreeSWITCH_wire

AIM: anthm
MSN:anthony_minessale at hotmail.com
GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
IRC: irc.freenode.net #freeswitch

FreeSWITCH Developer Conference
sip:888 at conference.freeswitch.org
googletalk:conf+888 at conference.freeswitch.org
pstn:+19193869900



Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list