From ad5b8bcc9662c703ed07d19bcbfe8f3451083ad4 Mon Sep 17 00:00:00 2001 From: Bogdan Cristian Drutu Date: Mon, 24 Feb 2020 12:51:58 -0800 Subject: [PATCH] Cleanup jmh and trace context benchmarks Signed-off-by: Bogdan Cristian Drutu --- .../propagation/HttpTraceContextExtractBenchmark.java | 6 ++++-- .../propagation/HttpTraceContextInjectBenchmark.java | 6 ++++-- build.gradle | 10 ++++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextExtractBenchmark.java b/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextExtractBenchmark.java index a615e032684..5dc9c88e608 100644 --- a/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextExtractBenchmark.java +++ b/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextExtractBenchmark.java @@ -29,6 +29,7 @@ import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; @@ -63,10 +64,11 @@ public void setup() { } @Benchmark - @BenchmarkMode({Mode.Throughput, Mode.AverageTime}) + @BenchmarkMode({Mode.AverageTime}) @Fork(1) + @Measurement(iterations = 15, time = 1) + @OutputTimeUnit(TimeUnit.NANOSECONDS) @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 50_000, time = 1, timeUnit = TimeUnit.MILLISECONDS) public SpanContext measureExtract() { return httpTraceContext.extract(carrier, getter); } diff --git a/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java b/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java index 8ce34338021..b069140efbd 100644 --- a/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java +++ b/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java @@ -33,6 +33,7 @@ import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; 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; @@ -62,10 +63,11 @@ public void set(Map carrier, String key, String value) { /** Benchmark for measuring inject with default trace state and sampled trace options. */ @Benchmark - @BenchmarkMode({Mode.Throughput, Mode.AverageTime}) + @BenchmarkMode({Mode.AverageTime}) @Fork(1) + @Measurement(iterations = 15, time = 1) + @OutputTimeUnit(TimeUnit.NANOSECONDS) @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 50_000, time = 1, timeUnit = TimeUnit.MILLISECONDS) public Map measureInject() { httpTraceContext.inject(contextToTest, carrier, setter); return carrier; diff --git a/build.gradle b/build.gradle index ddc2669bffb..75d760a7aa9 100644 --- a/build.gradle +++ b/build.gradle @@ -90,6 +90,7 @@ subprojects { findBugsJsr305Version = '3.0.2' grpcVersion = '1.24.0' guavaVersion = '28.1-android' + jmhVersion = '1.19' opentracingVersion = '0.33.0' protobufVersion = '3.9.0' protocVersion = '3.9.0' @@ -107,6 +108,8 @@ subprojects { grpc_stub : "io.grpc:grpc-stub:${grpcVersion}", guava : "com.google.guava:guava:${guavaVersion}", javax_annotations : "javax.annotation:javax.annotation-api:1.3.2", + jmh_core : "org.openjdk.jmh:jmh-core:${jmhVersion}", + jmh_bytecode : "org.openjdk.jmh:jmh-generator-bytecode:${jmhVersion}", jsr305 : "com.google.code.findbugs:jsr305:${findBugsJsr305Version}", protobuf : "com.google.protobuf:protobuf-java:${protobufVersion}", protobuf_util : "com.google.protobuf:protobuf-java-util:${protobufVersion}", @@ -229,15 +232,13 @@ subprojects { // Always include the jmhreport plugin and run it after jmh task. pluginManager.apply "io.morethan.jmhreport" dependencies { - jmh 'org.openjdk.jmh:jmh-core:1.19', - 'org.openjdk.jmh:jmh-generator-bytecode:1.19' + jmh libraries.jmh_core, + libraries.jmh_bytecode } // invoke jmh on a single benchmark class like so: // ./gradlew -PjmhIncludeSingleClass=StatsTraceContextBenchmark clean :grpc-core:jmh jmh { - warmupIterations = 5 - iterations = 10 fork = 1 failOnError = true resultFormat = 'JSON' @@ -245,6 +246,7 @@ subprojects { // dependencies that break when including them. (context's testCompile // depends on core; core's testCompile depends on testing) includeTests = false + profilers = ["gc"] if (project.hasProperty('jmhIncludeSingleClass')) { include = [ project.property('jmhIncludeSingleClass')