diff --git a/akka-bench-jmh-typed/README.md b/akka-bench-jmh-typed/README.md deleted file mode 100644 index 1bfae92d7b..0000000000 --- a/akka-bench-jmh-typed/README.md +++ /dev/null @@ -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. diff --git a/akka-bench-jmh-typed/src/main/scala/akka/BenchRunner.scala b/akka-bench-jmh-typed/src/main/scala/akka/BenchRunner.scala deleted file mode 100644 index 221765fe87..0000000000 --- a/akka-bench-jmh-typed/src/main/scala/akka/BenchRunner.scala +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2018-2019 Lightbend Inc. - */ - -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) - } -} diff --git a/akka-bench-jmh/README.md b/akka-bench-jmh/README.md index 6b7446739c..48774c8eca 100644 --- a/akka-bench-jmh/README.md +++ b/akka-bench-jmh/README.md @@ -10,3 +10,8 @@ You can run them like: jmh:run -i 3 -wi 3 -f 1 .*ActorCreationBenchmark 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) diff --git a/akka-bench-jmh-typed/src/main/resources/logback-test.xml b/akka-bench-jmh/src/main/resources/logback-test.xml similarity index 100% rename from akka-bench-jmh-typed/src/main/resources/logback-test.xml rename to akka-bench-jmh/src/main/resources/logback-test.xml diff --git a/akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedActorBenchmark.scala b/akka-bench-jmh/src/main/scala/akka/actor/typed/TypedActorBenchmark.scala similarity index 96% rename from akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedActorBenchmark.scala rename to akka-bench-jmh/src/main/scala/akka/actor/typed/TypedActorBenchmark.scala index 9aff40ecf2..5b732834c8 100644 --- a/akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedActorBenchmark.scala +++ b/akka-bench-jmh/src/main/scala/akka/actor/typed/TypedActorBenchmark.scala @@ -15,7 +15,7 @@ import akka.actor.typed.scaladsl.AskPattern._ object TypedActorBenchmark { // 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 numActors = 512 @@ -39,7 +39,7 @@ class TypedActorBenchmark { @Param(Array("50")) var batchSize = 0 - @Param(Array("akka.dispatch.SingleConsumerOnlyUnboundedMailbox")) + @Param(Array("akka.dispatch.SingleConsumerOnlyUnboundedMailbox", "akka.dispatch.UnboundedMailbox")) var mailbox = "" @Param(Array("fjp-dispatcher")) // @Param(Array("fjp-dispatcher", "affinity-dispatcher")) diff --git a/akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedBenchmarkActors.scala b/akka-bench-jmh/src/main/scala/akka/actor/typed/TypedBenchmarkActors.scala similarity index 100% rename from akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedBenchmarkActors.scala rename to akka-bench-jmh/src/main/scala/akka/actor/typed/TypedBenchmarkActors.scala diff --git a/akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedForkJoinActorBenchmark.scala b/akka-bench-jmh/src/main/scala/akka/actor/typed/TypedForkJoinActorBenchmark.scala similarity index 100% rename from akka-bench-jmh-typed/src/main/scala/akka/actor/typed/TypedForkJoinActorBenchmark.scala rename to akka-bench-jmh/src/main/scala/akka/actor/typed/TypedForkJoinActorBenchmark.scala diff --git a/build.sbt b/build.sbt index 84d3af791c..4526060422 100644 --- a/build.sbt +++ b/build.sbt @@ -42,7 +42,6 @@ lazy val aggregatedProjects: Seq[ProjectReference] = List[ProjectReference]( actorTyped, actorTypedTests, benchJmh, - benchJmhTyped, cluster, clusterMetrics, clusterSharding, @@ -77,7 +76,7 @@ lazy val root = Project(id = "akka", base = file(".")) .aggregate(aggregatedProjects: _*) .settings(rootSettings: _*) .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) .enablePlugins(CopyrightHeaderForBuild) @@ -104,21 +103,13 @@ lazy val akkaScalaNightly = akkaModule("akka-scala-nightly") .disablePlugins(ValidatePullRequest, MimaPlugin, CopyrightHeaderInPr) 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"): _*) .settings(Dependencies.benchJmh) .settings(javacOptions += "-parameters") // for Jackson .enablePlugins(JmhPlugin, ScaladocNoVerificationOfDiagrams, NoPublish, CopyrightHeader) .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") .dependsOn(remote, remoteTests % "test->test", testkit % "test->test", jackson % "test->test") .settings(Dependencies.cluster)