<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>

<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7650.28">
<TITLE>asterisk-dev Digest, Vol 24, Issue 21</TITLE>
</HEAD>
<BODY>
<DIV id=idOWAReplyText83819 dir=ltr>
<DIV dir=ltr><FONT face=Arial size=2>Greetings, </FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>I am looking into channel.c 
of&nbsp;asterisk version 1.2.9 and trying to figure out what can be 
changed</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>to increase&nbsp;asterisk ability to handle 
large RTP volume. As it is this code can sustain about 20 </FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>simultaneous calls on a Pentium 2 (not a 
top of the line, I know) but I would like to increase this 
<BR>number.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>I have&nbsp;a couple of ideas how the 
performance can be optimized and would like to run it by the</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>rest of the list of see if someone was 
already moving in this direction and has code prototypes.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>Otherwise I just 
solicit&nbsp;any&nbsp;comments.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>So.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>1) Right now RTP bridging happens in 
channel.c in function "ast_generic_bridge". This function</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; calls "ast_waitfor_n" to 
see where the next packet comes from, then reads from it and 
<BR>&nbsp;&nbsp;&nbsp; does "ast_write" to write RTP to the other channel. 
<BR><BR>&nbsp;&nbsp;&nbsp; The problem with&nbsp;"ast_waitfor_n" is that it can 
only report a single channel as the winner,<BR>&nbsp;&nbsp;&nbsp; whereas it is 
quite possible that the packets from both channels are waiting to be 
handled.<BR>&nbsp;&nbsp;&nbsp; If "ast_waitfor_n" (or another function) is 
changed to return&nbsp;an array of&nbsp;winners, then this 
can<BR>&nbsp;&nbsp;&nbsp; shave off quite a bit of CPU cycles and increase the 
performance. Of course the rest of <BR>&nbsp;&nbsp;&nbsp; "ast_generic_bridge" 
has to be modified to work with several winners.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>2) I am seeing in frame.c a TODO comment 
next to "ast_frfree": </FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr>/*!<BR>&nbsp;* \todo Important: I should be made more 
efficient.&nbsp; Frame headers should<BR>&nbsp;* most definitely be 
cached<BR>&nbsp;*/<BR><BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;The thing is 
that&nbsp;this comment has been in the code&nbsp;for more than&nbsp;a year 
already and<BR>&nbsp;&nbsp;&nbsp;nobody has gotten it done. I am wondering if 
this is just lack of time or there is a more<BR>&nbsp;&nbsp; fundamental 
difficulty behind caching the frame headers? Caching frame headers 
will<BR>&nbsp;&nbsp;&nbsp;definitely add to the performance.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2><BR>
<DIV dir=ltr><FONT face=Arial size=2>Another big architectural issue I am trying 
to wrap my mind around is multiple&nbsp;PBX threads. <BR>Having 20 threads on a 
Pentium II doing RTP I/O pretty much starves off other threads in</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>the process (e.g. SIP thread or Zap 
thread). Has anyone been thinking about RTP I/O<BR>multiplexing in PBX? 
</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV></FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>Please let me know your ideas about this 
and let me know if I am looking into the right <BR>direction. What else can be 
done to increase the RTP performance?</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>Respectfully</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>Constantine.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr>&nbsp;</DIV></DIV>

</BODY>
</HTML>