changeset 1323:086e57a61659

7901729: Usability: Print thread distribution for asymmetric benchmarks
author shade
date Tue, 12 Jul 2016 22:06:25 +0300
parents 13ae22114e22
children 70dfb4a93cf5
files jmh-core-it/src/test/java/org/openjdk/jmh/it/threads/GroupThreadGroupOrderTest.java jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java jmh-core/src/main/java/org/openjdk/jmh/generators/core/MethodGroup.java jmh-core/src/main/java/org/openjdk/jmh/infra/BenchmarkParams.java jmh-core/src/main/java/org/openjdk/jmh/runner/BenchmarkListEntry.java jmh-core/src/main/java/org/openjdk/jmh/runner/Runner.java jmh-core/src/main/java/org/openjdk/jmh/runner/format/TextReportFormat.java jmh-core/src/test/java/org/openjdk/jmh/results/TestAggregateResult.java jmh-core/src/test/java/org/openjdk/jmh/results/format/ResultFormatTest.java jmh-core/src/test/java/org/openjdk/jmh/runner/RunnerTest.java jmh-core/src/test/resources/org/openjdk/jmh/runner/MicroBenchmarks
diffstat 11 files changed, 226 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jmh-core-it/src/test/java/org/openjdk/jmh/it/threads/GroupThreadGroupOrderTest.java	Tue Jul 12 22:06:25 2016 +0300
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.jmh.it.threads;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.it.Fixtures;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests if harness executes setup, run, and tearDown in the same workers.
+ */
+@BenchmarkMode(Mode.All)
+@Warmup(iterations = 0)
+@Measurement(iterations = 5, time = 100, timeUnit = TimeUnit.MILLISECONDS)
+@Fork(1)
+@State(Scope.Group)
+public class GroupThreadGroupOrderTest {
+
+    private Set<Thread> abc = Collections.synchronizedSet(new HashSet<Thread>());
+    private Set<Thread> def = Collections.synchronizedSet(new HashSet<Thread>());
+    private Set<Thread> ghi = Collections.synchronizedSet(new HashSet<Thread>());
+
+    @Setup(Level.Iteration)
+    public void prepare() {
+        abc.clear();
+        def.clear();
+        ghi.clear();
+    }
+
+    @TearDown(Level.Iteration)
+    public void verify() {
+        Assert.assertEquals("Test abc", 3, abc.size());
+        Assert.assertEquals("Test def", 1, def.size());
+        Assert.assertEquals("Test ghi", 2, ghi.size());
+    }
+
+    @Benchmark
+    @Group("T")
+    public void abc() {
+        abc.add(Thread.currentThread());
+        Fixtures.work();
+    }
+
+    @Benchmark
+    @Group("T")
+    public void ghi() {
+        ghi.add(Thread.currentThread());
+        Fixtures.work();
+    }
+
+    @Benchmark
+    @Group("T")
+    public void def() {
+        def.add(Thread.currentThread());
+        Fixtures.work();
+    }
+
+    @Test
+    public void invokeAPI() throws RunnerException {
+        for (int c = 0; c < Fixtures.repetitionCount(); c++) {
+            Options opt = new OptionsBuilder()
+                    .include(Fixtures.getTestMask(this.getClass()))
+                    .threadGroups(3, 1, 2)
+                    .shouldFailOnError(true)
+                    .build();
+            new Runner(opt).run();
+        }
+    }
+
+}
--- a/jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/generators/core/BenchmarkGenerator.java	Tue Jul 12 22:06:25 2016 +0300
@@ -156,8 +156,9 @@
                             info.generatedClassQName,
                             group.getName(),
                             m,
-                            group.getThreads(),
                             group.getTotalThreadCount(),
+                            group.getGroupThreads(),
+                            group.getGroupLabels(),
                             group.getWarmupIterations(),
                             group.getWarmupTime(),
                             group.getWarmupBatchSize(),
--- a/jmh-core/src/main/java/org/openjdk/jmh/generators/core/MethodGroup.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/generators/core/MethodGroup.java	Tue Jul 12 22:06:25 2016 +0300
@@ -128,7 +128,7 @@
         return modes;
     }
 
-    public int[] getThreads() {
+    public int[] getGroupThreads() {
         int[] threads = new int[methods.size()];
         int c = 0;
         for (MethodInvocation mi : methods.keySet()) {
@@ -137,6 +137,18 @@
         return threads;
     }
 
+    public Optional<Collection<String>> getGroupLabels() {
+        if (methods.size() > 1) {
+            Collection<String> labels = new ArrayList<String>();
+            for (MethodInvocation mi : methods.keySet()) {
+                labels.add(mi.method.getName());
+            }
+            return Optional.eitherOf(labels);
+        } else {
+            return Optional.none();
+        }
+    }
+
     public Optional<Integer> getOperationsPerInvocation() {
         for (OperationsPerInvocation ann : getAll(OperationsPerInvocation.class)) {
             return Optional.of(ann.value());
--- a/jmh-core/src/main/java/org/openjdk/jmh/infra/BenchmarkParams.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/infra/BenchmarkParams.java	Tue Jul 12 22:06:25 2016 +0300
@@ -71,14 +71,16 @@
     }
 
     public BenchmarkParams(String benchmark, String generatedTarget, boolean synchIterations,
-                             int threads, int[] threadGroups, int forks, int warmupForks,
+                             int threads, int[] threadGroups, Collection<String> threadGroupLabels,
+                             int forks, int warmupForks,
                              IterationParams warmup, IterationParams measurement,
                              Mode mode, WorkloadParams params,
                              TimeUnit timeUnit, int opsPerInvocation,
                              String jvm, Collection<String> jvmArgs,
                              TimeValue timeout) {
         super(benchmark, generatedTarget, synchIterations,
-                threads, threadGroups, forks, warmupForks,
+                threads, threadGroups, threadGroupLabels,
+                forks, warmupForks,
                 warmup, measurement,
                 mode, params,
                 timeUnit, opsPerInvocation,
@@ -91,14 +93,16 @@
 
     private int markerEnd;
     public BenchmarkParamsL4(String benchmark, String generatedTarget, boolean synchIterations,
-                             int threads, int[] threadGroups, int forks, int warmupForks,
+                             int threads, int[] threadGroups, Collection<String> threadGroupLabels,
+                             int forks, int warmupForks,
                              IterationParams warmup, IterationParams measurement,
                              Mode mode, WorkloadParams params,
                              TimeUnit timeUnit, int opsPerInvocation,
                              String jvm, Collection<String> jvmArgs,
                              TimeValue timeout) {
         super(benchmark, generatedTarget, synchIterations,
-                threads, threadGroups, forks, warmupForks,
+                threads, threadGroups, threadGroupLabels,
+                forks, warmupForks,
                 warmup, measurement,
                 mode, params,
                 timeUnit, opsPerInvocation,
@@ -132,14 +136,16 @@
     private boolean q171, q172, q173, q174, q175, q176, q177, q178;
 
     public BenchmarkParamsL3(String benchmark, String generatedTarget, boolean synchIterations,
-                             int threads, int[] threadGroups, int forks, int warmupForks,
+                             int threads, int[] threadGroups, Collection<String> threadGroupLabels,
+                             int forks, int warmupForks,
                              IterationParams warmup, IterationParams measurement,
                              Mode mode, WorkloadParams params,
                              TimeUnit timeUnit, int opsPerInvocation,
                              String jvm, Collection<String> jvmArgs,
                              TimeValue timeout) {
         super(benchmark, generatedTarget, synchIterations,
-                threads, threadGroups, forks, warmupForks,
+                threads, threadGroups, threadGroupLabels,
+                forks, warmupForks,
                 warmup, measurement,
                 mode, params,
                 timeUnit, opsPerInvocation,
@@ -183,6 +189,7 @@
     protected final boolean synchIterations;
     protected final int threads;
     protected final int[] threadGroups;
+    protected final Collection<String> threadGroupLabels;
     protected final int forks;
     protected final int warmupForks;
     protected final IterationParams warmup;
@@ -196,7 +203,8 @@
     protected final TimeValue timeout;
 
     public BenchmarkParamsL2(String benchmark, String generatedTarget, boolean synchIterations,
-                             int threads, int[] threadGroups, int forks, int warmupForks,
+                             int threads, int[] threadGroups, Collection<String> threadGroupLabels,
+                             int forks, int warmupForks,
                              IterationParams warmup, IterationParams measurement,
                              Mode mode, WorkloadParams params,
                              TimeUnit timeUnit, int opsPerInvocation,
@@ -207,6 +215,7 @@
         this.synchIterations = synchIterations;
         this.threads = threads;
         this.threadGroups = threadGroups;
+        this.threadGroupLabels = threadGroupLabels;
         this.forks = forks;
         this.warmupForks = warmupForks;
         this.warmup = warmup;
@@ -226,6 +235,7 @@
         this.synchIterations = other.synchIterations;
         this.threads = other.threads;
         this.threadGroups = other.threadGroups;
+        this.threadGroupLabels = other.threadGroupLabels;
         this.forks = other.forks;
         this.warmupForks = other.warmupForks;
         this.warmup = other.warmup;
@@ -283,6 +293,14 @@
     }
 
     /**
+     * @return subgroup thread labels
+     * @see #getThreadGroups()
+     */
+    public Collection<String> getThreadGroupLabels() {
+        return Collections.unmodifiableCollection(threadGroupLabels);
+    }
+
+    /**
      * @return number of forked VM runs, which we measure
      */
     public int getForks() {
--- a/jmh-core/src/main/java/org/openjdk/jmh/runner/BenchmarkListEntry.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/runner/BenchmarkListEntry.java	Tue Jul 12 22:06:25 2016 +0300
@@ -44,6 +44,7 @@
     private final String method;
     private final Mode mode;
     private final int[] threadGroups;
+    private final Optional<Collection<String>> threadGroupLabels;
     private final Optional<Integer> threads;
     private final Optional<Integer> warmupIterations;
     private final Optional<TimeValue> warmupTime;
@@ -64,7 +65,8 @@
 
     private WorkloadParams workloadParams;
 
-    public BenchmarkListEntry(String userClassQName, String generatedClassQName, String method, Mode mode, int[] threadGroups, Optional<Integer> threads,
+    public BenchmarkListEntry(String userClassQName, String generatedClassQName, String method, Mode mode,
+                              Optional<Integer> threads, int[] threadGroups, Optional<Collection<String>> threadGroupLabels,
                               Optional<Integer> warmupIterations, Optional<TimeValue> warmupTime, Optional<Integer> warmupBatchSize,
                               Optional<Integer> measurementIterations, Optional<TimeValue> measurementTime, Optional<Integer> measurementBatchSize,
                               Optional<Integer> forks, Optional<Integer> warmupForks,
@@ -77,6 +79,7 @@
         this.mode = mode;
         this.threadGroups = threadGroups;
         this.threads = threads;
+        this.threadGroupLabels = threadGroupLabels;
         this.warmupIterations = warmupIterations;
         this.warmupTime = warmupTime;
         this.warmupBatchSize = warmupBatchSize;
@@ -99,7 +102,7 @@
     public BenchmarkListEntry(String line) {
         String[] args = line.split(BR_SEPARATOR);
 
-        if (args.length != 22) {
+        if (args.length != 23) {
             throw new IllegalStateException("Mismatched format for the line: " + line);
         }
 
@@ -110,8 +113,9 @@
         this.generatedClassQName = args[idx++].trim();
         this.method = args[idx++].trim();
         this.mode = Mode.deepValueOf(args[idx++].trim());
+        this.threads = Optional.of(args[idx++], INTEGER_UNMARSHALLER);
         this.threadGroups = Utils.unmarshalIntArray(args[idx++]);
-        this.threads = Optional.of(args[idx++], INTEGER_UNMARSHALLER);
+        this.threadGroupLabels = Optional.of(args[idx++], STRING_COLLECTION_UNMARSHALLER);
         this.warmupIterations = Optional.of(args[idx++], INTEGER_UNMARSHALLER);
         this.warmupTime = Optional.of(args[idx++], TIME_VALUE_UNMARSHALLER);
         this.warmupBatchSize = Optional.of(args[idx++], INTEGER_UNMARSHALLER);
@@ -130,18 +134,10 @@
         this.timeout = Optional.of(args[idx++], TIME_VALUE_UNMARSHALLER);
     }
 
-    public BenchmarkListEntry(String userClassQName, String generatedName, String method, Mode mode) {
-        this(userClassQName, generatedName, method, mode, new int[]{}, Optional.<Integer>none(),
-                Optional.<Integer>none(), Optional.<TimeValue>none(), Optional.<Integer>none(), Optional.<Integer>none(), Optional.<TimeValue>none(), Optional.<Integer>none(),
-                Optional.<Integer>none(), Optional.<Integer>none(),
-                Optional.<String>none(), Optional.<Collection<String>>none(), Optional.<Collection<String>>none(), Optional.<Collection<String>>none(),
-                Optional.<Map<String, String[]>>none(), Optional.<TimeUnit>none(), Optional.<Integer>none(),
-                Optional.<TimeValue>none());
-    }
-
     public String toLine() {
-        return userClassQName + BR_SEPARATOR + generatedClassQName + BR_SEPARATOR + method + BR_SEPARATOR + mode + BR_SEPARATOR + Utils.marshalIntArray(threadGroups) + BR_SEPARATOR +
-                threads + BR_SEPARATOR + warmupIterations + BR_SEPARATOR + warmupTime + BR_SEPARATOR + warmupBatchSize + BR_SEPARATOR +
+        return userClassQName + BR_SEPARATOR + generatedClassQName + BR_SEPARATOR + method + BR_SEPARATOR + mode + BR_SEPARATOR +
+                threads + BR_SEPARATOR + Utils.marshalIntArray(threadGroups) + BR_SEPARATOR + threadGroupLabels.toString(STRING_COLLECTION_MARSHALLER) + BR_SEPARATOR +
+                warmupIterations + BR_SEPARATOR + warmupTime + BR_SEPARATOR + warmupBatchSize + BR_SEPARATOR +
                 measurementIterations + BR_SEPARATOR + measurementTime + BR_SEPARATOR + measurementBatchSize + BR_SEPARATOR +
                 forks + BR_SEPARATOR + warmupForks + BR_SEPARATOR +
                 jvm.toString(STRING_MARSHALLER) + BR_SEPARATOR +
@@ -154,7 +150,8 @@
     }
 
     public BenchmarkListEntry cloneWith(Mode mode) {
-        return new BenchmarkListEntry(userClassQName, generatedClassQName, method, mode, threadGroups, threads,
+        return new BenchmarkListEntry(userClassQName, generatedClassQName, method, mode,
+                threads, threadGroups, threadGroupLabels,
                 warmupIterations, warmupTime, warmupBatchSize,
                 measurementIterations, measurementTime, measurementBatchSize,
                 forks, warmupForks,
@@ -164,7 +161,8 @@
     }
 
     public BenchmarkListEntry cloneWith(WorkloadParams p) {
-        BenchmarkListEntry br = new BenchmarkListEntry(userClassQName, generatedClassQName, method, mode, threadGroups, threads,
+        BenchmarkListEntry br = new BenchmarkListEntry(userClassQName, generatedClassQName, method, mode,
+                threads, threadGroups, threadGroupLabels,
                 warmupIterations, warmupTime, warmupBatchSize,
                 measurementIterations, measurementTime, measurementBatchSize,
                 forks, warmupForks,
@@ -242,6 +240,10 @@
         return Arrays.copyOf(threadGroups, threadGroups.length);
     }
 
+    public Optional<Collection<String>> getThreadGroupLabels() {
+        return threadGroupLabels;
+    }
+
     @Override
     public String toString() {
         return "{\'" + userClassQName + "." + method + "\', " + mode + ", " + workloadParams + "}";
--- a/jmh-core/src/main/java/org/openjdk/jmh/runner/Runner.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/runner/Runner.java	Tue Jul 12 22:06:25 2016 +0300
@@ -480,7 +480,8 @@
                 benchmark.getTimeout().orElse(Defaults.TIMEOUT));
 
         return new BenchmarkParams(benchmark.getUsername(), benchmark.generatedTarget(), synchIterations,
-                threads, threadGroups, forks, warmupForks,
+                threads, threadGroups, benchmark.getThreadGroupLabels().orElse(Collections.<String>emptyList()),
+                forks, warmupForks,
                 warmup, measurement, benchmark.getMode(), benchmark.getWorkloadParams(), timeUnit, opsPerInvocation,
                 jvm, jvmArgs, timeout);
     }
--- a/jmh-core/src/main/java/org/openjdk/jmh/runner/format/TextReportFormat.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/runner/format/TextReportFormat.java	Tue Jul 12 22:06:25 2016 +0300
@@ -36,9 +36,12 @@
 import org.openjdk.jmh.runner.IterationType;
 import org.openjdk.jmh.runner.options.TimeValue;
 import org.openjdk.jmh.runner.options.VerboseMode;
+import org.openjdk.jmh.util.Utils;
 
 import java.io.PrintStream;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
@@ -76,10 +79,26 @@
                 (timeout.convertTo(TimeUnit.NANOSECONDS) <= warmup.getTime().convertTo(TimeUnit.NANOSECONDS));
         out.println("# Timeout: " + timeout + " per iteration" + (timeoutWarning ? ", ***WARNING: The timeout might be too low!***" : ""));
 
-        out.println("# Threads: " + params.getThreads() + " " + getThreadsString(params.getThreads()) +
-                (params.shouldSynchIterations() ?
-                        ", will synchronize iterations" :
-                        (params.getMode() == Mode.SingleShotTime) ? "" : ", ***WARNING: Synchronize iterations are disabled!***"));
+        out.print("# Threads: " + params.getThreads() + " " + getThreadsString(params.getThreads()));
+
+        if (!params.getThreadGroupLabels().isEmpty()) {
+            int[] tg = params.getThreadGroups();
+
+            // TODO: Make params.getThreadGroupLabels return List
+            List<String> labels = new ArrayList<String>(params.getThreadGroupLabels());
+            String[] ss = new String[tg.length];
+            for (int cnt = 0; cnt < tg.length; cnt++) {
+                ss[cnt] = tg[cnt] + "x \"" + labels.get(cnt) + "\"";
+            }
+
+            int groupCount = params.getThreads() / Utils.sum(tg);
+            out.print(" (" + groupCount + " " + getGroupsString(groupCount) + "; " + Utils.join(ss, ", ") + " in each group)");
+        }
+
+        out.println(params.shouldSynchIterations() ?
+                ", will synchronize iterations" :
+                (params.getMode() == Mode.SingleShotTime) ? "" : ", ***WARNING: Synchronize iterations are disabled!***");
+
 
         out.println("# Benchmark mode: " + params.getMode().longLabel());
         out.println("# Benchmark: " + params.getBenchmark());
@@ -121,6 +140,14 @@
         }
     }
 
+    protected static String getGroupsString(int g) {
+        if (g > 1) {
+            return "groups";
+        } else {
+            return "group";
+        }
+    }
+
     @Override
     public void iterationResult(BenchmarkParams benchmParams, IterationParams params, int iteration, IterationResult data) {
         StringBuilder sb = new StringBuilder();
--- a/jmh-core/src/test/java/org/openjdk/jmh/results/TestAggregateResult.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/test/java/org/openjdk/jmh/results/TestAggregateResult.java	Tue Jul 12 22:06:25 2016 +0300
@@ -49,7 +49,9 @@
     @BeforeClass
     public static void setupClass() {
         result = new IterationResult(
-                new BenchmarkParams("blah", "blah", false, 1, new int[]{1}, 1, 1,
+                new BenchmarkParams("blah", "blah", false,
+                        1, new int[]{1}, Collections.<String>emptyList(),
+                        1, 1,
                         new IterationParams(IterationType.WARMUP, 1, TimeValue.seconds(1), 1),
                         new IterationParams(IterationType.MEASUREMENT, 1, TimeValue.seconds(1), 1),
                         Mode.Throughput, null, TimeUnit.SECONDS, 1,
--- a/jmh-core/src/test/java/org/openjdk/jmh/results/format/ResultFormatTest.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/test/java/org/openjdk/jmh/results/format/ResultFormatTest.java	Tue Jul 12 22:06:25 2016 +0300
@@ -62,6 +62,7 @@
                     false,
                     r.nextInt(1000),
                     new int[]{ r.nextInt(1000) },
+                    Collections.<String>emptyList(),
                     r.nextInt(1000),
                     r.nextInt(1000),
                     new IterationParams(IterationType.WARMUP,      r.nextInt(1000), TimeValue.seconds(r.nextInt(1000)), 1),
--- a/jmh-core/src/test/java/org/openjdk/jmh/runner/RunnerTest.java	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/test/java/org/openjdk/jmh/runner/RunnerTest.java	Tue Jul 12 22:06:25 2016 +0300
@@ -57,7 +57,9 @@
     @Test
     public void testEmptyOptsHaveCompileCommandFile() {
         Runner blade = new Runner(new OptionsBuilder());
-        BenchmarkParams bp = new BenchmarkParams("Foo", "bar", false, 1, new int[]{1}, 1, 1,
+        BenchmarkParams bp = new BenchmarkParams("Foo", "bar", false,
+                1, new int[]{1}, Collections.<String>emptyList(),
+                1, 1,
                 new IterationParams(IterationType.WARMUP,      1, TimeValue.seconds(1), 1),
                 new IterationParams(IterationType.MEASUREMENT, 1, TimeValue.seconds(1), 1),
                 Mode.Throughput, null, TimeUnit.SECONDS, 1,
@@ -86,7 +88,9 @@
                 Arrays.asList("inline,we/like/to/move/it.*"));
         Set<String> extraHints = CompilerHints.fromFile(tempHints).get();
         Runner blade = new Runner(new OptionsBuilder().build());
-        BenchmarkParams bp = new BenchmarkParams("Foo", "bar", false, 1, new int[]{1}, 1, 1,
+        BenchmarkParams bp = new BenchmarkParams("Foo", "bar", false,
+                1, new int[]{1}, Collections.<String>emptyList(),
+                1, 1,
                 new IterationParams(IterationType.WARMUP,      1, TimeValue.seconds(1), 1),
                 new IterationParams(IterationType.MEASUREMENT, 1, TimeValue.seconds(1), 1),
                 Mode.Throughput, null, TimeUnit.SECONDS, 1,
@@ -119,7 +123,9 @@
                 Arrays.asList("inline,we/like/to/move/it.*"));
         Set<String> extraHints2 = CompilerHints.fromFile(tempHints2).get();
         Runner blade = new Runner(new OptionsBuilder().build());
-        BenchmarkParams bp = new BenchmarkParams("Foo", "bar", false, 1, new int[]{1}, 1, 1,
+        BenchmarkParams bp = new BenchmarkParams("Foo", "bar", false,
+                1, new int[]{1}, Collections.<String>emptyList(),
+                1, 1,
                 new IterationParams(IterationType.WARMUP,      1, TimeValue.seconds(1), 1),
                 new IterationParams(IterationType.MEASUREMENT, 1, TimeValue.seconds(1), 1),
                 Mode.Throughput, null, TimeUnit.SECONDS, 1,
--- a/jmh-core/src/test/resources/org/openjdk/jmh/runner/MicroBenchmarks	Thu Jun 23 20:18:50 2016 +0300
+++ b/jmh-core/src/test/resources/org/openjdk/jmh/runner/MicroBenchmarks	Tue Jul 12 22:06:25 2016 +0300
@@ -23,24 +23,24 @@
 #
 
 
-oracle.micro.benchmarks.api.java.util.concurrent.NormalMaps===,===oracle.micro.benchmarks.api.java.util.concurrent.generated.NormalMaps===,===testConcurrentHashMap===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005HashMapGetIntThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005HashMapGetIntGCThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005HashMapGetIntegerThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005ResizedHashMapGetIntThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005ResizedHashMapGetIntegerThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.sjent.GeneratedPrintBase64===,===oracle.micro.benchmarks.app.sjent.generated.GeneratedPrintBase64===,===printBase64Binary_128bytesThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.sjent.GeneratedPrintBase64===,===oracle.micro.benchmarks.app.sjent.generated.GeneratedPrintBase64===,===printBase64Binary_32bytesThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.app.sjent.GeneratedPrintBase64===,===oracle.micro.benchmarks.app.sjent.generated.GeneratedPrintBase64===,===printBase64Binary_512bytesThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-oracle.micro.benchmarks.api.java.util.concurrent.GeneratedMaps===,===oracle.micro.benchmarks.api.java.util.concurrent.generated.GeneratedMaps===,===testConcurrentHashMap===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.api.java.util.concurrent.NormalMaps===,===oracle.micro.benchmarks.api.java.util.concurrent.generated.NormalMaps===,===testConcurrentHashMap===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005HashMapGetIntThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005HashMapGetIntGCThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005HashMapGetIntegerThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005ResizedHashMapGetIntThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.jbb05.GeneratedSPECjbb2005HashMap===,===oracle.micro.benchmarks.app.jbb05.generated.GeneratedSPECjbb2005HashMap===,===jbb2005ResizedHashMapGetIntegerThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.sjent.GeneratedPrintBase64===,===oracle.micro.benchmarks.app.sjent.generated.GeneratedPrintBase64===,===printBase64Binary_128bytesThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.sjent.GeneratedPrintBase64===,===oracle.micro.benchmarks.app.sjent.generated.GeneratedPrintBase64===,===printBase64Binary_32bytesThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.app.sjent.GeneratedPrintBase64===,===oracle.micro.benchmarks.app.sjent.generated.GeneratedPrintBase64===,===printBase64Binary_512bytesThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+oracle.micro.benchmarks.api.java.util.concurrent.GeneratedMaps===,===oracle.micro.benchmarks.api.java.util.concurrent.generated.GeneratedMaps===,===testConcurrentHashMap===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
 
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummy===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummyWarmThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummyWarmOnlyThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummySetupPayloadThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===boom_ExceptionThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===boom_ErrorThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===boom_ThrowableThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===blackholedThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestBrokenMicro===,===org.openjdk.jmh.runner.generated.TestBrokenMicro===,===dummyPayloadThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
-org.openjdk.jmh.runner.TestExceptionThrowingMicro===,===org.openjdk.jmh.runner.generated.TestExceptionThrowingMicro===,===ouchThroughput===,===AverageTime===,===1====,===[4]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummy===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummyWarmThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummyWarmOnlyThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===dummySetupPayloadThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===boom_ExceptionThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===boom_ErrorThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===boom_ThrowableThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestMicro===,===org.openjdk.jmh.runner.generated.TestMicro===,===blackholedThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestBrokenMicro===,===org.openjdk.jmh.runner.generated.TestBrokenMicro===,===dummyPayloadThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]
+org.openjdk.jmh.runner.TestExceptionThrowingMicro===,===org.openjdk.jmh.runner.generated.TestExceptionThrowingMicro===,===ouchThroughput===,===AverageTime===,===[4]===,===1====,===[]===,===[5]===,===[1 s]===,===[]===,===[5]===,===[4 s]===,===[]===,===[1]===,===[]===,===[]===,===[]===,===[]===,===[]===,===[prefixLen===SEP-K===0===SEP-V===10===SEP-V===100===SEP-V======PAIR-SEP===]===,===[NANOSECONDS]===,===[]===,===[10 min]