Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Evaluation of API and performance of different actor libraries
Scala Shell Batchfile
branch: master
Failed to load latest commit information.
project Update versions of Sbt and plugins
src/test/scala Revert of a performance optimization that can cause actor starvation…
.gitignore restored Akka tests, added initial (non proprly working) sbt build
.travis.yml Remove sudo usage in build configurations
LICENSE re #5 minor refining
README.md Remove Shippable badge, because of slow builds with timeout failures
build.sbt Remove binaries for W/A of some known issue, because it was released …
circle.yml Add Circle CI badge and switch to Oracle JDK 8
mvnAll.bat Fix misprint in a benchmark param
mvnAll.sh Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize1.bat Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize1.sh Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize10.bat Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize10.sh Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize100.bat Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize100.sh Remove ThreadPoolExecutor with LinkedTransferQueue
out0.txt Update results from the notebook
out0_poolSize1.txt Update results from the notebook
out0_poolSize10.txt Update results from the notebook
out0_poolSize100.txt Update results from the notebook
out1.txt Update results from the notebook
out1_poolSize1.txt Update results from the notebook
out1_poolSize10.txt Update results from the notebook
out1_poolSize100.txt Update results from the notebook
out2.txt add tests from osx
out2_poolSize1.txt add tests from osx
out2_poolSize10.txt add tests from osx
out2_poolSize100.txt add tests from osx
out3.txt add tests from osx
out3_poolSize1.txt add tests from osx
out3_poolSize10.txt add tests from osx
out3_poolSize100.txt add tests from osx
out4.txt Add results from Linux desktop
out4_poolSize1.txt Add results from Linux desktop
out4_poolSize10.txt Add results from Linux desktop
out4_poolSize100.txt Add results from Linux desktop
out5.txt Add results from Linux desktop
out5_poolSize1.txt Add results from Linux desktop
out5_poolSize10.txt Add results from Linux desktop
out5_poolSize100.txt Add results from Linux desktop
out6.txt Add results from 2x CPU server with Xeon E5-2699 v3
out6_poolSize1.txt Add results from 2x CPU server with Xeon E5-2699 v3
out6_poolSize10.txt Add results from 2x CPU server with Xeon E5-2699 v3
out6_poolSize100.txt Add results from 2x CPU server with Xeon E5-2699 v3
pom.xml Remove binaries for W/A of some known issue, because it was released …
run_tests_osx.sh add tests from osx
sbtAll.bat Remove ThreadPoolExecutor with LinkedTransferQueue
sbtAll.sh Remove ThreadPoolExecutor with LinkedTransferQueue
shippable.yml Remove sudo usage in build configurations
wercker.yml Remove sudo usage in build configurations

README.md

  ☆ノノハ
  从*’w’)
(つactorsと)

Evaluation of API and performance of in-memory messaging for different actor implementations written on Scala: Akka vs. Lift vs. Scala vs. Scalaz

This project provides and tests alternative implementations of Minimalist actor and bounded/unbounded mailboxes for Akka: Akka vs. Minimalist Scala Actor also it provides alternative fork-join tasks which greatly increase efficiency of actors and examples of their usage with Lift, Scala & Scalaz actors.

Travis CI Build Status

Wercker Build Status

Circle CI Build Status

Gitter

Benchmarks and their goals

  • Enqueueing - memory footprint of internal actor queue per submitted message and submition throughput in a single thread
  • Dequeueing - message handling throughput in a single thread
  • Initiation - memory footprint of minimal actors and initiation time in a single thread
  • Single-producer sending - throughput of message sending from external thread to an actor
  • Multi-producer sending - throughput of message sending from several external threads to an actor
  • Max throughput - throughput of message sending from several external threads to several actors
  • Ping latency - average latency of sending of a ping message between two actors
  • Ping throughput 10K - throughput of executor service by sending of a ping message between 10K pairs of actors
  • Overflow throughput - throughput of overflow handing for bounded version of actors

Hardware required

  • CPU: 2 cores or more
  • RAM: 6Gb or greater

Software installed required

  • JDK: 1.7.0_x or newer
  • Maven: 3.x or sbt: 0.13.x

Building & running benchmarks

Use following command-line instructions to build from sources and run benchmarks with Scala's ForkJoinPool in FIFO mode:

mvn -B clean test >outX.txt

or

sbt clean test >outX.txt

Use mvnAll.sh or sbtAll.sh scripts (for Windows: mvnAll.bat or sbtAll.bat) to run benchmarks for the following types of executor services:

  • akka-forkjoin-pool for akka.dispatch.ForkJoinExecutorConfigurator.AkkaForkJoinPool
  • scala-forkjoin-pool for scala.concurrent.forkjoin.ForkJoinPool
  • java-forkjoin-pool for java.util.concurrent.ForkJoinPool
  • abq-thread-pool for java.util.concurrent.ThreadPoolExecutor with java.util.concurrent.ArrayBlockingQueue
  • lbq-thread-pool for java.util.concurrent.ThreadPoolExecutor with java.util.concurrent.LinkedBlockingQueue

Recommended values of JVM options which can be set for MAVEN_OPTS and SBT_OPTS system variables:

-server -Xms1g -Xmx1g -Xss1m -XX:NewSize=512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+TieredCompilation -XX:+UseG1GC -XX:+UseNUMA -XX:-UseBiasedLocking -XX:+AlwaysPreTouch

Known issues

  1. Benchmark freeze with Java ForkJoinPool baked by 1 thread on 8u40, 8u45 and some early 8u60 ea builds, please see details here: http://cs.oswego.edu/pipermail/concurrency-interest/2015-April/014242.html

W/A is to upgrade to latest 8u60 build or to use latest jsr166.jar (link to download http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166.jar) in working directory with following JVM option to pick it up: -Xbootclasspath/p:jsr166.jar

Test result descriptions

Results of running mvnAll.bat or mvnAll.sh scripts on different environments with pool size (or number of worker threads) set to number of available processors, 1, 10 or 100 values accordingly:

out0*.txt

Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz (max 3.50GHz), RAM 12Gb DDR3-1333, Ubuntu 14.10, Oracle JDK 1.8.0_45-b14 64-bit

out1*.txt

Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz (max 3.50GHz), RAM 12Gb DDR3-1333, Ubuntu 14.10, Oracle JDK 1.7.0_80-b15 64-bit

out2*.txt

Intel(R) Core(TM) i7-4850MQ CPU @ 2.30GHz (max 3.50GHz), RAM 16Gb DDR3-1600, Mac OS X 10.10.2, Oracle JDK 1.8.0_45-b14 64-bit

out3*.txt

Intel(R) Core(TM) i7-4850MQ CPU @ 2.30GHz (max 3.50GHz), RAM 16Gb DDR3-1600, Mac OS X 10.10.2, Oracle JDK 1.7.0_80-b15 64-bit

out4*.txt

Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz (max 3.90GHz), RAM 8Gb DDR3-1800, Ubuntu 14.04, Oracle JDK 1.8.0_31-b13 64-bit

out5*.txt

Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz (max 3.90GHz), RAM 8Gb DDR3-1800, Ubuntu 14.04, Oracle JDK 1.7.0_76-b13 64-bit

out6*.txt

2x Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz (max 3.60GHz), RAM 128Gb DDR4-1600, CentOS release 6.6 (Final), Oracle JDK 1.8.0_40-b25 64-bit

Something went wrong with that request. Please try again.