Benchmarking Producer/Consumer in Akka, Part 2

Recently, I published some benchmarks of Producer/Consumer in Akka. This post is a followup with more detail.


I have modified my test program (which is available on GitHub) to implement three different basic algorithms:



Producer pushes to a bounded queue (i.e. producer blocks when the queue is full)
Producer pushes to an unbounded queue, plus flow control to ensure that the queue doesn’t grow too large
Consumer pulls

For each of these, I then benchmarked different variants as follows:


push_bal: Producer pushes to a bounded queue, with a BalancingDispatcher


push_rr: Producer pushes to a bounded queue, with a RoundRobinRouter


push_sm: Producer pushes to a bounded queue, with a SmallestMailboxRouter


flow_bal: Producer pushes to an unbounded queue, with a BalancingDispatcher


flow_rr: Producer pushes to an unbounded queue, with a RoundRobinRouter


flow_sm: Producer pushes to an unbounded queue, with a SmallestMailboxRouter


pull_1: Consumer pulls, with a batch size of 1


pull_10: Consumer pulls, with a batch size of 10


pull_20: Consumer pulls, with a batch size of 20


pull_50: Consumer pulls, with a batch size of 50


pull_cached: Consumer pulls, with an intermediate cache


Here is a spreadsheet of the results, including graphs, I get on my MacBook Pro (Core i7, 4 cores, 2 hyperthreads per core). Each test is run multiple times and the results averaged.


Updated results, incorporating suggestions from Viktor can be downloaded here.


Conclusions

Note: These conclusions are different from the initial version of this post, following suggestions from Viktor.


The headline is that the difference between the approaches is so small as to be almost irrelevant:



For the push to a bounded queue version, BalancingDispatcher clearly outperforms both RoundRobinRouter and SmallestMailboxRouter, especially as the number of workers increases. Strangely the same difference is not present for the unbounded queue version.
The pull approach can be made to perform virtually identically to the push model by batching queries.

 •  0 comments  •  flag
Share on Twitter
Published on January 29, 2013 09:55
No comments have been added yet.