[asterisk-dev] astobj2 and chan_sip; first results... wanna test drive it?

Steve Murphy murf at digium.com
Fri Jan 4 00:25:52 CST 2008


Hello!

I've been slaving over chan_sip for some time now, and have some
preliminary comparisons.

1. I'm comparing the 'stock' trunk version to team/murf/bug11210, where
I've:
       1. put all peers into an astobj2 hash table
       2. put all users into an astobj2 hash table
       3. put all dialogs (sip_pvt) into an astobj2 hash table
       4. put all peers with an IP into an astobj2 hash table.
       5. added a small hashtab to the ast_sched struct, 
       6. changed the ast_sched schedq linked list to be a doubly-linked
list

2. In my first round of performance comparisons, I'm running asterisk
   compiled with no optimizations, and the -pg option added to profile
   the code. So, don't expect asterisk to run miraculously fast.

3. Also, the test machine (ala digium) is NOT a powerful machine... 
   with 1 gig of memory and running an old version of Ubuntu. It's a
Dell 
   32-bit PC, 2.8Ghz, P4. So, don't expect asterisk to run miraculously
fast.
   At least compared to the quad-processor 64-bit monsters that folks
like to
   brag about! Oh, btw, I never noted any swapping throughout my
testing.

4. All testing done with 'ulimit -n 8196' done previously. I have to do
this,
   or I bump into the 'too many open files' problem. The threshold is
about 195
   simultaneous calls.

5. I'm using the latest version of sipp to thrash asterisk. I have two
basic
   test scenarios: Run a LOT of really really really short calls, versus
running
   a lot of LONG calls, and see how many you can run at once before
problems set
   in...

   for the short calls: 
     ./sipp -sn uac 192.168.134.252 -s 12 -d 100 -l 256
   (don't worry, you'll never get close to 256 sim. calls! [at least,
not
    on MY machine!!!]  sipp will start out at 10 calls/sec; keep bumping
up
    the call limit until you start seeing retrans and timeouts.
Things'll just
    plain go nuts. When you hit this, you've gone too far.)

   for the long calls:
    ./sipp -sn uac 192.168.134.252 -s 12 -d 100000 -l 270
   (run this several times, and vary that last number to find a limit
that
    will allow you to run stably. If sipp goes nuts and cpu idle drops
to 0%,
    stop the test and try again with a lower number!)

6. On my asterisk machine, the sipp entry in sip.conf looks like this:
     [asterisk02]
     type=friend
     context=sipptest
     host=192.168.134.240
     user=sipp
     canreinvite=no
     disallow=all
     allow=ulaw

7. and the sipptest context in extensions.conf looks like this:

      context sipptest
      {
        _X. => {
                Answer();
                Background(demo-instruct);
                Background(demo-instruct);
                Background(demo-instruct);
                Background(demo-instruct);
                Hangup();
               }
     }
  (I looked around for the longest playing soundfile I could find.
Still, playing
   it 4 times may not take the full 100 secs. Tough. Close enough.)

8. To add spice to life, after the [asterisk02] entry in sip.conf, I
added over
   4600 other friend entries. 

9. Asterisk is running on 192.168.134.252; sipp runs on 192.168.134.240.
   Between them are 2 cheap 8-port switches and a router/switch.
Everything is
   running at 100mbit, and the kids are probably killing each other
using 
   network intensive gaming maneuvers in the same network.

OK, I admit it, I feel like a kid who's just put a turbocharger on his
450 V-8. Let's see what this baby can do on the open road. I have the
advantage of not having to worry about what the police/sheriff/FBI will
think!

Results:

On trunk:

Short Call test:  at 100 calls/sec, I start seeing some retransmits
after a while
                  at 120 calls/sec, I see 0% cpu idle and sipp goes
nuts.

Long Call test: at 270 simultaneous calls, cpu idle bobbles down to 0%
                       frequently, but asterisk seems to hang on.
                at 280, things fall apart pretty swiftly.

On my turbocharged V8 version in team/murf/bug11210:


Short Call test: things fall apart at 450 calls/sec. cpu idle drops to
0% and 
                      asterisk falls apart.


Long Call test:  at 300 simultaneous calls, cpu hits 0% every now and
then, but
                        asterisk remains stable.
                 at 310 simul. calls, we are stable for quite a while,
but the
                        cpu idle % times keeps bobbing up and down, and
when it
                        hits 0% hard, asterisk starts to trip up.

Conclusions: while I can get 4x performance for short calls, I seems to
be dealing with some sort of network limit or something for long calls.
Still, using hash tables to cut cpu usage, asterisk seems to be able to
squeeze a few more calls in before it gets overloaded (about 10% or
so?).

Caveats: There's still a few issues to clear up, namely 'pedantic'
dialog lookups need to be addressed, and there's an occasional timing
issue between the rtp stuff, and dialog destruction. It happens about as
often as asterisk crashes
in trunk from a bad peer pointer, btw, both problems occur during module
reload/unload... always work to do!)

So, anyone wanna take this puppy out for a drive?

murf


                       


-- 
Steve Murphy
Software Developer
Digium
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3227 bytes
Desc: not available
Url : http://lists.digium.com/pipermail/asterisk-dev/attachments/20080103/5f9e0707/attachment.bin 


More information about the asterisk-dev mailing list