The Asterisk S-Prize: 10000 Call Legs, 1 Instance

By Digium Webteam

Asterisk is becoming more and more a choice for larger installations, both in Enterprise as well as Carrier environments.  While SMB (small/medium business) continues to be the heart of the user base, it seems that many of the questions on the minds of the user and developer community have to do with scale, redundancy, and configuration issues which are relevant to larger installations.

To encourage the improvement and testing of larger-scale Asterisk systems, I’d like to repeat here what I mentioned today on the asterisk-dev mailing list:  I’m putting out a semi-official challenge in place.  The first person to get an Asterisk system moving 10,000 G.711 call legs through a single instance on a single machine will get a first-class steak dinner at Astricon.  And a great bottle of wine, if that is your preference.

This isn’t an X-prize, but the concept is the same – think of it as an S-prize.  “S” means “Steak”.  Or maybe “Salad” if you’re a vegetarian.

There are some serious hurdles here, for both software and hardware.  Ten thousand channels sounds like a lot, and it is.  But it can be done, and is already done with custom hardware from closed-source vendors.  Open Source Asterisk has not been (to my knowledge) tested at anywhere near that capacity, though attempts have been made in the thousands of channel level ranges with good successes.  However, there are significant “walls” to climb between ~2500 channels and 10000 channels, and this is not merely a linear application of processing power.  Just the throughput for this 10k challenge is pretty impressive: 500k packets per second per direction at 20ms, and 820mbps per direction.  Ethernet trunking/bonding may be required to overcome IRQ issues, or certainly very close administration of a gigabit interface.  Operating system tuning will be required in conjunction with Asterisk tuning (and probably patching.)  Documentation on how you achieve this will help everyone, and this is an “open” challenge.

I know that the Asterisk community is already headed in the direction of making these kinds of advances.  This is merely an incentive to speed up the process, and hopefully get some discussion going as to how people might solve the problems both in the Asterisk implementation as well as on the systems which are required to handle that kind of throughput.  Everyone benefits from the effort, and I think it can be done with some concentration and clever design.

Will there be some other platform that makes it there first, or has someone already reached that number?  Maybe!  I think any work done towards improving VoIP RTP throughput on Linux systems at these high packet-per-second rates will benefit everyone, especially if it’s an Open-Source solution that reaches the goal first.

Small print: one winner, even if a group effort – choose amongst yourselves. Group members may get secondary prizes.  Prize dinner will be at the following Astricon, in whatever city that is holds Astricon that year. Equipment must be “off-the-shelf” gear.  Software must be Asterisk from SVN, or patched with code that has been submitted to the bugtracker with a valid submission agreement for inclusion into Asterisk.  MOS of audio channels must be at least 3.2 or better (subjective.)  Calls must be standard G.711 with 20ms or 10ms sample intervals.  All RTP (RX,TX) for all channels must be routed through a single instance of Asterisk.  Methods must be documented and reproducible by other community members or Digium with the same equipment.  Winner will be publicly cheered.  Dinner to be at Mortons, Ruth’s Chris, or comparable venue.  10,000 call legs is equivalent to 5,000 “hairpin” calls, though 10,000 calls to “Echo()” would be acceptable.  Substitutions are possible.  SIP, IAX2, or H.323 are acceptable protocols.

Related Posts

There Are 8 Comments

  • roderickm says:

    Sounds interesting! Contestants might like to know How to test an Asterisk server using SIPp and How to achieve gigabit speeds with Linux. And that’s just for starters. There are all kinds of gems in the mailing list archives.

  • anonymous coward says:

    the answer is easy:

    diff -urN asterisk-1.6.5 freeswitch-1.0.3

    did I win the steak ?

  • @anonymous coward

    While I love FreeSWITCH I don’t agree with your post. Even if you did win, how would they give you the steak since you remained anonymous?

    However, if you *do* get this up and running with FS I’d love to hear about. Until then please do more system building and less forum spamming.

    -MC

  • Makhtar says:

    Well… I have tested Asterisk 1.4 with SIPP, and things were ok up to 200 simultaneous calls. So if I write a script that launchs in background mode 50 instances of SIPP that dial to a test extension , the homework will be done, right?

  • Eric Chou says:

    Is the bandwidth calculation, ‘500k packets per second per direction at 20ms, and 820mbps per direction’, correct? Here is my calculation:

    64 Kb per sample with 2 samples per payload = 1280 bits or 160 bytes per payload
    64 Kbps / 1280 bits = 50 packets per second

    Each packet size = 160 bytes + 58 bytes (40 bytes IP/UDP/RTP + 18 bytes Ethernet) = 218 bytes or 1744 bits

    1744 bits x 50 pps x 10000 calls = 872 Mbps

  • Kristijan says:

    is there a winner meanwhile? because i want to run ~1000 concurrent calls, hoped for some tuning tipps

  • jtodd says:

    Kristijan – We’re fairly certain that someone has won the contest. Olle Johannson has discussed his achievement on the asterisk-dev list a month or so ago, and I further talked with him about it at AstriCon. He supplied some documentation, but honestly I haven’t gone through it all yet. We probably want to validate and verify the results, and we’re under way to getting the equipment to do this. Olle’s “secret” to winning (he says) is that he’s using HP G6 machines for the test, which have a very good IRQ management method, or at least that is my muddled interpretation of the reason. In any case, Olle was testing with 1.4 and said he achieved 11,000 channels or more between two systems, at which point the ethernet interfaces were overloaded or some other unknown limit was reached. The exact machine specs (sorry for acronyms) was “HP DL380 G6 E5530 3*2GB RDIMM P410i/256” for Olle’s experiment, and simple ‘echo()’ was used on the test calls and I assume he was playing back a soundfile. I’m VERY interested in hearing if anyone else can reproduce it! I’ll fill in the details when we get the machines in-house to re-test.

    JT

  • The first person to get an Asterisk system moving 10,000 G.711 call legs through a single instance on a single machine will get a first-class steak dinner at Astricon.

Add to the Discussion

Your email address will not be published. Required fields are marked *