[asterisk-dev] bridge_unreal: An alternative approach to Local/Unreal channel optimization

Joshua Colp jcolp at digium.com
Sat Mar 8 13:19:39 CST 2014


Greetings everyone on this glorious weekend!

I've had an idea bouncing around my head for the past many months on an 
alternative approach for optimizing Local/Unreal channels. This morning 
everything finally clicked and I put it together[1] (I'm still working 
on it/tweaking it, but it DOES work).

The traditional approach has been to collapse the chain of Local 
channels down until you are left with the minimum amount required. 
Unfortunately this can be rather complex and error prone as you need to 
go through the entire chain and then figure out the best way to 
accomplish this (keeping in mind juggling multiple locks and potentially 
multiple bridges). You also end up needing to give information when this 
happens so consumers know what is going on.

The bridge_unreal approach doesn't do this. It aims to optimize the path 
for frames traveling through the chain, allowing them to skip 
intermediary hops where they don't need to go through. This results in a 
very similar situation for the frames but does not 
move/change/alter/hangup the intermediary channels involved.

It does this by passing each far end channel through the entire chain 
with each intermediary hop storing them and the next hop in the chain 
examining and forwarding them on over and over. Once this completes each 
end has the channel that is at the far end and is able to queue frames 
onto it directly, bypassing the intermediary hops. This happens over 
time (less than a second, I'm not talking minutes here) but leads to 
eventual optimization. Even in a compromised optimized state frames will 
still flow as expected.

This also works perfectly fine when a hop uses /n and wishes to remain 
in the path of frames. Each side of that hop will optimize themselves 
and skip any intermediary hops. (Although, since channels stick 
around... when would you need to use /n? Hrm...)

So, thoughts?

[1] http://svn.digium.com/svn/asterisk/team/file/bridge_unreal/

-- 
Joshua Colp
Digium, Inc. | Senior Software Developer
445 Jan Davis Drive NW - Huntsville, AL 35806 - US
Check us out at: www.digium.com & www.asterisk.org



More information about the asterisk-dev mailing list