[asterisk-dev] Dahdi resource limit
Olle E. Johansson
oej at edvina.net
Thu Apr 5 02:09:26 CDT 2012
4 apr 2012 kl. 19:09 skrev Shaun Ruffell:
> On Tue, Apr 03, 2012 at 09:26:49PM +0200, Olle E. Johansson wrote:
>>
>> 3 apr 2012 kl. 21:11 skrev Shaun Ruffell:
>>
>>> On Tue, Apr 03, 2012 at 06:22:36PM +0200, Olle E. Johansson wrote:
>>>>
>>>> 3 apr 2012 kl. 17:01 skrev Shaun Ruffell:
>>>>
>>>>> On Tue, Apr 03, 2012 at 10:18:22AM +0200, Olle E. Johansson wrote:
>>>>>>
>>>>>> I am lost how to debug this and provide a good report. Dahdi
>>>>>> developers - are you aware of some sort of limit apart from the
>>>>>> file handles that can lead to this issue?
>>>>>
>>>>> 2.5.0 was the first release to add a module parameter to specify the
>>>>> maximum number of psuedo channels that can be opened (and lowered
>>>>> limit from hard coded 1024 for all channels to 512 for only pseudo
>>>>> channels). Perhaps your bumping into that?
>>>>>
>>>>> The change went in in r9610 "dahdi: Add module parameter to limit
>>>>> number of pseudo channels." [1]
>>>>>
>>>>> [1] http://svnview.digium.com/svn/dahdi?view=revision&revision=9610
>>>>
>>>> Thanks for the feedback, Shaun!
>>>>
>>>> As I wrote before - we have configured Dahdi to for 4000 file handles,
>>>> but still hit some kind of limit around 1400 open ones.
>>>
>>> Ahh, I wasn't exactly sure what you meant by "we have configured
>>> Dahdi for 4000 file handles". The 'max_pseudo_channels' only limits
>>> the total number of psuedo channels that can be created, not the
>>> total number of open descriptors to DAHDI objects.
>>>
>>> So regarding your original question about what limits may be in the
>>> driver: There is a hard coded limit of 1024 conferences which you
>>> may be hitting if you're dropping each psuedo you create into it's
>>> own conference. See DAHDI_MAX_CONF include/dahdi/user.h if you want
>>> to bump it up, but I still think you should be CPU bound before you
>>> hit that limit.
>>>
>>> Since all the conferencing is done on a single CPU, I can't open
>>> more than about 1500 psuedo channels and still have a usable system.
>>> Too much time is eaten up in the context of the timer interrupt
>>> which is handling all the mixing, transmit, and receives for those
>>> pseudo channels.
>>>
>>> Try the following to get a sense of how many psuedo channels you
>>> might be able to open:
>>>
>>> # /etc/init.d/dahdi stop
>>> # modprobe dahdi max_pseudo_channels=4000
>>> # ulimit -n 4000
>>>
>>> Then run the following through your python interpreter:
>>>
>>> import sys
>>> import time
>>>
>>> chans = []
>>> x = 0
>>>
>>> while True:
>>> chans.append(file("/dev/dahdi/pseudo", "rw"))
>>> time.sleep(0.01)
>>> x = x + 1
>>> sys.stdout.write("%d " % (x))
>>> sys.stdout.flush()
>>>
>>> When the CPU that is running the timer gets pegged out, this process
>>> can take awhile to kill, but everything will go back to normal once
>>> it is.
>>>
>>> The load on the system is even more pronounced when those pseudos
>>> are actually in conference with one another.
>>>
>>> Does this help?
>> Absolutely, thank you!
>> Together with Kevin's earlier explanation of the pseudo and timer usage I know have a more complete picture.
>>
>> Now, the question is where we go from here. I guess not doing mixing in Dahdi is my solution,
>> which for 1.4 means one of the out-of-tree solutions.
>>
>> I still wonder where the leakage is, but that is another issue. It's not one per conference, seems more random like that.
>
> Olle,
>
> Another thing that you may do in the interim to increase the number
> of meetme conferences you can process is change DAHDI_CHUNKSIZE size
> and only build dahdi.ko.
>
> If I change DAHDI_CHUNKSIZE to 80 (10 ms of audio in each chunk) I
> can hold open 4000 pseudo channels and sit at about 75% CPU consumed
> in software interrupt context. That's not too bad if you have other
> cores to do the real work. 80 is probably the max you'll want to do
> if audio is coming from userspace in 20ms frames.
>
> You'll need to change DAHDI_CHUNKSIZE in include/dahdi/kernel.h,
> increase DAHDI_MAX_CONFERENCE to an appropriate number, and edit
> drivers/dahdi/Kbuild, commenting out all the board drivers (some of
> them are not designed to work with chunksizes greater than
> 8bytes/1ms).
>
> Just an idea that might get you closer to your target,
> Shaun
Great. Yes, I'm only using DAHDI and no hardware cards, so this sounds like something we want to test.
Happy Easter!
/O
More information about the asterisk-dev
mailing list