From 663a8656cd7538ec32ddb6e57fe1bd830b8bed55 Mon Sep 17 00:00:00 2001 From: Cristian Ferretti <37232625+jcferretti@users.noreply.github.com> Date: Tue, 28 Dec 2021 10:16:09 -0300 Subject: [PATCH] Rename Index* related JMH benches to RowSet*. Add RowSetFindGetBench (ported over from DHE). (#1742) --- ...nch.java => RandomRowSetBuilderBench.java} | 4 +- ...ch.java => RowSetBuilderChunkedBench.java} | 4 +- ...IndexCreation.java => RowSetCreation.java} | 4 +- .../engine/util/RowSetGetFindBench.java | 122 ++++++++++++++++++ ...dexIteration.java => RowSetIteration.java} | 12 +- ...onBench.java => RowSetIterationBench.java} | 4 +- ...rationRaw.java => RowSetIterationRaw.java} | 4 +- ...java => SequentialRowSetBuilderBench.java} | 4 +- ...Creation.java => SmallRowSetCreation.java} | 4 +- 9 files changed, 142 insertions(+), 20 deletions(-) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{RandomIndexBuilderBench.java => RandomRowSetBuilderBench.java} (96%) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{IndexBuilderChunkedBench.java => RowSetBuilderChunkedBench.java} (97%) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{IndexCreation.java => RowSetCreation.java} (98%) create mode 100644 engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetGetFindBench.java rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{IndexIteration.java => RowSetIteration.java} (97%) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{IndexIterationBench.java => RowSetIterationBench.java} (97%) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{IndexIterationRaw.java => RowSetIterationRaw.java} (99%) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{SequentialIndexBuilderBench.java => SequentialRowSetBuilderBench.java} (96%) rename engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/{SmallIndexCreation.java => SmallRowSetCreation.java} (97%) diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RandomIndexBuilderBench.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RandomRowSetBuilderBench.java similarity index 96% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RandomIndexBuilderBench.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RandomRowSetBuilderBench.java index fdb80225d9e..821d5ebc65d 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RandomIndexBuilderBench.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RandomRowSetBuilderBench.java @@ -20,7 +20,7 @@ @Measurement(iterations = 3, time = 30) @Fork(value = 1) -public class RandomIndexBuilderBench { +public class RandomRowSetBuilderBench { @Param({"10000000"}) // , "10000000"}) private static int sz; @@ -97,6 +97,6 @@ public void c01_buildAndPopulateWithRandomBuilderKeyRanges(final Blackhole bh) { } public static void main(String[] args) throws RunnerException { - BenchUtil.run(RandomIndexBuilderBench.class); + BenchUtil.run(RandomRowSetBuilderBench.class); } } diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexBuilderChunkedBench.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetBuilderChunkedBench.java similarity index 97% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexBuilderChunkedBench.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetBuilderChunkedBench.java index 353ec3f1a31..fd7bfc3ea14 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexBuilderChunkedBench.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetBuilderChunkedBench.java @@ -21,7 +21,7 @@ @Warmup(iterations = 3, time = 1) @Measurement(iterations = 10, time = 1) @Fork(value = 1) -public class IndexBuilderChunkedBench { +public class RowSetBuilderChunkedBench { private RowSet ix = null; private static final int chunkSz = 1024; private WritableLongChunk indicesChunk = null; @@ -149,6 +149,6 @@ public long end() { } public static void main(String[] args) throws RunnerException { - BenchUtil.run(IndexBuilderChunkedBench.class); + BenchUtil.run(RowSetBuilderChunkedBench.class); } } diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexCreation.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetCreation.java similarity index 98% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexCreation.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetCreation.java index e8c7d8007db..f4fbf9094e4 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexCreation.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetCreation.java @@ -16,7 +16,7 @@ @Warmup(timeUnit = TimeUnit.MILLISECONDS, iterations = 1, time = 500) @Measurement(timeUnit = TimeUnit.MILLISECONDS, iterations = 1, time = 500) @Fork(1) -public class IndexCreation { +public class RowSetCreation { @Param({"10000000"}) private int indexCount; @@ -172,6 +172,6 @@ public void createRspIndexByRanges(Blackhole bh) { } public static void main(String[] args) throws RunnerException { - BenchUtil.run(IndexCreation.class); + BenchUtil.run(RowSetCreation.class); } } diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetGetFindBench.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetGetFindBench.java new file mode 100644 index 00000000000..47227d1990d --- /dev/null +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetGetFindBench.java @@ -0,0 +1,122 @@ +package io.deephaven.benchmark.engine.util; + +import io.deephaven.benchmarking.BenchUtil; +import io.deephaven.engine.rowset.RowSet; +import io.deephaven.engine.rowset.RowSetBuilderSequential; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.rowset.impl.rsp.RspBitmap; +import io.deephaven.util.metrics.MetricsManager; +import org.apache.commons.lang3.mutable.MutableInt; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; +import org.openjdk.jmh.runner.RunnerException; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@State(Scope.Thread) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +@Warmup(iterations = 1, time = 10) +@Measurement(iterations = 5, time = 10) +@Fork(value = 1) + +public class RowSetGetFindBench { + + private static final long randomSeed = 1; + private static final int containers = 10_000; + private static final double probRunContainer = 0.5; + private static final int runsPerRunContainer = 1_000; + private static final int runLen = 20; + // RowSet size = containers * runsPerContainer*runLen. + private static RowSet rowSet; + private static RowSet opRowSet; + + private static final Random rand = new Random(randomSeed); + + // No bigger than ix.size, see above. + @Param({"40"}) + private static long millionOps; + + @Setup(Level.Trial) + public void setup() { + final String rowSetFilename = System.getProperty("rowset.filename"); + if (rowSetFilename == null || rowSetFilename.equals("")) { + rowSet = generateRandomRowSet(); + } else { + rowSet = loadRowSet(rowSetFilename); + } + // To get this output we need JVM flag `-DMetricsManager.enabled=true` + System.out.println(MetricsManager.getCounters()); + final long ops = millionOps * 1000 * 1000; + opRowSet = rowSet.subSetByPositionRange(0, ops); + } + + private static RowSet loadRowSet(final String rowSetFilename) { + final RowSet exported; + long st = System.currentTimeMillis(); + System.out.print("Loading rowset " + rowSetFilename + "... "); + try (final ObjectInputStream ois = new ObjectInputStream(new FileInputStream(rowSetFilename))) { + exported = (RowSet) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + System.exit(1); + // keep the compiler happy + return null; + } + System.out.println("Load done in " + (System.currentTimeMillis() - st) + " ms"); + + st = System.currentTimeMillis(); + System.out.print("Reconstructing it by sequential builder... "); + final RowSetBuilderSequential builder = RowSetFactory.builderSequential(); + exported.forAllRowKeys(builder::appendKey); + final RowSet rowSet = builder.build(); + System.out.println("Builder done in " + (System.currentTimeMillis() - st) + " ms"); + + return rowSet; + } + + private static RowSet generateRandomRowSet() { + long st = System.currentTimeMillis(); + System.out.print("Generating pseudorandom RowSet... "); + final RowSetBuilderSequential builder = RowSetFactory.builderSequential(); + for (int i = 0; i < containers; ++i) { + final long base = RspBitmap.BLOCK_SIZE * i; + if (rand.nextDouble() < probRunContainer) { + for (int run = 0; run < runsPerRunContainer; ++run) { + final long start = base + (runLen + 2) * run; + builder.appendRange(start, start + runLen - 1); + } + } else { // full block span + builder.appendRange(base, base + RspBitmap.BLOCK_LAST); + } + } + final RowSet rowSet = builder.build(); + System.out.println("RowSet generation done in " + (System.currentTimeMillis() - st) + " ms"); + return rowSet; + } + + @Benchmark + public void b00_get(final Blackhole bh) { + final long ops = millionOps * 1000 * 1000; + long acc = 0; + for (int op = 0; op < ops; ++op) { + acc += rowSet.get(op); + } + bh.consume(acc); + } + + @Benchmark + public void b01_find(final Blackhole bh) { + final MutableInt accum = new MutableInt(0); + opRowSet.forAllRowKeys(l -> accum.add(rowSet.find(l))); + bh.consume(accum.getValue()); + } + + public static void main(String[] args) throws RunnerException { + BenchUtil.run(RowSetGetFindBench.class); + } +} diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIteration.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIteration.java similarity index 97% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIteration.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIteration.java index 3f9fa286a50..930a3d6e14b 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIteration.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIteration.java @@ -20,7 +20,7 @@ @Warmup(iterations = 1, time = 1) @Measurement(iterations = 1, time = 1) @Fork(1) -public class IndexIteration { +public class RowSetIteration { // @Param({/*100", "10000",*/ "1000000"/*, "10000000"*/}) private int indexCount = 1000000; @@ -208,7 +208,7 @@ private int fillChunkByIndexRangeIterator(RowSet.RangeIterator it, int rangeStar return rangeStart + length; } - private int[] fillChunkDirectByRangeIndexIteration(int posInRange, int rangeStart, int size, + private int[] fillChunkDirectByRangeRowSetIteration(int posInRange, int rangeStart, int size, WritableDoubleChunk doubleChunk, int sourceId) { int pos = 0; int rangeEnd = (int) indexRanges[posInRange + 1]; @@ -309,7 +309,7 @@ public void directByRangeIteration(Blackhole bh) { int[] posInRangeAndRangeStart = null; for (int i = 0; i < chunks.length; i++) { posInRangeAndRangeStart = - fillChunkDirectByRangeIndexIteration(lastPosInRange, rangeStart, chunkSize, chunks[i], i); + fillChunkDirectByRangeRowSetIteration(lastPosInRange, rangeStart, chunkSize, chunks[i], i); } lastPosInRange = posInRangeAndRangeStart[0]; rangeStart = posInRangeAndRangeStart[1]; @@ -319,7 +319,7 @@ public void directByRangeIteration(Blackhole bh) { } for (int i = 0; i < chunks.length; i++) { - fillChunkDirectByRangeIndexIteration(lastPosInRange, rangeStart, indexCount % chunkSize, chunks[i], i); + fillChunkDirectByRangeRowSetIteration(lastPosInRange, rangeStart, indexCount % chunkSize, chunks[i], i); } evaluate(result, chunks); sum = sum(sum); @@ -328,7 +328,7 @@ public void directByRangeIteration(Blackhole bh) { } @Benchmark - public void directByIndexIteration(Blackhole bh) { + public void directByRowSetIteration(Blackhole bh) { int stepCount = indexCount / chunkSize; double sum = 0; for (int step = 0; step < stepCount; step++) { @@ -412,7 +412,7 @@ public void indexByIndexRangeIterator(Blackhole bh) { // doubleChunk, int sourceId) { public static void main(String[] args) throws RunnerException { - BenchUtil.run(IndexIteration.class); + BenchUtil.run(RowSetIteration.class); } double sum(double prevSum) { diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIterationBench.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIterationBench.java similarity index 97% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIterationBench.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIterationBench.java index 2cf9415e94b..26fe7589981 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIterationBench.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIterationBench.java @@ -21,7 +21,7 @@ @Measurement(iterations = 3, time = 7) @Fork(value = 1) -public class IndexIterationBench { +public class RowSetIterationBench { @Param({"10000000"}) // "10000", "100000", "1000000"}) // , "10000000"}) private static int sz; @@ -109,6 +109,6 @@ public void b06_forEachTroveLongHashSet(final Blackhole bh) { } public static void main(String[] args) throws RunnerException { - BenchUtil.run(IndexIterationBench.class); + BenchUtil.run(RowSetIterationBench.class); } } diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIterationRaw.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIterationRaw.java similarity index 99% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIterationRaw.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIterationRaw.java index 5f9d9f89cba..44a46094383 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/IndexIterationRaw.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/RowSetIterationRaw.java @@ -22,7 +22,7 @@ @Warmup(iterations = 1, time = 1) @Measurement(iterations = 1, time = 1) @Fork(1) -public class IndexIterationRaw { +public class RowSetIterationRaw { // Generate RowSet as ranges and as individual position // Build a RowSet for it @@ -396,6 +396,6 @@ public void indexByIndexRangeIterator(Blackhole bh, RowSet rowSet) { } public static void main(String[] args) throws RunnerException { - BenchUtil.run(IndexIterationRaw.class); + BenchUtil.run(RowSetIterationRaw.class); } } diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SequentialIndexBuilderBench.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SequentialRowSetBuilderBench.java similarity index 96% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SequentialIndexBuilderBench.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SequentialRowSetBuilderBench.java index 4df05dad3b3..a15b37e8147 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SequentialIndexBuilderBench.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SequentialRowSetBuilderBench.java @@ -18,7 +18,7 @@ @Measurement(iterations = 3, time = 30) @Fork(value = 1) -public class SequentialIndexBuilderBench { +public class SequentialRowSetBuilderBench { @Param({"10000000"}) // "10000", "100000", "1000000"}) // , "10000000"}) private static int sz; @@ -90,6 +90,6 @@ public void c01_buildAndPopulateWithSequentialBuilderKeyRanges(final Blackhole b } public static void main(String[] args) throws RunnerException { - BenchUtil.run(SequentialIndexBuilderBench.class); + BenchUtil.run(SequentialRowSetBuilderBench.class); } } diff --git a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SmallIndexCreation.java b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SmallRowSetCreation.java similarity index 97% rename from engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SmallIndexCreation.java rename to engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SmallRowSetCreation.java index 514384f7af0..16f3129cfae 100644 --- a/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SmallIndexCreation.java +++ b/engine/benchmark/src/benchmark/java/io/deephaven/benchmark/engine/util/SmallRowSetCreation.java @@ -26,7 +26,7 @@ @Warmup(timeUnit = TimeUnit.MILLISECONDS, iterations = 2, time = 2000) @Measurement(timeUnit = TimeUnit.MILLISECONDS, iterations = 5, time = 2000) @Fork(1) -public class SmallIndexCreation { +public class SmallRowSetCreation { // @Param({"12", "16", "20"}) @Param("12") private int valuesPerBlock; @@ -144,7 +144,7 @@ public void fillAnArrayOfSameSizeOneElementAtATime(Blackhole bh) { public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() - .include(SmallIndexCreation.class.getSimpleName()) + .include(SmallRowSetCreation.class.getSimpleName()) .build(); new Runner(opt).run();