From a5583df38026c25a4e4d1cc432eaae83d86ee3a5 Mon Sep 17 00:00:00 2001 From: bchambers Date: Mon, 21 Nov 2016 13:35:39 -0800 Subject: [PATCH] Remove microbenchmarks directory from Beam The microbenchmarks should not be released as part of the Beam distribution, rather they exist for internal measurements and testing. Given that we also don't have any automatic monitoring (and that any such measurements are not indicative of real performance), the value of maintaining microbenchmarks here is negligible. --- sdks/java/microbenchmarks/README.md | 42 ---- sdks/java/microbenchmarks/pom.xml | 113 --------- .../coders/AvroCoderBenchmark.java | 119 --------- .../coders/ByteArrayCoderBenchmark.java | 64 ----- .../coders/CoderBenchmarking.java | 41 ---- .../coders/StringUtf8CoderBenchmark.java | 70 ------ .../microbenchmarks/coders/package-info.java | 22 -- .../transforms/DoFnInvokersBenchmark.java | 232 ------------------ .../transforms/package-info.java | 22 -- sdks/java/pom.xml | 1 - 10 files changed, 726 deletions(-) delete mode 100644 sdks/java/microbenchmarks/README.md delete mode 100644 sdks/java/microbenchmarks/pom.xml delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/CoderBenchmarking.java delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/package-info.java delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnInvokersBenchmark.java delete mode 100644 sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/package-info.java diff --git a/sdks/java/microbenchmarks/README.md b/sdks/java/microbenchmarks/README.md deleted file mode 100644 index 627e66947fbf4..0000000000000 --- a/sdks/java/microbenchmarks/README.md +++ /dev/null @@ -1,42 +0,0 @@ - - -# 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 deleted file mode 100644 index 06bc4df7586d6..0000000000000 --- a/sdks/java/microbenchmarks/pom.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - 4.0.0 - - - org.apache.beam - beam-sdks-java-parent - 0.4.0-incubating-SNAPSHOT - ../pom.xml - - - beam-sdks-java-microbenchmarks - Apache Beam :: SDKs :: Java :: Microbenchmarks - Microbenchmarks for components in the Beam Java SDK. - jar - - - - - - - org.codehaus.mojo - findbugs-maven-plugin - - true - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.apache.maven.plugins - maven-jar-plugin - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - microbenchmarks - - - org.openjdk.jmh.Main - - - - - - - - - - - - org.apache.beam - beam-sdks-java-core - - - - joda-time - joda-time - - - - 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/microbenchmarks/coders/AvroCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java deleted file mode 100644 index 35d5add1471ae..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/AvroCoderBenchmark.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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.microbenchmarks.coders; - -import java.io.IOException; -import java.util.Arrays; -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; -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; - -/** - * Benchmarks for {@link 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/microbenchmarks/coders/ByteArrayCoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java deleted file mode 100644 index 78909752a5d46..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/ByteArrayCoderBenchmark.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.microbenchmarks.coders; - -import java.io.IOException; -import java.util.Arrays; -import org.apache.beam.sdk.coders.ByteArrayCoder; -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; - -/** - * Benchmarks for {@link 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/microbenchmarks/coders/CoderBenchmarking.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/CoderBenchmarking.java deleted file mode 100644 index c92215d0afc54..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/CoderBenchmarking.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.microbenchmarks.coders; - -import java.io.IOException; -import org.apache.beam.sdk.coders.Coder; -import org.apache.beam.sdk.util.CoderUtils; - -/** - * 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/microbenchmarks/coders/StringUtf8CoderBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java deleted file mode 100644 index 540c95899c21d..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/StringUtf8CoderBenchmark.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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.microbenchmarks.coders; - -import java.io.IOException; -import java.util.Arrays; -import org.apache.beam.sdk.coders.StringUtf8Coder; -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; - -/** - * Benchmarks for {@link 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); - } -} diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/package-info.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/package-info.java deleted file mode 100644 index 0d735ee708148..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/coders/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ - -/** - * Benchmarks of various {@code Coder} implementations. - */ -package org.apache.beam.sdk.microbenchmarks.coders; diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnInvokersBenchmark.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnInvokersBenchmark.java deleted file mode 100644 index 442bdec3fea9f..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/DoFnInvokersBenchmark.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * 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.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.DoFnAdapters; -import org.apache.beam.sdk.transforms.OldDoFn; -import org.apache.beam.sdk.transforms.reflect.DoFnInvoker; -import org.apache.beam.sdk.transforms.reflect.DoFnInvoker.ArgumentProvider; -import org.apache.beam.sdk.transforms.reflect.DoFnInvoker.FakeArgumentProvider; -import org.apache.beam.sdk.transforms.reflect.DoFnInvokers; -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 OldDoFn} and {@link DoFn} invocations, specifically for measuring the - * overhead of {@link DoFnInvokers}. - */ -@State(Scope.Benchmark) -@Fork(1) -@Warmup(iterations = 5) -public class DoFnInvokersBenchmark { - - private static final String ELEMENT = "some string to use for testing"; - - private OldDoFn oldDoFn = new UpperCaseOldDoFn(); - private DoFn doFn = new UpperCaseDoFn(); - - private StubOldDoFnProcessContext stubOldDoFnContext = - new StubOldDoFnProcessContext(oldDoFn, ELEMENT); - private StubDoFnProcessContext stubDoFnContext = new StubDoFnProcessContext(doFn, ELEMENT); - private ArgumentProvider argumentProvider = - new FakeArgumentProvider<>(); - - private OldDoFn adaptedDoFnWithContext; - - private DoFnInvoker invoker; - - @Setup - public void setUp() { - adaptedDoFnWithContext = DoFnAdapters.toOldDoFn(doFn); - invoker = DoFnInvokers.invokerFor(doFn); - } - - @Benchmark - public String invokeOldDoFn() throws Exception { - oldDoFn.processElement(stubOldDoFnContext); - return stubDoFnContext.output; - } - - @Benchmark - public String invokeDoFnWithContextViaAdaptor() throws Exception { - adaptedDoFnWithContext.processElement(stubOldDoFnContext); - return stubOldDoFnContext.output; - } - - @Benchmark - public String invokeDoFnWithContext() throws Exception { - invoker.invokeProcessElement(argumentProvider); - return stubDoFnContext.output; - } - - private static class UpperCaseOldDoFn extends OldDoFn { - - @Override - public void processElement(ProcessContext c) throws Exception { - c.output(c.element().toUpperCase()); - } - } - - private static class UpperCaseDoFn extends DoFn { - - @ProcessElement - public void processElement(ProcessContext c) throws Exception { - c.output(c.element().toUpperCase()); - } - } - - private static class StubOldDoFnProcessContext extends OldDoFn.ProcessContext { - - private final String element; - private String output; - - public StubOldDoFnProcessContext(OldDoFn 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 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 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) {} - - @Override - protected Aggregator createAggregator( - String name, - CombineFn combiner) { - return null; - } - } -} diff --git a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/package-info.java b/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/package-info.java deleted file mode 100644 index b91e7b23b5e8d..0000000000000 --- a/sdks/java/microbenchmarks/src/main/java/org/apache/beam/sdk/microbenchmarks/transforms/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ - -/** - * Provides microbenchmarks of various transforms. - */ -package org.apache.beam.sdk.microbenchmarks.transforms; diff --git a/sdks/java/pom.xml b/sdks/java/pom.xml index fb07d25dc845e..0907c1a18dfe8 100644 --- a/sdks/java/pom.xml +++ b/sdks/java/pom.xml @@ -40,7 +40,6 @@ io maven-archetypes extensions - microbenchmarks