changeset 57:1655f5729b5a

Yielding tests.
author shade
date Mon, 19 Dec 2016 18:40:11 +0100
parents c796a662ffba
children d41292cbeb90
files src/main/java/org/openjdk/gcbench/alloc/uninit/AllocUninit.java src/main/java/org/openjdk/gcbench/alloc/uninit/IntArray.java src/main/java/org/openjdk/gcbench/tenure/Arrays.java src/main/java/org/openjdk/gcbench/tenure/Queues.java src/main/java/org/openjdk/gcbench/tests/AllocUninit.java src/main/java/org/openjdk/gcbench/tests/UnderPressureTest.java src/main/java/org/openjdk/gcbench/yield/ArrayIteration.java src/main/java/org/openjdk/gcbench/yield/Sleeps.java
diffstat 8 files changed, 143 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/openjdk/gcbench/alloc/uninit/AllocUninit.java	Mon Dec 19 17:23:14 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-package org.openjdk.gcbench.alloc.uninit;
-
-import jdk.internal.misc.Unsafe;
-
-import java.lang.reflect.Field;
-
-public class AllocUninit {
-
-    static final Unsafe U;
-
-    static {
-        try {
-            Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
-            unsafeField.setAccessible(true);
-            U = (Unsafe) unsafeField.get(null);
-        } catch (Exception e) {
-            throw new AssertionError(e);
-        }
-    }
-
-    public static Object alloc(int size) {
-        return U.allocateUninitializedArray(int.class, size);
-    }
-}
--- a/src/main/java/org/openjdk/gcbench/alloc/uninit/IntArray.java	Mon Dec 19 17:23:14 2016 +0100
+++ b/src/main/java/org/openjdk/gcbench/alloc/uninit/IntArray.java	Mon Dec 19 18:40:11 2016 +0100
@@ -1,5 +1,6 @@
 package org.openjdk.gcbench.alloc.uninit;
 
+import org.openjdk.gcbench.tests.AllocUninit;
 import org.openjdk.jmh.annotations.*;
 
 import java.util.concurrent.TimeUnit;
--- a/src/main/java/org/openjdk/gcbench/tenure/Arrays.java	Mon Dec 19 17:23:14 2016 +0100
+++ b/src/main/java/org/openjdk/gcbench/tenure/Arrays.java	Mon Dec 19 18:40:11 2016 +0100
@@ -1,6 +1,6 @@
 package org.openjdk.gcbench.tenure;
 
-import org.openjdk.gcbench.alloc.uninit.AllocUninit;
+import org.openjdk.gcbench.tests.AllocUninit;
 import org.openjdk.jmh.annotations.*;
 
 import java.util.concurrent.TimeUnit;
--- a/src/main/java/org/openjdk/gcbench/tenure/Queues.java	Mon Dec 19 17:23:14 2016 +0100
+++ b/src/main/java/org/openjdk/gcbench/tenure/Queues.java	Mon Dec 19 18:40:11 2016 +0100
@@ -1,9 +1,7 @@
 package org.openjdk.gcbench.tenure;
 
-import org.openjdk.gcbench.alloc.uninit.AllocUninit;
 import org.openjdk.jmh.annotations.*;
 
-import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.TimeUnit;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/tests/AllocUninit.java	Mon Dec 19 18:40:11 2016 +0100
@@ -0,0 +1,24 @@
+package org.openjdk.gcbench.tests;
+
+import jdk.internal.misc.Unsafe;
+
+import java.lang.reflect.Field;
+
+public class AllocUninit {
+
+    static final Unsafe U;
+
+    static {
+        try {
+            Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
+            unsafeField.setAccessible(true);
+            U = (Unsafe) unsafeField.get(null);
+        } catch (Exception e) {
+            throw new AssertionError(e);
+        }
+    }
+
+    public static Object alloc(int size) {
+        return U.allocateUninitializedArray(int.class, size);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/tests/UnderPressureTest.java	Mon Dec 19 18:40:11 2016 +0100
@@ -0,0 +1,40 @@
+package org.openjdk.gcbench.tests;
+
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+
+@Fork(jvmArgsPrepend = {"--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED"})
+@State(Scope.Benchmark)
+public class UnderPressureTest {
+
+    SuperAllocator allocator;
+
+    @Setup
+    public void setup(Blackhole bh) {
+        allocator = new SuperAllocator(bh);
+        allocator.start();
+    }
+
+    @TearDown
+    public void tearDown() throws InterruptedException {
+        allocator.interrupt();
+        allocator.join();
+    }
+
+    public class SuperAllocator extends Thread {
+        private final Blackhole bh;
+
+        public SuperAllocator(Blackhole bh) {
+            this.bh = bh;
+        }
+
+        @Override
+        public void run() {
+            while (!Thread.interrupted()) {
+                bh.consume(AllocUninit.alloc(1000));
+            }
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/yield/ArrayIteration.java	Mon Dec 19 18:40:11 2016 +0100
@@ -0,0 +1,44 @@
+package org.openjdk.gcbench.yield;
+
+import org.openjdk.gcbench.tests.UnderPressureTest;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
+
+@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
+@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
+@Fork(1)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Threads(Threads.MAX)
+@State(Scope.Benchmark)
+public class ArrayIteration extends UnderPressureTest {
+
+    int[] arr;
+
+    @Param({"100000"})
+    int size;
+
+    @Setup
+    public void setup(Blackhole bh) {
+        super.setup(bh);
+        arr = new int[size];
+    }
+
+    @TearDown
+    public void tearDown() throws InterruptedException {
+        super.tearDown();
+    }
+
+    @Benchmark
+    public int test() throws InterruptedException {
+        int r = 0;
+        for (int i : arr) {
+            r += i;
+        }
+        return r;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/yield/Sleeps.java	Mon Dec 19 18:40:11 2016 +0100
@@ -0,0 +1,33 @@
+package org.openjdk.gcbench.yield;
+
+import org.openjdk.gcbench.tests.UnderPressureTest;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+import java.util.concurrent.TimeUnit;
+
+@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
+@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
+@Fork(1)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Threads(Threads.MAX)
+@State(Scope.Benchmark)
+public class Sleeps extends UnderPressureTest {
+
+    @Setup
+    public void setup(Blackhole bh) {
+        super.setup(bh);
+    }
+
+    @TearDown
+    public void tearDown() throws InterruptedException {
+        super.tearDown();
+    }
+
+    @Benchmark
+    public void test() throws InterruptedException {
+        Thread.sleep(1);
+    }
+
+}
\ No newline at end of file