[asterisk-dev] [Code Review] Adding the Move to Front Hash functionality
schmidts
reviewboard at asterisk.org
Tue May 3 06:31:28 CDT 2011
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1201/
-----------------------------------------------------------
Review request for Asterisk Developers.
Summary
-------
the so called "move to front" MTF functionality is a well known and documented improvement for hashes to improve the speed and accesstime for each object in the hash.
The idea of MTF is very simple. If you have a match on the object you searched, just move this object to the first position in the bucket. This operation is just a pointer exchange which means its cheap but could improve the performance well.
MTF works best when the spread over the buckets isnt well or if there are more objects than buckets. It will not help if there are only very few objects.
Diffs
-----
trunk/main/astobj2.c 316039
Diff: https://reviewboard.asterisk.org/r/1201/diff
Testing
-------
i didnt have done any time measurement but i counted how many compares are done to find an object. the following test results shows that its only a very little bit slower if there are less objects (in my test only 10 sip peers). if there is a big amount of objects (20k peers) the difference is like 5 times faster.
i used sipp to generate calls against asterisk, only to start the internal_ao2_callback function.
a short description about these values:
callbacks is the amount how often internal_ao2_callback was called.
bucketruns is the complete amount of traversal steps over the buckets
avg runs is the amount how many traversal steps are used to find the right object
10 peers with MTF
callbacks: 18201 bucketruns: 48440 avg runs: 2.661392
callbacks: 30001 bucketruns: 101864 avg runs: 3.395354
10 peers without MTF
callbacks: 18201 bucketruns: 46847 avg runs: 2.573869
callbacks: 30001 bucketruns: 101869 avg runs: 3.395520
as i said above with less date like 10 sip peers the difference is atomic.
1000 peers with mtf
callbacks: 20001 bucketruns: 82307 avg runs: 4.115144
callbacks: 30001 bucketruns: 116090 avg runs: 3.869538
1000 Peers without mtf
callbacks: 20001 bucketruns: 121156 avg runs: 6.057497
callbacks: 30001 bucketruns: 182905 avg runs: 6.096630
for 1000 peers there is a difference of nearly 2 times faster after 30k function calls.
20000 peers with MTF
callbacks: 8501 bucketruns: 33046 avg runs: 3.887307
callbacks: 30001 bucketruns: 161646 avg runs: 5.388021
20000 peers without MTF
callbacks 8501 bucketruns: 126252 avg runs: 14.851429
callbacks: 30001 bucketruns: 749008 avg runs: 24.966101
for 20.000 peers the difference after 30k function calls is nearly 5 times faster.
Thanks,
schmidts
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20110503/9478b02f/attachment-0001.htm>
More information about the asterisk-dev
mailing list