pekko/akka-bench-jmh/src/main/scala/akka/cluster/ddata/ORSetMergeBenchmark.scala

80 lines
2.8 KiB
Scala
Raw Normal View History

=cdd #18328 add JMH benchmark, baseline [info] Benchmark (set1Size) Mode Cnt Score Error Units [info] ORSetMergeBenchmark.mergeAddFromBothNodes 1 thrpt 10 492.291 ± 55.903 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 10 thrpt 10 79.890 ± 4.977 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 20 thrpt 10 44.560 ± 9.081 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 100 thrpt 10 9.405 ± 0.323 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 1 thrpt 10 714.043 ± 14.694 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 10 thrpt 10 88.281 ± 13.858 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 20 thrpt 10 49.001 ± 0.940 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 100 thrpt 10 9.379 ± 0.300 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 1 thrpt 10 487.261 ± 7.457 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 10 thrpt 10 80.073 ± 9.736 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 20 thrpt 10 46.385 ± 1.225 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 100 thrpt 10 9.583 ± 0.234 ops/ms [info] ORSetMergeBenchmark.mergeComplex 1 thrpt 10 313.959 ± 31.419 ops/ms [info] ORSetMergeBenchmark.mergeComplex 10 thrpt 10 79.265 ± 1.126 ops/ms [info] ORSetMergeBenchmark.mergeComplex 20 thrpt 10 44.478 ± 2.077 ops/ms [info] ORSetMergeBenchmark.mergeComplex 100 thrpt 10 9.202 ± 0.564 ops/ms [info] Benchmark (size) Mode Cnt Score Error Units [info] VersionVectorBenchmark.compareGreaterThan1 1 thrpt 10 15628.820 ± 913.690 ops/ms [info] VersionVectorBenchmark.compareGreaterThan1 2 thrpt 10 15471.453 ± 216.868 ops/ms [info] VersionVectorBenchmark.compareGreaterThan1 5 thrpt 10 12518.032 ± 1599.615 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 1 thrpt 10 15320.311 ± 279.346 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 2 thrpt 10 13667.638 ± 414.068 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 5 thrpt 10 12708.479 ± 287.942 ops/ms [info] VersionVectorBenchmark.compareSame1 1 thrpt 10 16096.976 ± 495.227 ops/ms [info] VersionVectorBenchmark.compareSame1 2 thrpt 10 15399.394 ± 305.350 ops/ms [info] VersionVectorBenchmark.compareSame1 5 thrpt 10 12754.067 ± 1466.724 ops/ms [info] VersionVectorBenchmark.compareSame2 1 thrpt 10 15282.217 ± 318.708 ops/ms [info] VersionVectorBenchmark.compareSame2 2 thrpt 10 13777.859 ± 328.712 ops/ms [info] VersionVectorBenchmark.compareSame2 5 thrpt 10 12711.851 ± 1159.166 ops/ms [info] VersionVectorBenchmark.increment 1 thrpt 10 33512.998 ± 610.102 ops/ms [info] VersionVectorBenchmark.increment 2 thrpt 10 32245.963 ± 317.847 ops/ms [info] VersionVectorBenchmark.increment 5 thrpt 10 20970.493 ± 346.039 ops/ms [info] VersionVectorBenchmark.merge 1 thrpt 10 31914.961 ± 1000.649 ops/ms [info] VersionVectorBenchmark.merge 2 thrpt 10 14560.442 ± 732.734 ops/ms [info] VersionVectorBenchmark.merge 5 thrpt 10 3673.067 ± 148.871 ops/ms [info] VersionVectorBenchmark.mergeConflicting 1 thrpt 10 5436.032 ± 531.450 ops/ms [info] VersionVectorBenchmark.mergeConflicting 2 thrpt 10 4641.969 ± 59.338 ops/ms [info] VersionVectorBenchmark.mergeConflicting 5 thrpt 10 3489.843 ± 127.217 ops/ms
2015-09-19 15:29:48 +02:00
/**
* Copyright (C) 2015-2016 Lightbend Inc. <http://www.lightbend.com>
=cdd #18328 add JMH benchmark, baseline [info] Benchmark (set1Size) Mode Cnt Score Error Units [info] ORSetMergeBenchmark.mergeAddFromBothNodes 1 thrpt 10 492.291 ± 55.903 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 10 thrpt 10 79.890 ± 4.977 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 20 thrpt 10 44.560 ± 9.081 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 100 thrpt 10 9.405 ± 0.323 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 1 thrpt 10 714.043 ± 14.694 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 10 thrpt 10 88.281 ± 13.858 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 20 thrpt 10 49.001 ± 0.940 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 100 thrpt 10 9.379 ± 0.300 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 1 thrpt 10 487.261 ± 7.457 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 10 thrpt 10 80.073 ± 9.736 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 20 thrpt 10 46.385 ± 1.225 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 100 thrpt 10 9.583 ± 0.234 ops/ms [info] ORSetMergeBenchmark.mergeComplex 1 thrpt 10 313.959 ± 31.419 ops/ms [info] ORSetMergeBenchmark.mergeComplex 10 thrpt 10 79.265 ± 1.126 ops/ms [info] ORSetMergeBenchmark.mergeComplex 20 thrpt 10 44.478 ± 2.077 ops/ms [info] ORSetMergeBenchmark.mergeComplex 100 thrpt 10 9.202 ± 0.564 ops/ms [info] Benchmark (size) Mode Cnt Score Error Units [info] VersionVectorBenchmark.compareGreaterThan1 1 thrpt 10 15628.820 ± 913.690 ops/ms [info] VersionVectorBenchmark.compareGreaterThan1 2 thrpt 10 15471.453 ± 216.868 ops/ms [info] VersionVectorBenchmark.compareGreaterThan1 5 thrpt 10 12518.032 ± 1599.615 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 1 thrpt 10 15320.311 ± 279.346 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 2 thrpt 10 13667.638 ± 414.068 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 5 thrpt 10 12708.479 ± 287.942 ops/ms [info] VersionVectorBenchmark.compareSame1 1 thrpt 10 16096.976 ± 495.227 ops/ms [info] VersionVectorBenchmark.compareSame1 2 thrpt 10 15399.394 ± 305.350 ops/ms [info] VersionVectorBenchmark.compareSame1 5 thrpt 10 12754.067 ± 1466.724 ops/ms [info] VersionVectorBenchmark.compareSame2 1 thrpt 10 15282.217 ± 318.708 ops/ms [info] VersionVectorBenchmark.compareSame2 2 thrpt 10 13777.859 ± 328.712 ops/ms [info] VersionVectorBenchmark.compareSame2 5 thrpt 10 12711.851 ± 1159.166 ops/ms [info] VersionVectorBenchmark.increment 1 thrpt 10 33512.998 ± 610.102 ops/ms [info] VersionVectorBenchmark.increment 2 thrpt 10 32245.963 ± 317.847 ops/ms [info] VersionVectorBenchmark.increment 5 thrpt 10 20970.493 ± 346.039 ops/ms [info] VersionVectorBenchmark.merge 1 thrpt 10 31914.961 ± 1000.649 ops/ms [info] VersionVectorBenchmark.merge 2 thrpt 10 14560.442 ± 732.734 ops/ms [info] VersionVectorBenchmark.merge 5 thrpt 10 3673.067 ± 148.871 ops/ms [info] VersionVectorBenchmark.mergeConflicting 1 thrpt 10 5436.032 ± 531.450 ops/ms [info] VersionVectorBenchmark.mergeConflicting 2 thrpt 10 4641.969 ± 59.338 ops/ms [info] VersionVectorBenchmark.mergeConflicting 5 thrpt 10 3489.843 ± 127.217 ops/ms
2015-09-19 15:29:48 +02:00
*/
package akka.cluster.ddata
import java.util.concurrent.TimeUnit
import org.openjdk.jmh.annotations.Benchmark
import org.openjdk.jmh.annotations.BenchmarkMode
import org.openjdk.jmh.annotations.Fork
import org.openjdk.jmh.annotations.Measurement
import org.openjdk.jmh.annotations.Mode
import org.openjdk.jmh.annotations.OutputTimeUnit
import org.openjdk.jmh.annotations.{ Scope => JmhScope }
import org.openjdk.jmh.annotations.State
import org.openjdk.jmh.annotations.Warmup
import akka.cluster.UniqueAddress
import akka.actor.Address
import org.openjdk.jmh.annotations.Param
import org.openjdk.jmh.annotations.Setup
import org.openjdk.jmh.annotations.Level
@Fork(2)
@State(JmhScope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
@Warmup(iterations = 4)
@Measurement(iterations = 5)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
class ORSetMergeBenchmark {
@Param(Array("1", "10", "20", "100"))
var set1Size = 0
val nodeA = UniqueAddress(Address("akka.tcp", "Sys", "aaaa", 2552), 1)
val nodeB = UniqueAddress(nodeA.address.copy(host = Some("bbbb")), 2)
val nodeC = UniqueAddress(nodeA.address.copy(host = Some("cccc")), 3)
val nodeD = UniqueAddress(nodeA.address.copy(host = Some("dddd")), 4)
val nodeE = UniqueAddress(nodeA.address.copy(host = Some("eeee")), 5)
val nodes = Vector(nodeA, nodeB, nodeC, nodeD, nodeE)
val nodesIndex = Iterator.from(0)
def nextNode(): UniqueAddress = nodes(nodesIndex.next() % nodes.size)
var set1: ORSet[String] = _
var addFromSameNode: ORSet[String] = _
var addFromOtherNode: ORSet[String] = _
var complex1: ORSet[String] = _
var complex2: ORSet[String] = _
var elem1: String = _
var elem2: String = _
@Setup(Level.Trial)
2016-03-05 22:34:57 -05:00
def setup():Unit = {
=cdd #18328 add JMH benchmark, baseline [info] Benchmark (set1Size) Mode Cnt Score Error Units [info] ORSetMergeBenchmark.mergeAddFromBothNodes 1 thrpt 10 492.291 ± 55.903 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 10 thrpt 10 79.890 ± 4.977 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 20 thrpt 10 44.560 ± 9.081 ops/ms [info] ORSetMergeBenchmark.mergeAddFromBothNodes 100 thrpt 10 9.405 ± 0.323 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 1 thrpt 10 714.043 ± 14.694 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 10 thrpt 10 88.281 ± 13.858 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 20 thrpt 10 49.001 ± 0.940 ops/ms [info] ORSetMergeBenchmark.mergeAddFromOtherNode 100 thrpt 10 9.379 ± 0.300 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 1 thrpt 10 487.261 ± 7.457 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 10 thrpt 10 80.073 ± 9.736 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 20 thrpt 10 46.385 ± 1.225 ops/ms [info] ORSetMergeBenchmark.mergeAddFromSameNode 100 thrpt 10 9.583 ± 0.234 ops/ms [info] ORSetMergeBenchmark.mergeComplex 1 thrpt 10 313.959 ± 31.419 ops/ms [info] ORSetMergeBenchmark.mergeComplex 10 thrpt 10 79.265 ± 1.126 ops/ms [info] ORSetMergeBenchmark.mergeComplex 20 thrpt 10 44.478 ± 2.077 ops/ms [info] ORSetMergeBenchmark.mergeComplex 100 thrpt 10 9.202 ± 0.564 ops/ms [info] Benchmark (size) Mode Cnt Score Error Units [info] VersionVectorBenchmark.compareGreaterThan1 1 thrpt 10 15628.820 ± 913.690 ops/ms [info] VersionVectorBenchmark.compareGreaterThan1 2 thrpt 10 15471.453 ± 216.868 ops/ms [info] VersionVectorBenchmark.compareGreaterThan1 5 thrpt 10 12518.032 ± 1599.615 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 1 thrpt 10 15320.311 ± 279.346 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 2 thrpt 10 13667.638 ± 414.068 ops/ms [info] VersionVectorBenchmark.compareGreaterThan2 5 thrpt 10 12708.479 ± 287.942 ops/ms [info] VersionVectorBenchmark.compareSame1 1 thrpt 10 16096.976 ± 495.227 ops/ms [info] VersionVectorBenchmark.compareSame1 2 thrpt 10 15399.394 ± 305.350 ops/ms [info] VersionVectorBenchmark.compareSame1 5 thrpt 10 12754.067 ± 1466.724 ops/ms [info] VersionVectorBenchmark.compareSame2 1 thrpt 10 15282.217 ± 318.708 ops/ms [info] VersionVectorBenchmark.compareSame2 2 thrpt 10 13777.859 ± 328.712 ops/ms [info] VersionVectorBenchmark.compareSame2 5 thrpt 10 12711.851 ± 1159.166 ops/ms [info] VersionVectorBenchmark.increment 1 thrpt 10 33512.998 ± 610.102 ops/ms [info] VersionVectorBenchmark.increment 2 thrpt 10 32245.963 ± 317.847 ops/ms [info] VersionVectorBenchmark.increment 5 thrpt 10 20970.493 ± 346.039 ops/ms [info] VersionVectorBenchmark.merge 1 thrpt 10 31914.961 ± 1000.649 ops/ms [info] VersionVectorBenchmark.merge 2 thrpt 10 14560.442 ± 732.734 ops/ms [info] VersionVectorBenchmark.merge 5 thrpt 10 3673.067 ± 148.871 ops/ms [info] VersionVectorBenchmark.mergeConflicting 1 thrpt 10 5436.032 ± 531.450 ops/ms [info] VersionVectorBenchmark.mergeConflicting 2 thrpt 10 4641.969 ± 59.338 ops/ms [info] VersionVectorBenchmark.mergeConflicting 5 thrpt 10 3489.843 ± 127.217 ops/ms
2015-09-19 15:29:48 +02:00
set1 = (1 to set1Size).foldLeft(ORSet.empty[String])((s, n) => s.add(nextNode(), "elem" + n))
addFromSameNode = set1.add(nodeA, "elem" + set1Size + 1).merge(set1)
addFromOtherNode = set1.add(nodeB, "elem" + set1Size + 1).merge(set1)
complex1 = set1.add(nodeB, "a").add(nodeC, "b").remove(nodeD, "elem" + set1Size).merge(set1)
complex2 = set1.add(nodeA, "a").add(nodeA, "c").add(nodeB, "d").merge(set1)
elem1 = "elem" + (set1Size + 1)
elem2 = "elem" + (set1Size + 2)
}
@Benchmark
def mergeAddFromSameNode: ORSet[String] = {
// this is the scenario when updating and then merging with local value
// set2 produced by modify function
val set2 = set1.add(nodeA, elem1).add(nodeA, elem2)
// replicator merges with local value
set1.merge(set2)
}
@Benchmark
def mergeAddFromOtherNode: ORSet[String] = set1.merge(addFromOtherNode)
@Benchmark
def mergeAddFromBothNodes: ORSet[String] = addFromSameNode.merge(addFromOtherNode)
@Benchmark
def mergeComplex: ORSet[String] = complex1.merge(complex2)
}