aboutsummaryrefslogtreecommitdiffstats
path: root/benchmarks
diff options
context:
space:
mode:
authorBogdan Drutu <bdrutu@google.com>2018-02-26 18:42:58 -0800
committerGitHub <noreply@github.com>2018-02-26 18:42:58 -0800
commitfeeaf3b61b0fce6cc975d567b65d60e632de8834 (patch)
treee14543ee1306d2e753d756da42f51aaf0c1f19ea /benchmarks
parent191015f9e89bc3318430b4b53924074dff7c55da (diff)
downloadplatform_external_opencensus-java-feeaf3b61b0fce6cc975d567b65d60e632de8834.tar.gz
platform_external_opencensus-java-feeaf3b61b0fce6cc975d567b65d60e632de8834.tar.bz2
platform_external_opencensus-java-feeaf3b61b0fce6cc975d567b65d60e632de8834.zip
Cleanup benchmarks and test both impl and impl-lite. (#1022)
* Cleanup benchmarks and test both impl and impl-lite. * Fix comments.
Diffstat (limited to 'benchmarks')
-rw-r--r--benchmarks/README.md17
-rw-r--r--benchmarks/build.gradle1
-rw-r--r--benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/BenchmarksUtil.java43
-rw-r--r--benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsBenchmark.java (renamed from benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsNonSampledSpanBenchmark.java)87
-rw-r--r--benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsSampledSpanBenchmark.java99
-rw-r--r--benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/StartEndSpanBenchmark.java69
6 files changed, 159 insertions, 157 deletions
diff --git a/benchmarks/README.md b/benchmarks/README.md
index e4027008..617333bf 100644
--- a/benchmarks/README.md
+++ b/benchmarks/README.md
@@ -3,5 +3,20 @@
## To run the benchmark use
```
-$ ./gradlew :benchmarks:jmh
+$ ./gradlew :opencensus-benchmarks:jmh
```
+
+## To debug compilation errors
+When you make incompatible changes in the Benchmarks classes you may get compilation errors which
+are related to the old code not being compatible with the new code. Some of the reasons are:
+* Any plugin cannot delete the generated code (jmh generates code) because if the user configured
+the directory as the same as source code the plugin will delete users source code.
+* After you run jmh a gradle demon will stay alive which may cache the generated code in memory and
+generates the same code even if the files were changed.
+
+Run this commands to clean the Gradle's cache:
+```bash
+./gradlew --stop
+rm -fr .gradle/
+rm -fr benchmarks/build
+``` \ No newline at end of file
diff --git a/benchmarks/build.gradle b/benchmarks/build.gradle
index 47a59d4e..dcfda9bf 100644
--- a/benchmarks/build.gradle
+++ b/benchmarks/build.gradle
@@ -28,6 +28,7 @@ jmh {
dependencies {
compile project(':opencensus-api'),
project(':opencensus-impl-core'),
+ project(':opencensus-impl-lite'),
project(':opencensus-impl')
}
diff --git a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/BenchmarksUtil.java b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/BenchmarksUtil.java
new file mode 100644
index 00000000..e917817a
--- /dev/null
+++ b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/BenchmarksUtil.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2018, OpenCensus Authors
+ *
+ * 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 io.opencensus.benchmarks.trace;
+
+import io.opencensus.impllite.trace.TraceComponentImplLite;
+import io.opencensus.trace.Tracer;
+import io.opencensus.trace.Tracing;
+
+/** Util class for Benchmarks. */
+final class BenchmarksUtil {
+ private static final TraceComponentImplLite traceComponentImplLite = new TraceComponentImplLite();
+
+ static Tracer getTracer(String implementation) {
+ if (implementation.equals("impl")) {
+ // We can return the global tracer here because if impl is linked the global tracer will be
+ // the impl one.
+ // TODO(bdrutu): Make everything not be a singleton (disruptor, etc.) and use a new
+ // TraceComponentImpl similar to TraceComponentImplLite.
+ return Tracing.getTracer();
+ } else if (implementation.equals("impl-lite")) {
+ return traceComponentImplLite.getTracer();
+ } else {
+ throw new RuntimeException("Invalid tracer implementation requested.");
+ }
+ }
+
+ // Avoid instances of this class.
+ private BenchmarksUtil() {}
+}
diff --git a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsNonSampledSpanBenchmark.java b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsBenchmark.java
index ffdc802b..992937a1 100644
--- a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsNonSampledSpanBenchmark.java
+++ b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsBenchmark.java
@@ -16,84 +16,107 @@
package io.opencensus.benchmarks.trace;
+import static com.google.common.base.Preconditions.checkState;
+
import io.opencensus.trace.AttributeValue;
+import io.opencensus.trace.BlankSpan;
import io.opencensus.trace.Link;
+import io.opencensus.trace.MessageEvent.Type;
import io.opencensus.trace.Span;
import io.opencensus.trace.Tracer;
-import io.opencensus.trace.Tracing;
import io.opencensus.trace.samplers.Samplers;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.TearDown;
/** Benchmarks for {@link Span} to record trace events. */
@State(Scope.Benchmark)
-public class RecordTraceEventsNonSampledSpanBenchmark {
- private static final Tracer tracer = Tracing.getTracer();
+public class RecordTraceEventsBenchmark {
private static final String SPAN_NAME = "MySpanName";
private static final String ANNOTATION_DESCRIPTION = "MyAnnotation";
private static final String ATTRIBUTE_KEY = "MyAttributeKey";
private static final String ATTRIBUTE_VALUE = "MyAttributeValue";
- private final Span linkedSpan =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, null)
- .setSampler(Samplers.neverSample())
- .startSpan();
- private final Span span =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, null)
- .setSampler(Samplers.neverSample())
- .startSpan();
- /** TearDown method. */
- @TearDown
- public void doTearDown() {
- span.end();
- linkedSpan.end();
+ @State(Scope.Benchmark)
+ public static class Data {
+
+ private Span linkedSpan = BlankSpan.INSTANCE;
+ private Span span = BlankSpan.INSTANCE;
+
+ @Param({"impl", "impl-lite"})
+ String implementation;
+
+ @Param({"true", "false"})
+ boolean sampled;
+
+ @Setup
+ public void setup() {
+ Tracer tracer = BenchmarksUtil.getTracer(implementation);
+ linkedSpan =
+ tracer
+ .spanBuilderWithExplicitParent(SPAN_NAME, null)
+ .setSampler(sampled ? Samplers.alwaysSample() : Samplers.neverSample())
+ .startSpan();
+ span =
+ tracer
+ .spanBuilderWithExplicitParent(SPAN_NAME, null)
+ .setSampler(sampled ? Samplers.alwaysSample() : Samplers.neverSample())
+ .startSpan();
+ }
+
+ @TearDown
+ public void doTearDown() {
+ checkState(linkedSpan != BlankSpan.INSTANCE, "Uninitialized linkedSpan");
+ checkState(span != BlankSpan.INSTANCE, "Uninitialized span");
+ linkedSpan.end();
+ span.end();
+ }
}
/** This benchmark attempts to measure performance of adding an attribute to the span. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span putAttribute() {
- span.putAttribute(ATTRIBUTE_KEY, AttributeValue.stringAttributeValue(ATTRIBUTE_VALUE));
- return span;
+ public Span putAttribute(Data data) {
+ data.span.putAttribute(ATTRIBUTE_KEY, AttributeValue.stringAttributeValue(ATTRIBUTE_VALUE));
+ return data.span;
}
/** This benchmark attempts to measure performance of adding an annotation to the span. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span addAnnotation() {
- span.addAnnotation(ANNOTATION_DESCRIPTION);
- return span;
+ public Span addAnnotation(Data data) {
+ data.span.addAnnotation(ANNOTATION_DESCRIPTION);
+ return data.span;
}
/** This benchmark attempts to measure performance of adding a network event to the span. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- @SuppressWarnings("deprecation")
- public Span addNetworkEvent() {
- span.addNetworkEvent(
- io.opencensus.trace.NetworkEvent.builder(io.opencensus.trace.NetworkEvent.Type.RECV, 1)
+ public Span addMessageEvent(Data data) {
+ data.span.addMessageEvent(
+ io.opencensus.trace.MessageEvent.builder(Type.RECEIVED, 1)
.setUncompressedMessageSize(3)
.build());
- return span;
+ return data.span;
}
/** This benchmark attempts to measure performance of adding a link to the span. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span addLink() {
- span.addLink(Link.fromSpanContext(linkedSpan.getContext(), Link.Type.PARENT_LINKED_SPAN));
- return span;
+ public Span addLink(Data data) {
+ data.span.addLink(
+ Link.fromSpanContext(data.linkedSpan.getContext(), Link.Type.PARENT_LINKED_SPAN));
+ return data.span;
}
}
diff --git a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsSampledSpanBenchmark.java b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsSampledSpanBenchmark.java
deleted file mode 100644
index 71b97316..00000000
--- a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/RecordTraceEventsSampledSpanBenchmark.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2017, OpenCensus Authors
- *
- * 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 io.opencensus.benchmarks.trace;
-
-import io.opencensus.trace.AttributeValue;
-import io.opencensus.trace.Link;
-import io.opencensus.trace.Span;
-import io.opencensus.trace.Tracer;
-import io.opencensus.trace.Tracing;
-import io.opencensus.trace.samplers.Samplers;
-import java.util.concurrent.TimeUnit;
-import org.openjdk.jmh.annotations.Benchmark;
-import org.openjdk.jmh.annotations.BenchmarkMode;
-import org.openjdk.jmh.annotations.Mode;
-import org.openjdk.jmh.annotations.OutputTimeUnit;
-import org.openjdk.jmh.annotations.Scope;
-import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.annotations.TearDown;
-
-/** Benchmarks for {@link Span} to record trace events. */
-@State(Scope.Benchmark)
-public class RecordTraceEventsSampledSpanBenchmark {
- private static final Tracer tracer = Tracing.getTracer();
- private static final String SPAN_NAME = "MySpanName";
- private static final String ANNOTATION_DESCRIPTION = "MyAnnotation";
- private static final String ATTRIBUTE_KEY = "MyAttributeKey";
- private static final String ATTRIBUTE_VALUE = "MyAttributeValue";
- private final Span linkedSpan =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, null)
- .setSampler(Samplers.alwaysSample())
- .startSpan();
- private final Span span =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, null)
- .setSampler(Samplers.alwaysSample())
- .startSpan();
-
- /** TearDown method. */
- @TearDown
- public void doTearDown() {
- span.end();
- linkedSpan.end();
- }
-
- /** This benchmark attempts to measure performance of adding an attribute to the span. */
- @Benchmark
- @BenchmarkMode(Mode.SampleTime)
- @OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span putAttribute() {
- span.putAttribute(ATTRIBUTE_KEY, AttributeValue.stringAttributeValue(ATTRIBUTE_VALUE));
- return span;
- }
-
- /** This benchmark attempts to measure performance of adding an annotation to the span. */
- @Benchmark
- @BenchmarkMode(Mode.SampleTime)
- @OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span addAnnotation() {
- span.addAnnotation(ANNOTATION_DESCRIPTION);
- return span;
- }
-
- /** This benchmark attempts to measure performance of adding a network event to the span. */
- @Benchmark
- @BenchmarkMode(Mode.SampleTime)
- @OutputTimeUnit(TimeUnit.NANOSECONDS)
- @SuppressWarnings("deprecation")
- public Span addNetworkEvent() {
- span.addNetworkEvent(
- io.opencensus.trace.NetworkEvent.builder(io.opencensus.trace.NetworkEvent.Type.RECV, 1)
- .setUncompressedMessageSize(3)
- .build());
- return span;
- }
-
- /** This benchmark attempts to measure performance of adding a link to the span. */
- @Benchmark
- @BenchmarkMode(Mode.SampleTime)
- @OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span addLink() {
- span.addLink(Link.fromSpanContext(linkedSpan.getContext(), Link.Type.PARENT_LINKED_SPAN));
- return span;
- }
-}
diff --git a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/StartEndSpanBenchmark.java b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/StartEndSpanBenchmark.java
index cd677228..02f77f5f 100644
--- a/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/StartEndSpanBenchmark.java
+++ b/benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/StartEndSpanBenchmark.java
@@ -16,33 +16,52 @@
package io.opencensus.benchmarks.trace;
+import static com.google.common.base.Preconditions.checkState;
+
+import io.opencensus.trace.BlankSpan;
import io.opencensus.trace.Span;
import io.opencensus.trace.Tracer;
-import io.opencensus.trace.Tracing;
import io.opencensus.trace.samplers.Samplers;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.TearDown;
/** Benchmarks for {@link io.opencensus.trace.SpanBuilder} and {@link Span}. */
@State(Scope.Benchmark)
public class StartEndSpanBenchmark {
- private static final Tracer tracer = Tracing.getTracer();
private static final String SPAN_NAME = "MySpanName";
- private final Span rootSpan =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, null)
- .setSampler(Samplers.neverSample())
- .startSpan();
- @TearDown
- public void doTearDown() {
- rootSpan.end();
+ @State(Scope.Benchmark)
+ public static class Data {
+ private Tracer tracer;
+ private Span rootSpan = BlankSpan.INSTANCE;
+
+ @Param({"impl", "impl-lite"})
+ String implementation;
+
+ @Setup
+ public void setup() {
+ tracer = BenchmarksUtil.getTracer(implementation);
+
+ rootSpan =
+ tracer
+ .spanBuilderWithExplicitParent(SPAN_NAME, null)
+ .setSampler(Samplers.neverSample())
+ .startSpan();
+ }
+
+ @TearDown
+ public void doTearDown() {
+ checkState(rootSpan != BlankSpan.INSTANCE, "Uninitialized rootSpan");
+ rootSpan.end();
+ }
}
/**
@@ -52,9 +71,9 @@ public class StartEndSpanBenchmark {
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span startEndNonSampledRootSpan() {
+ public Span startEndNonSampledRootSpan(Data data) {
Span span =
- tracer
+ data.tracer
.spanBuilderWithExplicitParent(SPAN_NAME, null)
.setSampler(Samplers.neverSample())
.startSpan();
@@ -69,9 +88,9 @@ public class StartEndSpanBenchmark {
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span startEndRecordEventsRootSpan() {
+ public Span startEndRecordEventsRootSpan(Data data) {
Span span =
- tracer
+ data.tracer
.spanBuilderWithExplicitParent(SPAN_NAME, null)
.setSampler(Samplers.neverSample())
.setRecordEvents(true)
@@ -86,8 +105,8 @@ public class StartEndSpanBenchmark {
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span startEndSampledRootSpan() {
- Span span = tracer.spanBuilder(SPAN_NAME).setSampler(Samplers.alwaysSample()).startSpan();
+ public Span startEndSampledRootSpan(Data data) {
+ Span span = data.tracer.spanBuilder(SPAN_NAME).setSampler(Samplers.alwaysSample()).startSpan();
span.end();
return span;
}
@@ -99,10 +118,10 @@ public class StartEndSpanBenchmark {
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span startEndNonSampledChildSpan() {
+ public Span startEndNonSampledChildSpan(Data data) {
Span span =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, rootSpan)
+ data.tracer
+ .spanBuilderWithExplicitParent(SPAN_NAME, data.rootSpan)
.setSampler(Samplers.neverSample())
.startSpan();
span.end();
@@ -116,10 +135,10 @@ public class StartEndSpanBenchmark {
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span startEndRecordEventsChildSpan() {
+ public Span startEndRecordEventsChildSpan(Data data) {
Span span =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, rootSpan)
+ data.tracer
+ .spanBuilderWithExplicitParent(SPAN_NAME, data.rootSpan)
.setSampler(Samplers.neverSample())
.setRecordEvents(true)
.startSpan();
@@ -133,10 +152,10 @@ public class StartEndSpanBenchmark {
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
- public Span startEndSampledChildSpan() {
+ public Span startEndSampledChildSpan(Data data) {
Span span =
- tracer
- .spanBuilderWithExplicitParent(SPAN_NAME, rootSpan)
+ data.tracer
+ .spanBuilderWithExplicitParent(SPAN_NAME, data.rootSpan)
.setSampler(Samplers.alwaysSample())
.startSpan();
span.end();