From 66512605162424a5d98cdafe9e116f1076c033a3 Mon Sep 17 00:00:00 2001 From: bchambers Date: Tue, 28 Jun 2016 15:55:16 -0700 Subject: [PATCH 1/8] Add initial microbenchmarks directory --- sdks/java/microbenchmarks/README.md | 23 ++ sdks/java/microbenchmarks/pom.xml | 110 ++++++++ .../transforms/DoFnReflectorBenchmark.java | 234 ++++++++++++++++++ 3 files changed, 367 insertions(+) create mode 100644 sdks/java/microbenchmarks/README.md create mode 100644 sdks/java/microbenchmarks/pom.xml create mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java diff --git a/sdks/java/microbenchmarks/README.md b/sdks/java/microbenchmarks/README.md new file mode 100644 index 0000000000000..d3a406a67d266 --- /dev/null +++ b/sdks/java/microbenchmarks/README.md @@ -0,0 +1,23 @@ +# Microbenchmarks for parts of the Beam SDK + +To run benchmarks: + + 1. Run `mvn install` in the top directory to install the SDK. + + 2. Build the benchmark package: + + cd microbenchmarks + mvn package + + 3. run benchmark harness: + + java -jar target/microbenchmarks.jar + + 4. (alternate to step 3) + to run just a subset of benchmarks, pass a regular expression that + matches the benchmarks you want to run (this can match against the class + name, or the method name). E.g., to run any benchmarks with + "DoFnReflector" in the name: + + java -jar target/microbenchmarks.jar ".*DoFnReflector.*" + diff --git a/sdks/java/microbenchmarks/pom.xml b/sdks/java/microbenchmarks/pom.xml new file mode 100644 index 0000000000000..304c87733e6ab --- /dev/null +++ b/sdks/java/microbenchmarks/pom.xml @@ -0,0 +1,110 @@ + + + + + 4.0.0 + + + org.apache.beam + beam-sdks-java-parent + 0.2.0-incubating-SNAPSHOT + ../pom.xml + + + beam-sdks-java-io-microbenchmarks + Apache Beam :: SDKs :: Java :: Microbenchamkrs + Microbenchmarks for components in the Beam Java SDK. + jar + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.apache.maven.plugins + maven-source-plugin + + + + org.apache.maven.plugins + maven-jar-plugin + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + microbenchmarks + + + org.openjdk.jmh.Main + + + + + + + + + + + + org.apache.beam + beam-sdks-java-core + + + + org.slf4j + slf4j-api + + + + org.slf4j + slf4j-jdk14 + + runtime + + + + org.openjdk.jmh + jmh-core + 1.0.1 + + + + org.openjdk.jmh + jmh-generator-annprocess + 1.6.1 + provided + + + diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java new file mode 100644 index 0000000000000..3c92cbf8f8903 --- /dev/null +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2015 Google Inc. + * + * 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 org.apache.beam.sdk.transforms; + +import org.apache.beam.sdk.options.PipelineOptions; +import org.apache.beam.sdk.transforms.Combine.CombineFn; +import org.apache.beam.sdk.transforms.DoFnWithContext.ExtraContextFactory; +import org.apache.beam.sdk.transforms.windowing.BoundedWindow; +import org.apache.beam.sdk.transforms.windowing.PaneInfo; +import org.apache.beam.sdk.util.WindowingInternals; +import org.apache.beam.sdk.values.PCollectionView; +import org.apache.beam.sdk.values.TupleTag; + +import org.joda.time.Instant; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +/** + * Benchmarks for {@link DoFn} and {@link DoFnWithContext} invocations, specifically + * for measuring the overhead of {@link DoFnReflector}. + */ +@State(Scope.Benchmark) +@Fork(1) +@Warmup(iterations = 5) +public class DoFnReflectorBenchmark { + + private static final String ELEMENT = "some string to use for testing"; + + private DoFn doFn = new UpperCaseDoFn(); + private DoFnWithContext doFnWithContext = new UpperCaseDoFnWithContext(); + + private StubDoFnProcessContext stubDoFnContext = new StubDoFnProcessContext(doFn, ELEMENT); + private StubDoFnWithContextProcessContext stubDoFnWithContextContext = + new StubDoFnWithContextProcessContext(doFnWithContext, ELEMENT); + private ExtraContextFactory extraContextFactory = + new ExtraContextFactory() { + + @Override + public BoundedWindow window() { + return null; + } + + @Override + public WindowingInternals windowingInternals() { + return null; + } + }; + + private DoFnReflector doFnReflector; + private DoFn adaptedDoFnWithContext; + + @Setup + public void setUp() { + doFnReflector = DoFnReflector.of(doFnWithContext.getClass()); + adaptedDoFnWithContext = doFnReflector.toDoFn(doFnWithContext); + } + + @Benchmark + public String invokeDoFn() throws Exception { + doFn.processElement(stubDoFnContext); + return stubDoFnContext.output; + } + + @Benchmark + public String invokeDoFnWithContextViaAdaptor() throws Exception { + adaptedDoFnWithContext.processElement(stubDoFnContext); + return stubDoFnContext.output; + } + + @Benchmark + public String invokeDoFnWithContext() throws Exception { + doFnReflector.invokeProcessElement( + doFnWithContext, stubDoFnWithContextContext, extraContextFactory); + return stubDoFnWithContextContext.output; + } + + private static class UpperCaseDoFn extends DoFn { + + @Override + public void processElement(ProcessContext c) throws Exception { + c.output(c.element().toUpperCase()); + } + } + + private static class UpperCaseDoFnWithContext extends DoFnWithContext { + + @ProcessElement + public void processElement(ProcessContext c) throws Exception { + c.output(c.element().toUpperCase()); + } + } + + private static class StubDoFnProcessContext extends DoFn.ProcessContext { + + private final String element; + private String output; + + public StubDoFnProcessContext(DoFn fn, String element) { + fn.super(); + this.element = element; + } + + @Override + public String element() { + return element; + } + + @Override + public T sideInput(PCollectionView view) { + return null; + } + + @Override + public Instant timestamp() { + return null; + } + + @Override + public BoundedWindow window() { + return null; + } + + @Override + public PaneInfo pane() { + return null; + } + + @Override + public WindowingInternals windowingInternals() { + return null; + } + + @Override + public PipelineOptions getPipelineOptions() { + return null; + } + + @Override + public void output(String output) { + this.output = output; + } + + @Override + public void outputWithTimestamp(String output, Instant timestamp) { + output(output); + } + + @Override + public void sideOutput(TupleTag tag, T output) { + } + + @Override + public void sideOutputWithTimestamp(TupleTag tag, T output, Instant timestamp) { + } + + @Override + protected Aggregator + createAggregatorInternal(String name, CombineFn combiner) { + return null; + } + } + + private static class StubDoFnWithContextProcessContext + extends DoFnWithContext.ProcessContext { + private final String element; + private String output; + + public StubDoFnWithContextProcessContext(DoFnWithContext fn, String element) { + fn.super(); + this.element = element; + } + + @Override + public String element() { + return element; + } + + @Override + public T sideInput(PCollectionView view) { + return null; + } + + @Override + public Instant timestamp() { + return null; + } + + @Override + public PaneInfo pane() { + return null; + } + + @Override + public PipelineOptions getPipelineOptions() { + return null; + } + + @Override + public void output(String output) { + this.output = output; + } + + @Override + public void outputWithTimestamp(String output, Instant timestamp) { + output(output); + } + + @Override + public void sideOutput(TupleTag tag, T output) { + } + + @Override + public void sideOutputWithTimestamp(TupleTag tag, T output, Instant timestamp) { + } + } +} From 94ae390187e866be39494608d91cd5d24abcf4bd Mon Sep 17 00:00:00 2001 From: bchambers Date: Wed, 29 Jun 2016 15:23:56 -0700 Subject: [PATCH 2/8] fixup! Update license on benchmark --- .../transforms/DoFnReflectorBenchmark.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java index 3c92cbf8f8903..7d98d957c2b1d 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java @@ -1,19 +1,20 @@ /* - * Copyright (C) 2015 Google Inc. + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 * - * 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 + * 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. + * 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 org.apache.beam.sdk.transforms; import org.apache.beam.sdk.options.PipelineOptions; From 7f65f2f90f5214a2f8e0344a840592e29bb282c9 Mon Sep 17 00:00:00 2001 From: bchambers Date: Wed, 29 Jun 2016 15:22:55 -0700 Subject: [PATCH 3/8] fixup! Add some coder microbenchmarks --- .../beam/sdk/coders/AvroCoderBenchmark.java | 118 ++++++++++++++++++ .../sdk/coders/ByteArrayCoderBenchmark.java | 64 ++++++++++ .../beam/sdk/coders/CoderBenchmarking.java | 41 ++++++ .../sdk/coders/StringUtf8CoderBenchmark.java | 70 +++++++++++ 4 files changed, 293 insertions(+) create mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java create mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java create mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java create mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java new file mode 100644 index 0000000000000..278895b5d0c57 --- /dev/null +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.beam.sdk.coders; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Fork; +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.Warmup; + +import java.io.IOException; +import java.util.Arrays; + +/** + * Benchmarks for AvroCoder. + */ +@State(Scope.Benchmark) +@Fork(1) +@Warmup(iterations = 5) +public class AvroCoderBenchmark { + + @DefaultCoder(AvroCoder.class) + private static class Pojo { + public String text; + public int count; + + // Empty constructor required for Avro decoding. + @SuppressWarnings("unused") + public Pojo() { + } + + public Pojo(String text, int count) { + this.text = text; + this.count = count; + } + + // auto-generated + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + Pojo pojo = (Pojo) o; + + if (count != pojo.count) { + return false; + } + if (text != null + ? !text.equals(pojo.text) + : pojo.text != null) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public String toString() { + return "Pojo{" + + "text='" + text + '\'' + + ", count=" + count + + '}'; + } + } + + AvroCoder coder = AvroCoder.of(Pojo.class); + + @Param({"true", "false"}) + boolean isWholeStream; + + Pojo shortPojo; + Pojo longPojo; + + @Setup + public void setUp() { + shortPojo = new Pojo("hello world", 42); + + char[] bytes60k = new char[60 * 1024]; + Arrays.fill(bytes60k, 'a'); + longPojo = new Pojo(new String(bytes60k), 42); + } + + @Benchmark + public Pojo codeShortPojo() throws IOException { + return CoderBenchmarking.testCoder(coder, isWholeStream, shortPojo); + } + + @Benchmark + public Pojo codeLongPojo() throws Exception { + return CoderBenchmarking.testCoder(coder, isWholeStream, longPojo); + } +} diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java new file mode 100644 index 0000000000000..dfe1dfe179763 --- /dev/null +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.beam.sdk.coders; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Fork; +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.Warmup; + +import java.io.IOException; +import java.util.Arrays; + +/** + * Benchmarks for ByteArrayCoder. + */ +@State(Scope.Benchmark) +@Fork(1) +@Warmup(iterations = 5) +public class ByteArrayCoderBenchmark { + + ByteArrayCoder coder = ByteArrayCoder.of(); + + @Param({"true", "false"}) + boolean isWholeStream; + + byte[] shortArray; + byte[] longArray; + + @Setup + public void setUp() { + shortArray = new byte[10]; + Arrays.fill(shortArray, (byte) 47); + longArray = new byte[60 * 1024]; + Arrays.fill(longArray, (byte) 47); + } + + @Benchmark + public byte[] codeShortArray() throws IOException { + return CoderBenchmarking.testCoder(coder, isWholeStream, shortArray); + } + + @Benchmark + public byte[] codeLongArray() throws Exception { + return CoderBenchmarking.testCoder(coder, isWholeStream, longArray); + } +} diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java new file mode 100644 index 0000000000000..938d13728ae58 --- /dev/null +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.beam.sdk.coders; + +import org.apache.beam.sdk.util.CoderUtils; + +import java.io.IOException; + +/** + * Utilities for writing coder benchmarks. + */ +class CoderBenchmarking { + + /** + * Encodes and decodes the given value using the specified Coder. + * + * @throws IOException if there are errors during encoding or decoding + */ + public static T testCoder( + Coder coder, boolean isWholeStream, T value) throws IOException { + Coder.Context context = + isWholeStream ? Coder.Context.OUTER : Coder.Context.NESTED; + byte[] encoded = CoderUtils.encodeToByteArray(coder, value, context); + return CoderUtils.decodeFromByteArray(coder, encoded, context); + } +} diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java new file mode 100644 index 0000000000000..f120c245ab3c9 --- /dev/null +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.beam.sdk.coders; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Fork; +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.Warmup; + +import java.io.IOException; +import java.util.Arrays; + +/** + * Benchmarks for StringUtf8Coder. + */ +@State(Scope.Benchmark) +@Fork(1) +@Warmup(iterations = 5) +public class StringUtf8CoderBenchmark { + + StringUtf8Coder coder = StringUtf8Coder.of(); + + @Param({"true", "false"}) + boolean isWholeStream; + + String shortString; + String longString; + + @Setup + public void setUp() { + shortString = "hello world"; + + char[] bytes60k = new char[60 * 1024]; + Arrays.fill(bytes60k, 'a'); + longString = new String(bytes60k); + } + + @Benchmark + public String codeEmptyString() throws IOException { + return CoderBenchmarking.testCoder(coder, isWholeStream, ""); + } + + @Benchmark + public String codeShortString() throws IOException { + return CoderBenchmarking.testCoder(coder, isWholeStream, shortString); + } + + @Benchmark + public String codeLongString() throws IOException { + return CoderBenchmarking.testCoder(coder, isWholeStream, longString); + } +} From 36a72bae994aab0e693da6a5458c4c8d983232f6 Mon Sep 17 00:00:00 2001 From: bchambers Date: Wed, 29 Jun 2016 15:23:22 -0700 Subject: [PATCH 4/8] fixup! Fix used/unused dependencies in microbenchmarks. --- sdks/java/microbenchmarks/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdks/java/microbenchmarks/pom.xml b/sdks/java/microbenchmarks/pom.xml index 304c87733e6ab..620edb46fb16e 100644 --- a/sdks/java/microbenchmarks/pom.xml +++ b/sdks/java/microbenchmarks/pom.xml @@ -83,8 +83,8 @@ - org.slf4j - slf4j-api + joda-time + joda-time From 65ca1dd75b2962fd6e7aa96cd1f8ec091dfa6758 Mon Sep 17 00:00:00 2001 From: bchambers Date: Wed, 29 Jun 2016 15:23:34 -0700 Subject: [PATCH 5/8] fixup! Add microbenchmarks to sdks/java pom --- sdks/java/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/sdks/java/pom.xml b/sdks/java/pom.xml index 55aea6a9e06c2..0350804e5d0ff 100644 --- a/sdks/java/pom.xml +++ b/sdks/java/pom.xml @@ -41,6 +41,7 @@ a released artifact exists, we need to modify the build order. maven-archetypes --> extensions + microbenchmarks From ebbf5dabea23bc026d980d41d734d3f87cd2e864 Mon Sep 17 00:00:00 2001 From: bchambers Date: Wed, 29 Jun 2016 15:36:59 -0700 Subject: [PATCH 6/8] fixup! Add license header to README.md --- sdks/java/microbenchmarks/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/sdks/java/microbenchmarks/README.md b/sdks/java/microbenchmarks/README.md index d3a406a67d266..627e66947fbf4 100644 --- a/sdks/java/microbenchmarks/README.md +++ b/sdks/java/microbenchmarks/README.md @@ -1,3 +1,22 @@ + + # Microbenchmarks for parts of the Beam SDK To run benchmarks: From 6737d25e3b1bc29c94cd40475b4238ee5a29e53f Mon Sep 17 00:00:00 2001 From: bchambers Date: Thu, 30 Jun 2016 14:45:46 -0700 Subject: [PATCH 7/8] fixup! Review comments --- .../apache/beam/sdk/transforms/DoFnReflector.java | 12 ++++++------ sdks/java/microbenchmarks/pom.xml | 4 ++-- .../coders/AvroCoderBenchmark.java | 5 ++++- .../coders/ByteArrayCoderBenchmark.java | 4 +++- .../coders/CoderBenchmarking.java | 3 ++- .../coders/StringUtf8CoderBenchmark.java | 4 +++- .../transforms/DoFnReflectorBenchmark.java | 6 +++++- 7 files changed, 25 insertions(+), 13 deletions(-) rename sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/{ => microbenchmarks}/coders/AvroCoderBenchmark.java (95%) rename sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/{ => microbenchmarks}/coders/ByteArrayCoderBenchmark.java (94%) rename sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/{ => microbenchmarks}/coders/CoderBenchmarking.java (94%) rename sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/{ => microbenchmarks}/coders/StringUtf8CoderBenchmark.java (95%) rename sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/{ => microbenchmarks}/transforms/DoFnReflectorBenchmark.java (96%) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFnReflector.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFnReflector.java index 452ee8ef66373..e711d04b473ad 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFnReflector.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFnReflector.java @@ -123,7 +123,7 @@ Object createInstance( * @param c the {@link org.apache.beam.sdk.transforms.DoFnWithContext.ProcessContext} * to pass to {@link ProcessElement}. */ - abstract void invokeProcessElement( + public abstract void invokeProcessElement( DoFnWithContext fn, DoFnWithContext.ProcessContext c, ExtraContextFactory extra); @@ -135,7 +135,7 @@ abstract void invokeProcessElement( * @param c the {@link org.apache.beam.sdk.transforms.DoFnWithContext.Context} * to pass to {@link StartBundle}. */ - void invokeStartBundle( + public void invokeStartBundle( DoFnWithContext fn, DoFnWithContext.Context c, ExtraContextFactory extra) { @@ -149,7 +149,7 @@ void invokeStartBundle( * @param c the {@link org.apache.beam.sdk.transforms.DoFnWithContext.Context} * to pass to {@link FinishBundle}. */ - abstract void invokeFinishBundle( + public abstract void invokeFinishBundle( DoFnWithContext fn, DoFnWithContext.Context c, ExtraContextFactory extra); @@ -430,7 +430,7 @@ private boolean usesContext(Class context) { } @Override - void invokeProcessElement( + public void invokeProcessElement( DoFnWithContext fn, DoFnWithContext.ProcessContext c, ExtraContextFactory extra) { @@ -438,7 +438,7 @@ void invokeProcessElement( } @Override - void invokeStartBundle( + public void invokeStartBundle( DoFnWithContext fn, DoFnWithContext.Context c, ExtraContextFactory extra) { @@ -449,7 +449,7 @@ void invokeStartBundle( } @Override - void invokeFinishBundle( + public void invokeFinishBundle( DoFnWithContext fn, DoFnWithContext.Context c, ExtraContextFactory extra) { diff --git a/sdks/java/microbenchmarks/pom.xml b/sdks/java/microbenchmarks/pom.xml index 620edb46fb16e..96a76ecd0f1e0 100644 --- a/sdks/java/microbenchmarks/pom.xml +++ b/sdks/java/microbenchmarks/pom.xml @@ -26,8 +26,8 @@ ../pom.xml - beam-sdks-java-io-microbenchmarks - Apache Beam :: SDKs :: Java :: Microbenchamkrs + beam-sdks-java-microbenchmarks + Apache Beam :: SDKs :: Java :: Microbenchmarks Microbenchmarks for components in the Beam Java SDK. jar diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java similarity index 95% rename from sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java rename to sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java index 278895b5d0c57..aa07149c49bb1 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/AvroCoderBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java @@ -15,7 +15,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.beam.sdk.coders; +package org.apache.beam.sdk.microbenchmarks.coders; + +import org.apache.beam.sdk.coders.AvroCoder; +import org.apache.beam.sdk.coders.DefaultCoder; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java similarity index 94% rename from sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java rename to sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java index dfe1dfe179763..4d13f5367ddb1 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/ByteArrayCoderBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java @@ -15,7 +15,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.beam.sdk.coders; +package org.apache.beam.sdk.microbenchmarks.coders; + +import org.apache.beam.sdk.coders.ByteArrayCoder; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/CoderBenchmarking.java similarity index 94% rename from sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java rename to sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/CoderBenchmarking.java index 938d13728ae58..8523cb2a6a1f4 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/CoderBenchmarking.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/CoderBenchmarking.java @@ -15,8 +15,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.beam.sdk.coders; +package org.apache.beam.sdk.microbenchmarks.coders; +import org.apache.beam.sdk.coders.Coder; import org.apache.beam.sdk.util.CoderUtils; import java.io.IOException; diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java similarity index 95% rename from sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java rename to sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java index f120c245ab3c9..5d6ed0c97eee7 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/coders/StringUtf8CoderBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java @@ -15,7 +15,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.beam.sdk.coders; +package org.apache.beam.sdk.microbenchmarks.coders; + +import org.apache.beam.sdk.coders.StringUtf8Coder; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnReflectorBenchmark.java similarity index 96% rename from sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java rename to sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnReflectorBenchmark.java index 7d98d957c2b1d..1b8ec2af9799d 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/transforms/DoFnReflectorBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnReflectorBenchmark.java @@ -15,10 +15,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.beam.sdk.transforms; +package org.apache.beam.sdk.microbenchmarks.transforms; import org.apache.beam.sdk.options.PipelineOptions; +import org.apache.beam.sdk.transforms.Aggregator; import org.apache.beam.sdk.transforms.Combine.CombineFn; +import org.apache.beam.sdk.transforms.DoFn; +import org.apache.beam.sdk.transforms.DoFnReflector; +import org.apache.beam.sdk.transforms.DoFnWithContext; import org.apache.beam.sdk.transforms.DoFnWithContext.ExtraContextFactory; import org.apache.beam.sdk.transforms.windowing.BoundedWindow; import org.apache.beam.sdk.transforms.windowing.PaneInfo; From 5d6266469f5b061f195d74d71e124fde42e1c883 Mon Sep 17 00:00:00 2001 From: bchambers Date: Fri, 1 Jul 2016 15:39:28 -0700 Subject: [PATCH 8/8] fixup! Add microbenchmarks --- .../beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java | 2 +- .../sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java | 2 +- .../sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java index aa07149c49bb1..39b31ef309087 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java @@ -32,7 +32,7 @@ import java.util.Arrays; /** - * Benchmarks for AvroCoder. + * Benchmarks for {@link AvroCoder}. */ @State(Scope.Benchmark) @Fork(1) diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java index 4d13f5367ddb1..df20a15d4ec21 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java @@ -31,7 +31,7 @@ import java.util.Arrays; /** - * Benchmarks for ByteArrayCoder. + * Benchmarks for {@link ByteArrayCoder}. */ @State(Scope.Benchmark) @Fork(1) diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java index 5d6ed0c97eee7..c0bcb453944b9 100644 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java +++ b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java @@ -31,7 +31,7 @@ import java.util.Arrays; /** - * Benchmarks for StringUtf8Coder. + * Benchmarks for {@link StringUtf8Coder}. */ @State(Scope.Benchmark) @Fork(1)