From 3ca5064a72179290521d72d695a67b32e9bf3439 Mon Sep 17 00:00:00 2001 From: Diego Date: Tue, 11 Sep 2018 21:22:42 -0300 Subject: Improvements in ThreadLocalStorage --- .../kamon/bench/ThreadLocalStorageBenchmark.scala | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala (limited to 'kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala') diff --git a/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala b/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala new file mode 100644 index 00000000..96588798 --- /dev/null +++ b/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala @@ -0,0 +1,81 @@ +/* ========================================================================================= + * Copyright © 2013-2018 the kamon project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + * ========================================================================================= + */ + + +package kamon.bench + +import java.util.concurrent.TimeUnit + +import kamon.context.Storage.Scope +import kamon.context.{Context, Key, Storage} +import org.openjdk.jmh.annotations._ + +@State(Scope.Benchmark ) +class ThreadLocalStorageBenchmark { + + val TestKey: Key[Int] = Key.local("test-key", 0) + val ScopeWithKey: Context = Context.create().withKey(TestKey, 43) + + val TLS: Storage = new OldThreadLocal + val FTLS: Storage = new Storage.ThreadLocal + + + @Benchmark + @BenchmarkMode(Array(Mode.AverageTime)) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + @Fork + def currentThreadLocal: Context = { + val scope = TLS.store(ScopeWithKey) + TLS.current() + scope.close() + TLS.current() + } + + @Benchmark + @BenchmarkMode(Array(Mode.AverageTime)) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + @Fork + def fastThreadLocal: Context = { + val scope = FTLS.store(ScopeWithKey) + FTLS.current() + scope.close() + FTLS.current() + } +} + + +class OldThreadLocal extends Storage { + private val tls = new java.lang.ThreadLocal[Context]() { + override def initialValue(): Context = Context.Empty + } + + override def current(): Context = + tls.get() + + override def store(context: Context): Scope = { + val newContext = context + val previousContext = tls.get() + tls.set(newContext) + + new Scope { + override def context: Context = newContext + override def close(): Unit = tls.set(previousContext) + } + } +} + +object OldThreadLocal { + def apply(): OldThreadLocal = new OldThreadLocal() +} \ No newline at end of file -- cgit v1.2.3 From d62157b04ad2d0a14e367eaba1b0a63125e371ff Mon Sep 17 00:00:00 2001 From: Diego Date: Thu, 27 Sep 2018 09:59:17 -0300 Subject: fix typo --- .../src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala') diff --git a/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala b/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala index 96588798..6d8c30f2 100644 --- a/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala +++ b/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala @@ -22,7 +22,7 @@ import kamon.context.Storage.Scope import kamon.context.{Context, Key, Storage} import org.openjdk.jmh.annotations._ -@State(Scope.Benchmark ) +@State(Scope.Benchmark) class ThreadLocalStorageBenchmark { val TestKey: Key[Int] = Key.local("test-key", 0) -- cgit v1.2.3 From b5ba5c442e8cb4b0818cf5ba317654cb7d0ff8dd Mon Sep 17 00:00:00 2001 From: Diego Date: Fri, 28 Sep 2018 11:03:43 -0300 Subject: * Rename ScopeWithKey to ContextWithKey in ThreadLocalStorageBenchmark * Remove unnecessary resolver --- build.sbt | 1 - .../src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala') diff --git a/build.sbt b/build.sbt index d553d3ed..4790074f 100644 --- a/build.sbt +++ b/build.sbt @@ -80,7 +80,6 @@ lazy val coreBench = (project in file("kamon-core-bench")) .enablePlugins(JmhPlugin) .settings( moduleName := "kamon-core-bench", - resolvers += Resolver.mavenLocal, fork in Test := true) .settings(noPublishing: _*) .settings(commonSettings: _*) diff --git a/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala b/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala index 6d8c30f2..e67a913e 100644 --- a/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala +++ b/kamon-core-bench/src/main/scala/kamon/bench/ThreadLocalStorageBenchmark.scala @@ -26,7 +26,7 @@ import org.openjdk.jmh.annotations._ class ThreadLocalStorageBenchmark { val TestKey: Key[Int] = Key.local("test-key", 0) - val ScopeWithKey: Context = Context.create().withKey(TestKey, 43) + val ContextWithKey: Context = Context.create().withKey(TestKey, 43) val TLS: Storage = new OldThreadLocal val FTLS: Storage = new Storage.ThreadLocal @@ -37,7 +37,7 @@ class ThreadLocalStorageBenchmark { @OutputTimeUnit(TimeUnit.NANOSECONDS) @Fork def currentThreadLocal: Context = { - val scope = TLS.store(ScopeWithKey) + val scope = TLS.store(ContextWithKey) TLS.current() scope.close() TLS.current() @@ -48,7 +48,7 @@ class ThreadLocalStorageBenchmark { @OutputTimeUnit(TimeUnit.NANOSECONDS) @Fork def fastThreadLocal: Context = { - val scope = FTLS.store(ScopeWithKey) + val scope = FTLS.store(ContextWithKey) FTLS.current() scope.close() FTLS.current() -- cgit v1.2.3