changeset 81:c1b1811b7730

Fragger updates
author shade
date Thu, 26 Oct 2017 12:09:35 +0200
parents 7fa076c63a42
children f8cde6220e90
files src/main/java/org/openjdk/gcbench/fragger/CHMFragger.java src/main/java/org/openjdk/gcbench/fragger/LRUFragger.java
diffstat 2 files changed, 41 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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;