# HG changeset patch # User shade # Date 1509012575 -7200 # Node ID c1b1811b77300ee95bf7b8fcd757695685f47bb5 # Parent 7fa076c63a423a352c9d230f45e2de84f10d4bfd Fragger updates diff -r 7fa076c63a42 -r c1b1811b7730 src/main/java/org/openjdk/gcbench/fragger/CHMFragger.java --- a/src/main/java/org/openjdk/gcbench/fragger/CHMFragger.java Thu Oct 26 12:03:09 2017 +0200 +++ b/src/main/java/org/openjdk/gcbench/fragger/CHMFragger.java Thu Oct 26 12:09:35 2017 +0200 @@ -17,6 +17,8 @@ @State(Scope.Benchmark) public class CHMFragger { + static final int PAYLOAD_SIZE = 4096; + @Param({"1000"}) int size; @@ -30,7 +32,7 @@ for (int c = 0; c < size; c++) { Object k = new Object(); keys[c] = k; - cache.put(k, new byte[1000]); + cache.put(k, new byte[PAYLOAD_SIZE]); } } @@ -41,7 +43,7 @@ if (tlr.nextInt(5) == 0) { Object pk = keys[idx]; Object nk = new Object(); - byte[] v = new byte[1000]; + byte[] v = new byte[PAYLOAD_SIZE]; cache.put(nk, v); cache.remove(pk); keys[idx] = nk; diff -r 7fa076c63a42 -r c1b1811b7730 src/main/java/org/openjdk/gcbench/fragger/LRUFragger.java --- a/src/main/java/org/openjdk/gcbench/fragger/LRUFragger.java Thu Oct 26 12:03:09 2017 +0200 +++ b/src/main/java/org/openjdk/gcbench/fragger/LRUFragger.java Thu Oct 26 12:09:35 2017 +0200 @@ -2,15 +2,13 @@ import org.openjdk.gcbench.tests.Sequence; import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.profile.SafepointsProfiler; import org.openjdk.jmh.results.Result; import org.openjdk.jmh.results.RunResult; 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 org.openjdk.jmh.runner.options.TimeValue; -import org.openjdk.jmh.runner.options.VerboseMode; +import org.openjdk.jmh.runner.options.*; import java.io.PrintStream; import java.util.LinkedHashMap; @@ -19,16 +17,17 @@ import java.util.concurrent.TimeUnit; -@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) -@Fork(value = 1) -@BenchmarkMode(Mode.AverageTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Threads(1) -@State(Scope.Benchmark) +@Warmup(iterations = 0) +@Measurement(iterations = 1, time = 1) +@Fork(1) +@BenchmarkMode(Mode.SingleShotTime) +@OutputTimeUnit(TimeUnit.SECONDS) +@Threads(8) +@State(Scope.Thread) public class LRUFragger { static final int PAYLOAD_SIZE = 4096; + static final long TARGET_ALLOCS = 256L * 1024 * 1024 * 1024; @Param({"1000"}) int size; @@ -51,36 +50,47 @@ } @Benchmark - public Object test() { - int idx = ThreadLocalRandom.current().nextInt(keyCount); - Object k = "Key " + idx; - Object o = cache.get(k); - if (o == null) { - o = new byte[PAYLOAD_SIZE]; - cache.put(k, o); + public void test(Blackhole bh) { + long allocs = 0; + while (allocs < TARGET_ALLOCS) { + int idx = ThreadLocalRandom.current().nextInt(keyCount); + Object k = "Key " + idx; + Object o = cache.get(k); + if (o == null) { + o = new byte[PAYLOAD_SIZE]; + allocs += PAYLOAD_SIZE; + cache.put(k, o); + } + bh.consume(o); } - return o; } public static void main(String... args) throws RunnerException { Options parent = new OptionsBuilder() .detectJvmArgs() - .jvmArgsAppend("-Xmx100g", "-Xms100g", "-XX:MaxGCPauseMillis=10", "-XX:+AlwaysPreTouch") + .jvmArgsAppend("-Xmx100g", "-Xms100g", "-XX:MaxGCPauseMillis=10", "-XX:+AlwaysPreTouch", "-XX:-UseBiasedLocking", "-XX:+UnlockDiagnosticVMOptions", "-XX:GuaranteedSafepointInterval=10000000") .include(LRUFragger.class.getCanonicalName()) .verbosity(VerboseMode.SILENT) .addProfiler(SafepointsProfiler.class) - .warmupIterations(5) - .warmupTime(TimeValue.seconds(10)) - .measurementIterations(5) - .measurementTime(TimeValue.seconds(1)) - .measurementTime(TimeValue.seconds(10)) + .timeout(TimeValue.hours(1)) +// .warmupIterations(5) + //.warmupTime(TimeValue.seconds(10)) +// .warmupTime(TimeValue.seconds(5)) +// .measurementIterations(5) + //.measurementTime(TimeValue.seconds(10)) +// .measurementTime(TimeValue.seconds(5)) +// .threads(8) .build(); PrintStream pw = System.out; - Sequence sizeSeq = Sequence.steps(0, 23_000_000, 10); +// Sequence sizeSeq = Sequence.steps(0, 24_000_000, 20); // for 100 GB + Sequence sizeSeq = Sequence.steps(0, 3_000_000, 20); // for 100 GB, 8 threads +// Sequence sizeSeq = Sequence.steps(0, 2_400_000, 10); // for 10 GB +// Sequence sizeSeq = Sequence.predefined(1_000_000); - for (String gc : new String[]{"-XX:+UseParallelOldGC", "-XX:+UseG1GC", "-XX:+UseConcMarkSweepGC", "-XX:+UseShenandoahGC"}) { +// for (String gc : new String[]{"-XX:+UseParallelGC"}) { + for (String gc : new String[]{"-XX:+UseShenandoahGC", "-XX:+UseParallelGC", "-XX:+UseG1GC", "-XX:+UseConcMarkSweepGC"}) { for (Object size : sizeSeq) { if (size.toString().equals("0")) continue;