diff options
| author | Bogdan Drutu <bdrutu@google.com> | 2018-02-26 18:42:58 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-26 18:42:58 -0800 |
| commit | feeaf3b61b0fce6cc975d567b65d60e632de8834 (patch) | |
| tree | e14543ee1306d2e753d756da42f51aaf0c1f19ea /benchmarks | |
| parent | 191015f9e89bc3318430b4b53924074dff7c55da (diff) | |
| download | platform_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.md | 17 | ||||
| -rw-r--r-- | benchmarks/build.gradle | 1 | ||||
| -rw-r--r-- | benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/BenchmarksUtil.java | 43 | ||||
| -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.java | 99 | ||||
| -rw-r--r-- | benchmarks/src/jmh/java/io/opencensus/benchmarks/trace/StartEndSpanBenchmark.java | 69 |
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(); |
