Skip to content

Instantly share code, notes, and snippets.

@eiennohito
Created February 16, 2022 01:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eiennohito/a8ab478bb3ea9200aa37eb545c3bdd3a to your computer and use it in GitHub Desktop.
Save eiennohito/a8ab478bb3ea9200aa37eb545c3bdd3a to your computer and use it in GitHub Desktop.
➜ jmh java -jar jmh.jar ".*DoubleArray.*" -prof=gc
# JMH version: 1.34
# VM version: JDK 17-testing, OpenJDK 64-Bit Server VM, 17-testing+0-builds.shipilev.net-openjdk-jdk17-b12-20210925
# VM invoker: /home/arseny/work/tools/jdk/jdk-17/bin/java
# VM options: <none>
# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)
# Warmup: 3 iterations, 5 s each
# Measurement: 7 iterations, 5 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieNewImpl
# Run progress: 0.00% complete, ETA 00:01:40
# Fork: 1 of 1
# Warmup Iteration 1: 1981.648 ops/ms
# Warmup Iteration 2: 2184.834 ops/ms
# Warmup Iteration 3: 2192.194 ops/ms
Iteration 1: 2191.951 ops/ms
·gc.alloc.rate: 0.188 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Iteration 2: 2176.545 ops/ms
·gc.alloc.rate: 0.187 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Iteration 3: 2178.307 ops/ms
·gc.alloc.rate: 0.187 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Iteration 4: 2175.337 ops/ms
·gc.alloc.rate: 0.187 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Iteration 5: 2189.535 ops/ms
·gc.alloc.rate: 0.188 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Iteration 6: 2185.085 ops/ms
·gc.alloc.rate: 0.187 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Iteration 7: 2178.987 ops/ms
·gc.alloc.rate: 0.187 MB/sec
·gc.alloc.rate.norm: 0.120 B/op
·gc.count: ≈ 0 counts
Result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieNewImpl":
2182.249 ±(99.9%) 14.876 ops/ms [Average]
(min, avg, max) = (2175.337, 2182.249, 2191.951), stdev = 6.605
CI (99.9%): [2167.374, 2197.125] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieNewImpl:·gc.alloc.rate":
0.187 ±(99.9%) 0.001 MB/sec [Average]
(min, avg, max) = (0.187, 0.187, 0.188), stdev = 0.001
CI (99.9%): [0.186, 0.188] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieNewImpl:·gc.alloc.rate.norm":
0.120 ±(99.9%) 0.001 B/op [Average]
(min, avg, max) = (0.120, 0.120, 0.120), stdev = 0.001
CI (99.9%): [0.120, 0.120] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieNewImpl:·gc.count":
≈ 0 counts
# JMH version: 1.34
# VM version: JDK 17-testing, OpenJDK 64-Bit Server VM, 17-testing+0-builds.shipilev.net-openjdk-jdk17-b12-20210925
# VM invoker: /home/arseny/work/tools/jdk/jdk-17/bin/java
# VM options: <none>
# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)
# Warmup: 3 iterations, 5 s each
# Measurement: 7 iterations, 5 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl
# Run progress: 50.00% complete, ETA 00:00:56
# Fork: 1 of 1
# Warmup Iteration 1: 2019.116 ops/ms
# Warmup Iteration 2: 2122.883 ops/ms
# Warmup Iteration 3: 2106.296 ops/ms
Iteration 1: 2124.961 ops/ms
·gc.alloc.rate: 135.688 MB/sec
·gc.alloc.rate.norm: 88.808 B/op
·gc.churn.G1_Eden_Space: 105.425 MB/sec
·gc.churn.G1_Eden_Space.norm: 69.001 B/op
·gc.count: 2.000 counts
·gc.time: 15.000 ms
Iteration 2: 2093.892 ops/ms
·gc.alloc.rate: 133.548 MB/sec
·gc.alloc.rate.norm: 88.836 B/op
·gc.churn.G1_Eden_Space: 158.125 MB/sec
·gc.churn.G1_Eden_Space.norm: 105.184 B/op
·gc.churn.G1_Survivor_Space: 0.136 MB/sec
·gc.churn.G1_Survivor_Space.norm: 0.090 B/op
·gc.count: 3.000 counts
·gc.time: 24.000 ms
Iteration 3: 2116.276 ops/ms
·gc.alloc.rate: 134.902 MB/sec
·gc.alloc.rate.norm: 88.802 B/op
·gc.churn.G1_Eden_Space: 159.565 MB/sec
·gc.churn.G1_Eden_Space.norm: 105.037 B/op
·gc.churn.G1_Survivor_Space: 1.906 MB/sec
·gc.churn.G1_Survivor_Space.norm: 1.255 B/op
·gc.count: 3.000 counts
·gc.time: 19.000 ms
Iteration 4: 2127.603 ops/ms
·gc.alloc.rate: 135.080 MB/sec
·gc.alloc.rate.norm: 88.814 B/op
·gc.churn.G1_Eden_Space: 109.060 MB/sec
·gc.churn.G1_Eden_Space.norm: 71.706 B/op
·gc.churn.G1_Survivor_Space: 0.075 MB/sec
·gc.churn.G1_Survivor_Space.norm: 0.049 B/op
·gc.count: 2.000 counts
·gc.time: 2.000 ms
Iteration 5: 2111.101 ops/ms
·gc.alloc.rate: 134.130 MB/sec
·gc.alloc.rate.norm: 88.819 B/op
·gc.churn.G1_Eden_Space: 109.044 MB/sec
·gc.churn.G1_Eden_Space.norm: 72.208 B/op
·gc.churn.G1_Survivor_Space: 0.011 MB/sec
·gc.churn.G1_Survivor_Space.norm: 0.007 B/op
·gc.count: 2.000 counts
·gc.time: 2.000 ms
Iteration 6: 2104.638 ops/ms
·gc.alloc.rate: 133.759 MB/sec
·gc.alloc.rate.norm: 88.817 B/op
·gc.churn.G1_Eden_Space: 163.588 MB/sec
·gc.churn.G1_Eden_Space.norm: 108.623 B/op
·gc.churn.G1_Survivor_Space: ≈ 10⁻⁴ MB/sec
·gc.churn.G1_Survivor_Space.norm: ≈ 10⁻⁴ B/op
·gc.count: 3.000 counts
·gc.time: 3.000 ms
Iteration 7: 2120.177 ops/ms
·gc.alloc.rate: 134.696 MB/sec
·gc.alloc.rate.norm: 88.814 B/op
·gc.churn.G1_Eden_Space: 109.060 MB/sec
·gc.churn.G1_Eden_Space.norm: 71.911 B/op
·gc.churn.G1_Survivor_Space: 0.001 MB/sec
·gc.churn.G1_Survivor_Space.norm: 0.001 B/op
·gc.count: 2.000 counts
·gc.time: 2.000 ms
Result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl":
2114.092 ±(99.9%) 26.789 ops/ms [Average]
(min, avg, max) = (2093.892, 2114.092, 2127.603), stdev = 11.894
CI (99.9%): [2087.304, 2140.881] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.alloc.rate":
134.543 ±(99.9%) 1.727 MB/sec [Average]
(min, avg, max) = (133.548, 134.543, 135.688), stdev = 0.767
CI (99.9%): [132.816, 136.270] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.alloc.rate.norm":
88.816 ±(99.9%) 0.024 B/op [Average]
(min, avg, max) = (88.802, 88.816, 88.836), stdev = 0.011
CI (99.9%): [88.792, 88.839] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Eden_Space":
130.552 ±(99.9%) 63.111 MB/sec [Average]
(min, avg, max) = (105.425, 130.552, 163.588), stdev = 28.022
CI (99.9%): [67.442, 193.663] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Eden_Space.norm":
86.238 ±(99.9%) 42.374 B/op [Average]
(min, avg, max) = (69.001, 86.238, 108.623), stdev = 18.814
CI (99.9%): [43.864, 128.613] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Survivor_Space":
0.304 ±(99.9%) 1.595 MB/sec [Average]
(min, avg, max) = (≈ 0, 0.304, 1.906), stdev = 0.708
CI (99.9%): [≈ 0, 1.899] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Survivor_Space.norm":
0.200 ±(99.9%) 1.050 B/op [Average]
(min, avg, max) = (≈ 0, 0.200, 1.255), stdev = 0.466
CI (99.9%): [≈ 0, 1.250] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.count":
17.000 ±(99.9%) 0.001 counts [Sum]
(min, avg, max) = (2.000, 2.429, 3.000), stdev = 0.535
CI (99.9%): [17.000, 17.000] (assumes normal distribution)
Secondary result "com.worksap.nlp.sudachi.dictionary.DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.time":
67.000 ±(99.9%) 0.001 ms [Sum]
(min, avg, max) = (2.000, 9.571, 24.000), stdev = 9.502
CI (99.9%): [67.000, 67.000] (assumes normal distribution)
# Run complete. Total time: 00:01:53
REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.
NOTE: Current JVM experimentally supports Compiler Blackholes, and they are in use. Please exercise
extra caution when trusting the results, look into the generated code to check the benchmark still
works, and factor in a small probability of new VM bugs. Additionally, while comparisons between
different JVMs are already problematic, the performance difference caused by different Blackhole
modes can be very significant. Please make sure you use the consistent Blackhole mode for comparisons.
Benchmark Mode Cnt Score Error Units
DoubleArrayLookupBench.traverseTrieNewImpl thrpt 7 2182.249 ± 14.876 ops/ms
DoubleArrayLookupBench.traverseTrieNewImpl:·gc.alloc.rate thrpt 7 0.187 ± 0.001 MB/sec
DoubleArrayLookupBench.traverseTrieNewImpl:·gc.alloc.rate.norm thrpt 7 0.120 ± 0.001 B/op
DoubleArrayLookupBench.traverseTrieNewImpl:·gc.count thrpt 7 ≈ 0 counts
DoubleArrayLookupBench.traverseTrieOriginalImpl thrpt 7 2114.092 ± 26.789 ops/ms
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.alloc.rate thrpt 7 134.543 ± 1.727 MB/sec
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.alloc.rate.norm thrpt 7 88.816 ± 0.024 B/op
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Eden_Space thrpt 7 130.552 ± 63.111 MB/sec
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Eden_Space.norm thrpt 7 86.238 ± 42.374 B/op
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Survivor_Space thrpt 7 0.304 ± 1.595 MB/sec
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.churn.G1_Survivor_Space.norm thrpt 7 0.200 ± 1.050 B/op
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.count thrpt 7 17.000 counts
DoubleArrayLookupBench.traverseTrieOriginalImpl:·gc.time thrpt 7 67.000 ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment