[asterisk-dev] Dahdi resource limit

Olle E. Johansson oej at edvina.net
Tue Apr 3 14:26:49 CDT 2012


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.

/O




More information about the asterisk-dev mailing list