changeset 64:4b6fa8cb7422

Collection traversal tests.
author shade
date Thu, 05 Jan 2017 15:10:44 +0100
parents 4016779f803c
children 6fd4f0b13bae
files src/main/java/org/openjdk/gcbench/colls/HashMapTraversal.java src/main/java/org/openjdk/gcbench/colls/LinkedListTraversal.java src/main/java/org/openjdk/gcbench/colls/TreeMapTraversal.java src/main/java/org/openjdk/gcbench/wip/LinkedListTraversal.java
diffstat 4 files changed, 140 insertions(+), 192 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/colls/HashMapTraversal.java	Thu Jan 05 15:10:44 2017 +0100
@@ -0,0 +1,47 @@
+package org.openjdk.gcbench.colls;
+
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+import java.util.HashMap;
+import java.util.Map;
+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.MICROSECONDS)
+@Threads(1)
+@State(Scope.Benchmark)
+public class HashMapTraversal {
+
+    Map<Integer, Object> map;
+
+    @Param({"1", "10", "100", "1000", "10000", "100000", "1000000"})
+    private int size;
+
+    @Param({"0", "1", "10", "100"})
+    private int burn;
+
+    @Setup
+    public void setup() {
+        map = new HashMap<>();
+        for (int c = 0; c < size; c++) {
+            map.put(c, new Object());
+        }
+    }
+
+    @Benchmark
+    public void test() {
+        for (Object o : map.entrySet()) {
+            process(o);
+        }
+    }
+
+    @CompilerControl(CompilerControl.Mode.DONT_INLINE)
+    private void process(Object o) {
+        Blackhole.consumeCPU(burn);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/colls/LinkedListTraversal.java	Thu Jan 05 15:10:44 2017 +0100
@@ -0,0 +1,46 @@
+package org.openjdk.gcbench.colls;
+
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+import java.util.LinkedList;
+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.MICROSECONDS)
+@Threads(1)
+@State(Scope.Benchmark)
+public class LinkedListTraversal {
+
+    LinkedList<Object> list;
+
+    @Param({"1", "10", "100", "1000", "10000", "100000", "1000000"})
+    private int size;
+
+    @Param({"0", "1", "10", "100"})
+    private int burn;
+
+    @Setup
+    public void setup() {
+        list = new LinkedList<>();
+        for (int c = 0; c < size; c++) {
+            list.add(new Object());
+        }
+    }
+
+    @Benchmark
+    public void test() {
+        for (Object o : list) {
+            process(o);
+        }
+    }
+
+    @CompilerControl(CompilerControl.Mode.DONT_INLINE)
+    private void process(Object o) {
+        Blackhole.consumeCPU(burn);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/openjdk/gcbench/colls/TreeMapTraversal.java	Thu Jan 05 15:10:44 2017 +0100
@@ -0,0 +1,47 @@
+package org.openjdk.gcbench.colls;
+
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+import java.util.Map;
+import java.util.TreeMap;
+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.MICROSECONDS)
+@Threads(1)
+@State(Scope.Benchmark)
+public class TreeMapTraversal {
+
+    Map<Integer, Object> map;
+
+    @Param({"1", "10", "100", "1000", "10000", "100000", "1000000"})
+    private int size;
+
+    @Param({"0", "1", "10", "100"})
+    private int burn;
+
+    @Setup
+    public void setup() {
+        map = new TreeMap<>();
+        for (int c = 0; c < size; c++) {
+            map.put(c, new Object());
+        }
+    }
+
+    @Benchmark
+    public void test() {
+        for (Object o : map.entrySet()) {
+            process(o);
+        }
+    }
+
+    @CompilerControl(CompilerControl.Mode.DONT_INLINE)
+    private void process(Object o) {
+        Blackhole.consumeCPU(burn);
+    }
+
+}
--- a/src/main/java/org/openjdk/gcbench/wip/LinkedListTraversal.java	Thu Jan 05 13:12:38 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-package org.openjdk.shenandoah.wip;
-
-import org.openjdk.jmh.annotations.*;
-import org.openjdk.jmh.infra.Blackhole;
-
-import java.util.LinkedList;
-import java.util.concurrent.TimeUnit;
-
-@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
-@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
-@Fork(value = 1, jvmArgsAppend = {"-Xmx2g", "-Xms2g"})
-@BenchmarkMode(Mode.AverageTime)
-@OutputTimeUnit(TimeUnit.NANOSECONDS)
-@Threads(Threads.MAX)
-@State(Scope.Benchmark)
-public class LinkedListTraversal {
-
-    LinkedList<Object> list;
-
-    @Param({"1", "10", "100", "1000"})
-    private int size;
-
-    @Param({"0", "1", "10", "100"})
-    private int work;
-
-    @Setup
-    public void setup() {
-        list = new LinkedList<>();
-        for (int c = 0; c < size; c++) {
-            list.add(new Object());
-        }
-    }
-
-    @Benchmark
-    public void test() {
-        for (Object o : list) {
-            process(o);
-        }
-    }
-
-    @CompilerControl(CompilerControl.Mode.DONT_INLINE)
-    private void process(Object o) {
-        Blackhole.consumeCPU(work);
-    }
-
-    /*
-        i7 4790K, 4.0 Ghz, Linux x86_64, JDK 9 (Shenandoah, 2016-09-05)
-
-            Benchmark                 (size)  (work)  Mode  Cnt       Score      Error  Units
-
-            # ------------- Shenandoah
-            LinkedListTraversal.test       1       0  avgt    5      17.388 ±    0.424  ns/op
-            LinkedListTraversal.test       1       1  avgt    5      18.755 ±    0.102  ns/op
-            LinkedListTraversal.test       1      10  avgt    5      33.846 ±    0.185  ns/op
-            LinkedListTraversal.test       1     100  avgt    5     230.246 ±    4.150  ns/op
-
-            LinkedListTraversal.test      10       0  avgt    5     126.915 ±    0.619  ns/op
-            LinkedListTraversal.test      10       1  avgt    5     139.774 ±    1.138  ns/op
-            LinkedListTraversal.test      10      10  avgt    5     299.499 ±    0.536  ns/op
-            LinkedListTraversal.test      10     100  avgt    5    2275.352 ±  108.207  ns/op
-
-            LinkedListTraversal.test     100       0  avgt    5    1242.132 ±   12.020  ns/op
-            LinkedListTraversal.test     100       1  avgt    5    1362.940 ±   18.402  ns/op
-            LinkedListTraversal.test     100      10  avgt    5    2937.820 ±   88.949  ns/op
-            LinkedListTraversal.test     100     100  avgt    5   22461.248 ±  215.900  ns/op
-
-            LinkedListTraversal.test    1000       0  avgt    5   12407.080 ±  784.980  ns/op
-            LinkedListTraversal.test    1000       1  avgt    5   13568.390 ±   69.637  ns/op
-            LinkedListTraversal.test    1000      10  avgt    5   28889.154 ±  156.406  ns/op
-            LinkedListTraversal.test    1000     100  avgt    5  224457.455 ± 1615.782  ns/op
-
-            # ------------- G1
-            LinkedListTraversal.test       1       0  avgt    5      11.554 ±    0.044  ns/op
-            LinkedListTraversal.test       1       1  avgt    5      13.590 ±    0.512  ns/op
-            LinkedListTraversal.test       1      10  avgt    5      29.012 ±    0.098  ns/op
-            LinkedListTraversal.test       1     100  avgt    5     224.851 ±    1.311  ns/op
-
-            LinkedListTraversal.test      10       0  avgt    5     101.351 ±    0.610  ns/op
-            LinkedListTraversal.test      10       1  avgt    5     114.732 ±    0.477  ns/op
-            LinkedListTraversal.test      10      10  avgt    5     278.078 ±    2.164  ns/op
-            LinkedListTraversal.test      10     100  avgt    5    2258.527 ±   95.300  ns/op
-
-            LinkedListTraversal.test     100       0  avgt    5     997.334 ±    3.157  ns/op
-            LinkedListTraversal.test     100       1  avgt    5    1129.239 ±    7.287  ns/op
-            LinkedListTraversal.test     100      10  avgt    5    2692.583 ±   46.002  ns/op
-            LinkedListTraversal.test     100     100  avgt    5   22185.850 ±  119.166  ns/op
-
-            LinkedListTraversal.test    1000       0  avgt    5   10459.159 ±  619.495  ns/op
-            LinkedListTraversal.test    1000       1  avgt    5   11306.074 ±   57.860  ns/op
-            LinkedListTraversal.test    1000      10  avgt    5   26786.378 ±   98.852  ns/op
-            LinkedListTraversal.test    1000     100  avgt    5  223273.974 ± 1668.267  ns/op
-
-            # ------------- Parallel
-            LinkedListTraversal.test       1       0  avgt    5      12.045 ±    0.102  ns/op
-            LinkedListTraversal.test       1       1  avgt    5      13.521 ±    0.109  ns/op
-            LinkedListTraversal.test       1      10  avgt    5      28.933 ±    0.170  ns/op
-            LinkedListTraversal.test       1     100  avgt    5     224.028 ±    1.007  ns/op
-
-            LinkedListTraversal.test      10       0  avgt    5      99.943 ±    0.319  ns/op
-            LinkedListTraversal.test      10       1  avgt    5     113.020 ±    0.472  ns/op
-            LinkedListTraversal.test      10      10  avgt    5     278.874 ±    0.981  ns/op
-            LinkedListTraversal.test      10     100  avgt    5    2240.404 ±   68.685  ns/op
-
-            LinkedListTraversal.test     100       0  avgt    5     984.926 ±    9.101  ns/op
-            LinkedListTraversal.test     100       1  avgt    5    1123.761 ±   22.491  ns/op
-            LinkedListTraversal.test     100      10  avgt    5    2686.100 ±   27.615  ns/op
-            LinkedListTraversal.test     100     100  avgt    5   22200.145 ±  137.753  ns/op
-
-            LinkedListTraversal.test    1000       0  avgt    5   10608.240 ± 1392.802  ns/op
-            LinkedListTraversal.test    1000       1  avgt    5   11415.247 ±  448.812  ns/op
-            LinkedListTraversal.test    1000      10  avgt    5   27146.258 ±  786.984  ns/op
-            LinkedListTraversal.test    1000     100  avgt    5  223566.680 ± 4465.310  ns/op
-
-        Bottom-line: Shenandoah experiences slowdowns compared to G1 and Parallel, mostly visible
-        when the work associated with each element is small. For "no operation" mode, the overhead
-        is around 25%, and explained by more instructions emitted by Shenandoah which do more
-        memory accesses, see:
-
-            Benchmark                                       (size)  (work)  Mode  Cnt      Score      Error  Units
-
-            # ------------- Shenandoah
-            LinkedListTraversal.test                          1000       0  avgt   50  12354.399 ±   23.683  ns/op
-            LinkedListTraversal.test:CPI                      1000       0  avgt   10      0.581 ±    0.003   #/op
-            LinkedListTraversal.test:L1-dcache-load-misses    1000       0  avgt   10    664.917 ±    9.217   #/op
-            LinkedListTraversal.test:L1-dcache-loads          1000       0  avgt   10  32601.580 ±  374.103   #/op  <--- !!!
-            LinkedListTraversal.test:L1-dcache-stores         1000       0  avgt   10  15101.405 ±  176.765   #/op
-            LinkedListTraversal.test:branch-misses            1000       0  avgt   10      6.186 ±    0.311   #/op
-            LinkedListTraversal.test:branches                 1000       0  avgt   10  13746.542 ±  154.449   #/op
-            LinkedListTraversal.test:bus-cycles               1000       0  avgt   10   1268.583 ±   13.952   #/op
-            LinkedListTraversal.test:cycles                   1000       0  avgt   10  45603.892 ±  502.818   #/op
-            LinkedListTraversal.test:dTLB-load-misses         1000       0  avgt   10      1.584 ±    0.228   #/op
-            LinkedListTraversal.test:dTLB-loads               1000       0  avgt    9  32488.220 ±  487.012   #/op
-            LinkedListTraversal.test:dTLB-store-misses        1000       0  avgt   10      0.046 ±    0.017   #/op
-            LinkedListTraversal.test:dTLB-stores              1000       0  avgt   10  15058.174 ±  175.262   #/op
-            LinkedListTraversal.test:instructions             1000       0  avgt   10  78513.188 ±  756.405   #/op  <--- !!!
-            LinkedListTraversal.test:ref-cycles               1000       0  avgt   10  50832.373 ±  505.813   #/op
-
-            # ------------- G1
-            LinkedListTraversal.test                          1000       0  avgt   50  10495.699 ±   65.219  ns/op
-            LinkedListTraversal.test:CPI                      1000       0  avgt   10      0.618 ±    0.014   #/op
-            LinkedListTraversal.test:L1-dcache-load-misses    1000       0  avgt   10    377.307 ±   12.210   #/op
-            LinkedListTraversal.test:L1-dcache-loads          1000       0  avgt   10  22606.939 ±  518.441   #/op
-            LinkedListTraversal.test:L1-dcache-stores         1000       0  avgt   10  16238.168 ±  329.001   #/op
-            LinkedListTraversal.test:branch-misses            1000       0  avgt   10      4.739 ±    0.523   #/op
-            LinkedListTraversal.test:branches                 1000       0  avgt   10   9589.771 ±  226.666   #/op
-            LinkedListTraversal.test:bus-cycles               1000       0  avgt   10   1077.738 ±   21.578   #/op
-            LinkedListTraversal.test:cycles                   1000       0  avgt   10  38816.240 ±  706.088   #/op
-            LinkedListTraversal.test:dTLB-load-misses         1000       0  avgt   10      1.343 ±    0.182   #/op
-            LinkedListTraversal.test:dTLB-loads               1000       0  avgt   10  22527.332 ±  500.666   #/op
-            LinkedListTraversal.test:dTLB-store-misses        1000       0  avgt    8      0.047 ±    0.058   #/op
-            LinkedListTraversal.test:dTLB-stores              1000       0  avgt    8  16151.683 ±  322.656   #/op
-            LinkedListTraversal.test:instructions             1000       0  avgt   10  62848.740 ± 1555.431   #/op
-            LinkedListTraversal.test:ref-cycles               1000       0  avgt   10  43275.574 ±  748.133   #/op
-
-            # ------------- Parallel
-            LinkedListTraversal.test                          1000       0  avgt   50  10507.829 ±   65.413  ns/op
-            LinkedListTraversal.test:CPI                      1000       0  avgt   10      0.617 ±    0.008   #/op
-            LinkedListTraversal.test:L1-dcache-load-misses    1000       0  avgt    9    379.135 ±   16.184   #/op
-            LinkedListTraversal.test:L1-dcache-loads          1000       0  avgt    9  22681.509 ±  390.124   #/op
-            LinkedListTraversal.test:L1-dcache-stores         1000       0  avgt    9  16162.990 ±  244.165   #/op
-            LinkedListTraversal.test:branch-misses            1000       0  avgt   10      4.777 ±    0.553   #/op
-            LinkedListTraversal.test:branches                 1000       0  avgt   10   9537.536 ±  122.677   #/op
-            LinkedListTraversal.test:bus-cycles               1000       0  avgt   10   1072.327 ±   19.018   #/op
-            LinkedListTraversal.test:cycles                   1000       0  avgt   10  38632.620 ±  934.336   #/op
-            LinkedListTraversal.test:dTLB-load-misses         1000       0  avgt    8      1.338 ±    0.148   #/op
-            LinkedListTraversal.test:dTLB-loads               1000       0  avgt    9  22627.587 ±  392.352   #/op
-            LinkedListTraversal.test:dTLB-store-misses        1000       0  avgt    8      0.035 ±    0.016   #/op
-            LinkedListTraversal.test:dTLB-stores              1000       0  avgt    9  16104.147 ±  230.044   #/op
-            LinkedListTraversal.test:instructions             1000       0  avgt   10  62623.520 ± 1394.639   #/op
-            LinkedListTraversal.test:ref-cycles               1000       0  avgt   10  42984.093 ± 1044.819   #/op
-
-        These additional memory accesses are read barriers, e.g.:
-
-        Shenandoah:
-
-              0.88%    0.54%  0x00007f2029549703: mov    -0x8(%rcx),%r10    ; implicit exception: dispatches to 0x00007f2029549cb9
-              1.18%    0.95%  0x00007f2029549707: mov    0x10(%r10),%r10d   ;*getfield next {reexecute=0 rethrow=0 return_oop=0}
-                                                                            ; - java.util.LinkedList$ListItr::next@32 (line 897)
-                                                                            ; - org.openjdk.shenandoah.scenarios.LinkedListTraversal::test@18 (line 36)
-                                                                            ; - org.openjdk.shenandoah.scenarios.generated.LinkedListTraversal_test_jmhTest::test_avgt_jmhStub@15 (line 213)
-
-        G1/Parallel:
-
-              0.95%    0.72%  0x00007fe7c554707b: mov    0x10(%r11),%r10d   ;*getfield next {reexecute=0 rethrow=0 return_oop=0}
-                                                                            ; - java.util.LinkedList$ListItr::next@32 (line 897)
-                                                                            ; - org.openjdk.shenandoah.scenarios.LinkedListTraversal::test@18 (line 36)
-                                                                            ; - org.openjdk.shenandoah.scenarios.generated.LinkedListTraversal_test_jmhTest::test_avgt_jmhStub@15 (line 213)
-                                                                            ; implicit exception: dispatches to 0x00007fe7c5547305
-
-     */
-
-}