Hello,

On 9/24/10 9:43 AM, Juha Heinanen wrote:
[...]
any ideas on how to improve weighted random number calculation without
loosing performance?

maybe there are other options, but here is what I did for dispatcher weighted load balancing:
- each destination set has associated an array of 100 integers
- when destination set is loaded, this array is filled with indexes of destination addresses in the set as many times as associated weight value
- when this array is filled, the content is randomized

At runtime, a position of the last used index in array is keep, incremented and looped again over the array. During the load the 100-indexes array is traversed 2 times, once to fill and second to radomize, but then selection is very fast at runtime, which is more important for a load balancer, since loading is done very rarely and in MI/RPC process, in parallel with normal operation using old data.

Code is in modules_k/dispacher/dispatch.c, function dp_init_weights().

Cheers,
Daniel

--
Daniel-Constantin Mierla
http://www.asipto.com


_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to