Merge benchmark projects
This commit is contained in:
parent
619f821e8d
commit
7ac4bde963
8 changed files with 9 additions and 59 deletions
|
|
@ -1,10 +0,0 @@
|
||||||
# Akka Microbenchmarks
|
|
||||||
|
|
||||||
This subproject contains some microbenchmarks excercising key parts of Akka Typed.
|
|
||||||
|
|
||||||
You can run them like:
|
|
||||||
|
|
||||||
project akka-bench-jmh-typed
|
|
||||||
jmh:run -i 3 -wi 3 -f 1 .*ActorCreationBenchmark
|
|
||||||
|
|
||||||
Use 'jmh:run -h' to get an overview of the available options.
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2018-2019 Lightbend Inc. <https://www.lightbend.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
package akka
|
|
||||||
|
|
||||||
import org.openjdk.jmh.results.RunResult
|
|
||||||
import org.openjdk.jmh.runner.Runner
|
|
||||||
import org.openjdk.jmh.runner.options.CommandLineOptions
|
|
||||||
|
|
||||||
object BenchRunner {
|
|
||||||
def main(args: Array[String]) = {
|
|
||||||
import akka.util.ccompat.JavaConverters._
|
|
||||||
|
|
||||||
val args2 = args.toList.flatMap {
|
|
||||||
case "quick" => "-i 1 -wi 1 -f1 -t1".split(" ").toList
|
|
||||||
case "full" => "-i 10 -wi 4 -f3 -t1".split(" ").toList
|
|
||||||
case "jitwatch" => "-jvmArgs=-XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading -XX:+LogCompilation" :: Nil
|
|
||||||
case other => other :: Nil
|
|
||||||
}
|
|
||||||
|
|
||||||
val opts = new CommandLineOptions(args2: _*)
|
|
||||||
val results = new Runner(opts).run()
|
|
||||||
|
|
||||||
val report = results.asScala.map { result: RunResult =>
|
|
||||||
val bench = result.getParams.getBenchmark
|
|
||||||
val params =
|
|
||||||
result.getParams.getParamsKeys.asScala.map(key => s"$key=${result.getParams.getParam(key)}").mkString("_")
|
|
||||||
val score = result.getAggregatedResult.getPrimaryResult.getScore.round
|
|
||||||
val unit = result.getAggregatedResult.getPrimaryResult.getScoreUnit
|
|
||||||
s"\t${bench}_${params}\t$score\t$unit"
|
|
||||||
}
|
|
||||||
|
|
||||||
report.toList.sorted.foreach(println)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -10,3 +10,8 @@ You can run them like:
|
||||||
jmh:run -i 3 -wi 3 -f 1 .*ActorCreationBenchmark
|
jmh:run -i 3 -wi 3 -f 1 .*ActorCreationBenchmark
|
||||||
|
|
||||||
Use 'jmh:run -h' to get an overview of the available options.
|
Use 'jmh:run -h' to get an overview of the available options.
|
||||||
|
|
||||||
|
Some potentially out of date resources for writing JMH benchmarks:
|
||||||
|
|
||||||
|
* [Studying what's wrong with JMH benchmarks](https://www.researchgate.net/publication/333825812_What's_Wrong_With_My_Benchmark_Results_Studying_Bad_Practices_in_JMH_Benchmarks)
|
||||||
|
* [Writing good benchmarks](http://tutorials.jenkov.com/java-performance/jmh.html#writing-good-benchmarks)
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import akka.actor.typed.scaladsl.AskPattern._
|
||||||
|
|
||||||
object TypedActorBenchmark {
|
object TypedActorBenchmark {
|
||||||
// Constants because they are used in annotations
|
// Constants because they are used in annotations
|
||||||
final val threads = 8 // update according to cpu
|
final val threads = 12 // update according to cpu
|
||||||
final val numMessagesPerActorPair = 1000000 // messages per actor pair
|
final val numMessagesPerActorPair = 1000000 // messages per actor pair
|
||||||
|
|
||||||
final val numActors = 512
|
final val numActors = 512
|
||||||
|
|
@ -39,7 +39,7 @@ class TypedActorBenchmark {
|
||||||
@Param(Array("50"))
|
@Param(Array("50"))
|
||||||
var batchSize = 0
|
var batchSize = 0
|
||||||
|
|
||||||
@Param(Array("akka.dispatch.SingleConsumerOnlyUnboundedMailbox"))
|
@Param(Array("akka.dispatch.SingleConsumerOnlyUnboundedMailbox", "akka.dispatch.UnboundedMailbox"))
|
||||||
var mailbox = ""
|
var mailbox = ""
|
||||||
|
|
||||||
@Param(Array("fjp-dispatcher")) // @Param(Array("fjp-dispatcher", "affinity-dispatcher"))
|
@Param(Array("fjp-dispatcher")) // @Param(Array("fjp-dispatcher", "affinity-dispatcher"))
|
||||||
13
build.sbt
13
build.sbt
|
|
@ -42,7 +42,6 @@ lazy val aggregatedProjects: Seq[ProjectReference] = List[ProjectReference](
|
||||||
actorTyped,
|
actorTyped,
|
||||||
actorTypedTests,
|
actorTypedTests,
|
||||||
benchJmh,
|
benchJmh,
|
||||||
benchJmhTyped,
|
|
||||||
cluster,
|
cluster,
|
||||||
clusterMetrics,
|
clusterMetrics,
|
||||||
clusterSharding,
|
clusterSharding,
|
||||||
|
|
@ -77,7 +76,7 @@ lazy val root = Project(id = "akka", base = file("."))
|
||||||
.aggregate(aggregatedProjects: _*)
|
.aggregate(aggregatedProjects: _*)
|
||||||
.settings(rootSettings: _*)
|
.settings(rootSettings: _*)
|
||||||
.settings(
|
.settings(
|
||||||
unidocRootIgnoreProjects := Seq(remoteTests, benchJmh, benchJmhTyped, protobuf, protobufV3, akkaScalaNightly, docs))
|
unidocRootIgnoreProjects := Seq(remoteTests, benchJmh, protobuf, protobufV3, akkaScalaNightly, docs))
|
||||||
.settings(unmanagedSources in (Compile, headerCreate) := (baseDirectory.value / "project").**("*.scala").get)
|
.settings(unmanagedSources in (Compile, headerCreate) := (baseDirectory.value / "project").**("*.scala").get)
|
||||||
.enablePlugins(CopyrightHeaderForBuild)
|
.enablePlugins(CopyrightHeaderForBuild)
|
||||||
|
|
||||||
|
|
@ -104,21 +103,13 @@ lazy val akkaScalaNightly = akkaModule("akka-scala-nightly")
|
||||||
.disablePlugins(ValidatePullRequest, MimaPlugin, CopyrightHeaderInPr)
|
.disablePlugins(ValidatePullRequest, MimaPlugin, CopyrightHeaderInPr)
|
||||||
|
|
||||||
lazy val benchJmh = akkaModule("akka-bench-jmh")
|
lazy val benchJmh = akkaModule("akka-bench-jmh")
|
||||||
.dependsOn(Seq(actor, stream, streamTests, persistence, distributedData, jackson, testkit).map(
|
.dependsOn(Seq(actor, actorTyped, stream, streamTests, persistence, distributedData, jackson, testkit).map(
|
||||||
_ % "compile->compile;compile->test"): _*)
|
_ % "compile->compile;compile->test"): _*)
|
||||||
.settings(Dependencies.benchJmh)
|
.settings(Dependencies.benchJmh)
|
||||||
.settings(javacOptions += "-parameters") // for Jackson
|
.settings(javacOptions += "-parameters") // for Jackson
|
||||||
.enablePlugins(JmhPlugin, ScaladocNoVerificationOfDiagrams, NoPublish, CopyrightHeader)
|
.enablePlugins(JmhPlugin, ScaladocNoVerificationOfDiagrams, NoPublish, CopyrightHeader)
|
||||||
.disablePlugins(MimaPlugin, WhiteSourcePlugin, ValidatePullRequest, CopyrightHeaderInPr)
|
.disablePlugins(MimaPlugin, WhiteSourcePlugin, ValidatePullRequest, CopyrightHeaderInPr)
|
||||||
|
|
||||||
// typed benchmarks only on 2.12+
|
|
||||||
lazy val benchJmhTyped = akkaModule("akka-bench-jmh-typed")
|
|
||||||
.dependsOn(Seq(persistenceTyped, distributedData, clusterTyped, testkit, benchJmh).map(
|
|
||||||
_ % "compile->compile;compile->test"): _*)
|
|
||||||
.settings(Dependencies.benchJmh)
|
|
||||||
.enablePlugins(JmhPlugin, ScaladocNoVerificationOfDiagrams, NoPublish, CopyrightHeader)
|
|
||||||
.disablePlugins(MimaPlugin, WhiteSourcePlugin, ValidatePullRequest, CopyrightHeaderInPr)
|
|
||||||
|
|
||||||
lazy val cluster = akkaModule("akka-cluster")
|
lazy val cluster = akkaModule("akka-cluster")
|
||||||
.dependsOn(remote, remoteTests % "test->test", testkit % "test->test", jackson % "test->test")
|
.dependsOn(remote, remoteTests % "test->test", testkit % "test->test", jackson % "test->test")
|
||||||
.settings(Dependencies.cluster)
|
.settings(Dependencies.cluster)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue