On Tue, Aug 16, 2011 at 8:21 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
supplying full or not will not change performance it just controls weather or not each socket has full control to do other event socket commands besides ones that relate to the specific channel.
myevents is probably a touch more efficient than filtering on unique-id but its negligible.
The best way to gain performance is to limit the number of events you subscribe to, to the bare necessity.
understand, thanks for your response. T.
On Tue, Aug 16, 2011 at 7:44 AM, Tihomir Culjaga <tculjaga@gmail.com> wrote:
On Mon, Aug 15, 2011 at 6:30 PM, Anthony Minessale <anthony.minessale@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?
Hello Anthony, thanks for your response....
yay, i found the cause .... testserver and FS were running on the same server. The server had just 1GB of RAM and of course ... by forking testserver (on 8 CPS) took all the remaining RAM ending to write into
swap
... this triggered a domino effect on the entire server becoming less and less responsive as testserver started to run from swap!!!... yay .. really bad... didn't see it happen until i started nmon ... top/htop didn't make it in time to show this issue..
anyhow, i moved testserver to another machine reaching 35 CPS ... really nice indeed.
now, having a referent point (testserver) im trying to reach that 35 CPS with a java application.
yes, i notices few issues :=)
please check: http://pastebin.freeswitch.org/17052
------------------------------------snipp-----------------------------------
Control: full
// here i subscribe to all events ... well not good idea but its a start events plain all
Content-Type: command/reply Reply-Text: +OK event listener enabled plain
//and here i do a filter per uuid filter Unique-ID f7a7b97b-df96-41f3-a6a3-fdf24350a45c
Content-Type: command/reply Reply-Text: +OK filter added. [Unique-ID]=[f7a7b97b-df96-41f3-a6a3-fdf24350a45c]
linger
Content-Type: command/reply Reply-Text: +OK will linger
// here i send answer in sync mode ( i could change it into async) sendmsg call-command: execute execute-app-name: answer event-lock: true
Content-Type: command/reply Reply-Text: +OK
Content-Length: 1805 Content-Type: text/event-plain
--------------------------------------------------------------------------------
so my questions:
if i use <action application="socket" data="192.168.254.99:8084 async full"/> and if i subscribe to "myevents" i don't need to set a filter on uuid and i could gain performance. if i use <action application="socket" data="192.168.254.99:8084async"/> i will be getting events for the call in question only... so no special filters needed and i could limit the number of events im subscribing
what is a better approach in a matter of performance ? What do i loose/gain by using async full vs async mode ?
Thanks for your answer, Tihomir.
On Thu, Aug 11, 2011 at 6:56 PM, Tihomir Culjaga <tculjaga@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@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@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@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@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@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@hotmail.com GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org googletalk:conf+888@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@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@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@hotmail.com GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org googletalk:conf+888@conference.freeswitch.org pstn:+19193869900
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
FreeSWITCH-users mailing list FreeSWITCH-users@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@hotmail.com GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org googletalk:conf+888@conference.freeswitch.org pstn:+19193869900
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org