From 2392fb02c3259d7f0b41ff410641accd818bc5d4 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Mon, 25 Mar 2019 16:29:21 +0100 Subject: Introduce a TagSet builder and use UnifiedMap from Eclipse Collections as the underlying storage for TagSets. --- .../kamon/bench/TagSetCreationBenchmark.scala | 42 +++++++++++++++++ .../scala/kamon/bench/TagSetLookupBenchmark.scala | 55 ++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 kamon-core-bench/src/main/scala/kamon/bench/TagSetCreationBenchmark.scala create mode 100644 kamon-core-bench/src/main/scala/kamon/bench/TagSetLookupBenchmark.scala (limited to 'kamon-core-bench/src/main/scala/kamon/bench') diff --git a/kamon-core-bench/src/main/scala/kamon/bench/TagSetCreationBenchmark.scala b/kamon-core-bench/src/main/scala/kamon/bench/TagSetCreationBenchmark.scala new file mode 100644 index 00000000..9b8f1d7a --- /dev/null +++ b/kamon-core-bench/src/main/scala/kamon/bench/TagSetCreationBenchmark.scala @@ -0,0 +1,42 @@ +package kamon.bench + +import java.util.concurrent.TimeUnit + +import kamon.tag.TagSet +import org.openjdk.jmh.annotations._ + +@BenchmarkMode(Array(Mode.AverageTime)) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Fork(1) +@State(Scope.Benchmark) +class TagSetCreationBenchmark { + + @Param(Array("1", "2", "3", "4", "5", "6")) + var tagCount: Int = 1 + + @Benchmark + def createTagSetFromIndividualKeys(): TagSet = { + var tags = TagSet.Empty + tags = tags.withTag("http.method", "POST") + if(tagCount > 1) tags = tags.withTag("http.url", "http://localhost:8080/test") + if(tagCount > 2) tags = tags.withTag("http.status_code", 200L) + if(tagCount > 3) tags = tags.withTag("error", false) + if(tagCount > 4) tags = tags.withTag("userID", "abcdef") + if(tagCount > 5) tags = tags.withTag("correlationID", "0123456") + + tags + } + + @Benchmark + def createTagSetFromBuilder(): TagSet = { + val tags = TagSet.builder() + tags.add("http.method", "POST") + if(tagCount > 1) tags.add("http.url", "http://localhost:8080/test") + if(tagCount > 2) tags.add("http.status_code", 200L) + if(tagCount > 3) tags.add("error", false) + if(tagCount > 4) tags.add("userID", "abcdef") + if(tagCount > 5) tags.add("correlationID", "0123456") + + tags.create() + } +} diff --git a/kamon-core-bench/src/main/scala/kamon/bench/TagSetLookupBenchmark.scala b/kamon-core-bench/src/main/scala/kamon/bench/TagSetLookupBenchmark.scala new file mode 100644 index 00000000..b8a63d84 --- /dev/null +++ b/kamon-core-bench/src/main/scala/kamon/bench/TagSetLookupBenchmark.scala @@ -0,0 +1,55 @@ +package kamon.bench + +import java.util.concurrent.TimeUnit + +import kamon.tag.TagSet +import org.openjdk.jmh.annotations._ +import kamon.tag.Lookups.any + +@BenchmarkMode(Array(Mode.AverageTime)) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Fork(1) +@State(Scope.Benchmark) +class TagSetLookupBenchmark { + + def builderTags() = TagSet.builder() + .add("http.url", "http://localhost:8080/test") + .add("http.status_code", 200L) + .add("error", false) + .add("userID", "abcdef") + .add("correlationID", "0123456") + .create() + + def keyByKeyTags() = TagSet.Empty + .withTag("http.url", "http://localhost:8080/test") + .withTag("http.status_code", 200L) + .withTag("error", false) + .withTag("userID", "abcdef") + .withTag("correlationID", "0123456") + + + val builderLeft = builderTags() + val builderRight = builderTags() + val keyByKeyLeft = keyByKeyTags() + val keyByKeyRight = keyByKeyTags() + + @Benchmark + def equalityOnBuilderTagSets(): Boolean = { + builderLeft == builderRight + } + + @Benchmark + def equalityOnKeyByKeyTagSets(): Boolean = { + keyByKeyLeft == keyByKeyRight + } + + @Benchmark + def anyLookupOnBuilderTagSet(): Any = { + builderLeft.get(any("userID")) + } + + @Benchmark + def anyLookupOnKeyByKeyTagSet(): Any = { + keyByKeyLeft.get(any("userID")) + } +} -- cgit v1.2.3