mqliang edited a comment on issue #6714:
URL: https://github.com/apache/pinot/issues/6714#issuecomment-806403959


   I write a benchmark here: 
https://github.com/mqliang/pinot/commit/7892423579b20dafcb5802a09f20f826377f6c39
   
   The benchmark compares three serialization methods (serialize a typical 
metadata map):
   *  `temporaryOutputStream`: For each KV pair in metadata, first writes to a 
temporary output stream and then converts to byte array which is returned to 
the caller and written to the main stream
   * `preAllocateByteArrayNative`:
       * loop to go over each entry and keep a running sum of size
       * At the end of loop, allocate byte array of that size
       * Start another loop and go over each entry again and fill out the 
pre-allocated byte array.
       * Return the filled byte array
       * key and values are encoded two times during two loop
    * `preAllocateByteArrayWithBytesCache`: same logic as 
`preAllocateByteArrayNative`, just add a cache to cache the encoded K/V so can 
be used in the second loop.
   
   Here is the result:
   ```
   # JMH version: 1.26
   # VM version: JDK 1.8.0_282, OpenJDK 64-Bit Server VM, 25.282-b08
   # VM invoker: 
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/bin/java
   # VM options: -javaagent:/Users/mqliang/Library/Application 
Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7717.56/IntelliJ 
IDEA.app/Contents/lib/idea_rt.jar=65146:/Users/mqliang/Library/Application 
Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7717.56/IntelliJ 
IDEA.app/Contents/bin -Dfile.encoding=UTF-8
   # Warmup: 1 iterations, 10 s each
   # Measurement: 5 iterations, 30 s each
   # Timeout: 10 min per iteration
   # Threads: 1 thread, will synchronize iterations
   # Benchmark mode: Average time, time/op
   # Benchmark: 
org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative
   
   # Run progress: 0.00% complete, ETA 00:08:00
   # Fork: 1 of 1
   # Warmup Iteration   1: 552.178 us/op
   Iteration   1: 519.531 us/op
                    ·gc.alloc.rate:                   3270.480 MB/sec
                    ·gc.alloc.rate.norm:              1811608.009 B/op
                    ·gc.churn.PS_Eden_Space:          3275.114 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1814175.318 B/op
                    ·gc.churn.PS_Survivor_Space:      0.558 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 309.168 B/op
                    ·gc.count:                        525.000 counts
                    ·gc.time:                         261.000 ms
   
   Iteration   2: 524.659 us/op
                    ·gc.alloc.rate:                   3238.871 MB/sec
                    ·gc.alloc.rate.norm:              1811608.011 B/op
                    ·gc.churn.PS_Eden_Space:          3242.901 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1813862.347 B/op
                    ·gc.churn.PS_Survivor_Space:      0.563 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 314.968 B/op
                    ·gc.count:                        516.000 counts
                    ·gc.time:                         263.000 ms
   
   Iteration   3: 526.323 us/op
                    ·gc.alloc.rate:                   3228.230 MB/sec
                    ·gc.alloc.rate.norm:              1811608.008 B/op
                    ·gc.churn.PS_Eden_Space:          3232.024 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1813736.682 B/op
                    ·gc.churn.PS_Survivor_Space:      0.471 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 264.539 B/op
                    ·gc.count:                        470.000 counts
                    ·gc.time:                         254.000 ms
   
   Iteration   4: 521.779 us/op
                    ·gc.alloc.rate:                   3256.320 MB/sec
                    ·gc.alloc.rate.norm:              1811608.008 B/op
                    ·gc.churn.PS_Eden_Space:          3261.433 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1814452.617 B/op
                    ·gc.churn.PS_Survivor_Space:      0.560 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 311.772 B/op
                    ·gc.count:                        534.000 counts
                    ·gc.time:                         270.000 ms
   
   Iteration   5: 524.474 us/op
                    ·gc.alloc.rate:                   3239.855 MB/sec
                    ·gc.alloc.rate.norm:              1811608.008 B/op
                    ·gc.churn.PS_Eden_Space:          3242.045 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1812832.659 B/op
                    ·gc.churn.PS_Survivor_Space:      0.547 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 305.975 B/op
                    ·gc.count:                        483.000 counts
                    ·gc.time:                         255.000 ms
   
   
   
   Result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative":
     523.353 ±(99.9%) 10.345 us/op [Average]
     (min, avg, max) = (519.531, 523.353, 526.323), stdev = 2.687
     CI (99.9%): [513.008, 533.698] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.alloc.rate":
     3246.751 ±(99.9%) 64.066 MB/sec [Average]
     (min, avg, max) = (3228.230, 3246.751, 3270.480), stdev = 16.638
     CI (99.9%): [3182.685, 3310.818] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.alloc.rate.norm":
     1811608.009 ±(99.9%) 0.005 B/op [Average]
     (min, avg, max) = (1811608.008, 1811608.009, 1811608.011), stdev = 0.001
     CI (99.9%): [1811608.003, 1811608.014] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Eden_Space":
     3250.704 ±(99.9%) 66.578 MB/sec [Average]
     (min, avg, max) = (3232.024, 3250.704, 3275.114), stdev = 17.290
     CI (99.9%): [3184.126, 3317.282] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Eden_Space.norm":
     1813811.924 ±(99.9%) 2365.646 B/op [Average]
     (min, avg, max) = (1812832.659, 1813811.924, 1814452.617), stdev = 614.351
     CI (99.9%): [1811446.279, 1816177.570] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Survivor_Space":
     0.540 ±(99.9%) 0.150 MB/sec [Average]
     (min, avg, max) = (0.471, 0.540, 0.563), stdev = 0.039
     CI (99.9%): [0.390, 0.690] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Survivor_Space.norm":
     301.285 ±(99.9%) 80.118 B/op [Average]
     (min, avg, max) = (264.539, 301.285, 314.968), stdev = 20.806
     CI (99.9%): [221.166, 381.403] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.count":
     2528.000 ±(99.9%) 0.001 counts [Sum]
     (min, avg, max) = (470.000, 505.600, 534.000), stdev = 27.700
     CI (99.9%): [2528.000, 2528.000] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.time":
     1303.000 ±(99.9%) 0.001 ms [Sum]
     (min, avg, max) = (254.000, 260.600, 270.000), stdev = 6.504
     CI (99.9%): [1303.000, 1303.000] (assumes normal distribution)
   
   
   # JMH version: 1.26
   # VM version: JDK 1.8.0_282, OpenJDK 64-Bit Server VM, 25.282-b08
   # VM invoker: 
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/bin/java
   # VM options: -javaagent:/Users/mqliang/Library/Application 
Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7717.56/IntelliJ 
IDEA.app/Contents/lib/idea_rt.jar=65146:/Users/mqliang/Library/Application 
Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7717.56/IntelliJ 
IDEA.app/Contents/bin -Dfile.encoding=UTF-8
   # Warmup: 1 iterations, 10 s each
   # Measurement: 5 iterations, 30 s each
   # Timeout: 10 min per iteration
   # Threads: 1 thread, will synchronize iterations
   # Benchmark mode: Average time, time/op
   # Benchmark: 
org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache
   
   # Run progress: 33.33% complete, ETA 00:05:28
   # Fork: 1 of 1
   # Warmup Iteration   1: 390.616 us/op
   Iteration   1: 375.676 us/op
                    ·gc.alloc.rate:                   3524.091 MB/sec
                    ·gc.alloc.rate.norm:              1411608.008 B/op
                    ·gc.churn.PS_Eden_Space:          3532.601 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1415016.587 B/op
                    ·gc.churn.PS_Survivor_Space:      0.538 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 215.400 B/op
                    ·gc.count:                        458.000 counts
                    ·gc.time:                         248.000 ms
   
   Iteration   2: 375.171 us/op
                    ·gc.alloc.rate:                   3528.907 MB/sec
                    ·gc.alloc.rate.norm:              1411608.006 B/op
                    ·gc.churn.PS_Eden_Space:          3534.356 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1413787.624 B/op
                    ·gc.churn.PS_Survivor_Space:      0.494 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 197.609 B/op
                    ·gc.count:                        435.000 counts
                    ·gc.time:                         247.000 ms
   
   Iteration   3: 373.233 us/op
                    ·gc.alloc.rate:                   3547.720 MB/sec
                    ·gc.alloc.rate.norm:              1411608.005 B/op
                    ·gc.churn.PS_Eden_Space:          3559.728 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1416385.929 B/op
                    ·gc.churn.PS_Survivor_Space:      0.539 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 214.343 B/op
                    ·gc.count:                        462.000 counts
                    ·gc.time:                         247.000 ms
   
   Iteration   4: 371.186 us/op
                    ·gc.alloc.rate:                   3567.068 MB/sec
                    ·gc.alloc.rate.norm:              1411608.006 B/op
                    ·gc.churn.PS_Eden_Space:          3566.702 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1411463.405 B/op
                    ·gc.churn.PS_Survivor_Space:      0.597 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 236.411 B/op
                    ·gc.count:                        520.000 counts
                    ·gc.time:                         271.000 ms
   
   Iteration   5: 370.738 us/op
                    ·gc.alloc.rate:                   3571.354 MB/sec
                    ·gc.alloc.rate.norm:              1411608.005 B/op
                    ·gc.churn.PS_Eden_Space:          3582.874 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1416161.234 B/op
                    ·gc.churn.PS_Survivor_Space:      0.588 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 232.322 B/op
                    ·gc.count:                        509.000 counts
                    ·gc.time:                         262.000 ms
   
   
   
   Result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache":
     373.201 ±(99.9%) 8.639 us/op [Average]
     (min, avg, max) = (370.738, 373.201, 375.676), stdev = 2.243
     CI (99.9%): [364.562, 381.840] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.alloc.rate":
     3547.828 ±(99.9%) 82.702 MB/sec [Average]
     (min, avg, max) = (3524.091, 3547.828, 3571.354), stdev = 21.477
     CI (99.9%): [3465.126, 3630.530] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.alloc.rate.norm":
     1411608.006 ±(99.9%) 0.005 B/op [Average]
     (min, avg, max) = (1411608.005, 1411608.006, 1411608.008), stdev = 0.001
     CI (99.9%): [1411608.001, 1411608.011] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Eden_Space":
     3555.252 ±(99.9%) 83.120 MB/sec [Average]
     (min, avg, max) = (3532.601, 3555.252, 3582.874), stdev = 21.586
     CI (99.9%): [3472.132, 3638.373] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Eden_Space.norm":
     1414562.956 ±(99.9%) 7771.212 B/op [Average]
     (min, avg, max) = (1411463.405, 1414562.956, 1416385.929), stdev = 2018.159
     CI (99.9%): [1406791.744, 1422334.168] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Survivor_Space":
     0.551 ±(99.9%) 0.162 MB/sec [Average]
     (min, avg, max) = (0.494, 0.551, 0.597), stdev = 0.042
     CI (99.9%): [0.389, 0.713] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Survivor_Space.norm":
     219.217 ±(99.9%) 60.046 B/op [Average]
     (min, avg, max) = (197.609, 219.217, 236.411), stdev = 15.594
     CI (99.9%): [159.171, 279.263] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.count":
     2384.000 ±(99.9%) 0.001 counts [Sum]
     (min, avg, max) = (435.000, 476.800, 520.000), stdev = 36.134
     CI (99.9%): [2384.000, 2384.000] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.time":
     1275.000 ±(99.9%) 0.001 ms [Sum]
     (min, avg, max) = (247.000, 255.000, 271.000), stdev = 10.977
     CI (99.9%): [1275.000, 1275.000] (assumes normal distribution)
   
   
   # JMH version: 1.26
   # VM version: JDK 1.8.0_282, OpenJDK 64-Bit Server VM, 25.282-b08
   # VM invoker: 
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/bin/java
   # VM options: -javaagent:/Users/mqliang/Library/Application 
Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7717.56/IntelliJ 
IDEA.app/Contents/lib/idea_rt.jar=65146:/Users/mqliang/Library/Application 
Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7717.56/IntelliJ 
IDEA.app/Contents/bin -Dfile.encoding=UTF-8
   # Warmup: 1 iterations, 10 s each
   # Measurement: 5 iterations, 30 s each
   # Timeout: 10 min per iteration
   # Threads: 1 thread, will synchronize iterations
   # Benchmark mode: Average time, time/op
   # Benchmark: 
org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream
   
   # Run progress: 66.67% complete, ETA 00:02:44
   # Fork: 1 of 1
   # Warmup Iteration   1: 483.366 us/op
   Iteration   1: 408.351 us/op
                    ·gc.alloc.rate:                   3580.758 MB/sec
                    ·gc.alloc.rate.norm:              1558808.007 B/op
                    ·gc.churn.PS_Eden_Space:          3586.078 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1561123.846 B/op
                    ·gc.churn.PS_Survivor_Space:      0.511 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 222.603 B/op
                    ·gc.count:                        476.000 counts
                    ·gc.time:                         253.000 ms
   
   Iteration   2: 410.342 us/op
                    ·gc.alloc.rate:                   3563.256 MB/sec
                    ·gc.alloc.rate.norm:              1558808.009 B/op
                    ·gc.churn.PS_Eden_Space:          3569.765 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1561655.686 B/op
                    ·gc.churn.PS_Survivor_Space:      0.451 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 197.394 B/op
                    ·gc.count:                        409.000 counts
                    ·gc.time:                         244.000 ms
   
   Iteration   3: 407.314 us/op
                    ·gc.alloc.rate:                   3589.291 MB/sec
                    ·gc.alloc.rate.norm:              1558808.006 B/op
                    ·gc.churn.PS_Eden_Space:          3592.335 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1560130.076 B/op
                    ·gc.churn.PS_Survivor_Space:      0.557 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 241.833 B/op
                    ·gc.count:                        495.000 counts
                    ·gc.time:                         261.000 ms
   
   Iteration   4: 407.294 us/op
                    ·gc.alloc.rate:                   3590.035 MB/sec
                    ·gc.alloc.rate.norm:              1558808.006 B/op
                    ·gc.churn.PS_Eden_Space:          3595.643 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1561243.143 B/op
                    ·gc.churn.PS_Survivor_Space:      0.439 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 190.513 B/op
                    ·gc.count:                        382.000 counts
                    ·gc.time:                         239.000 ms
   
   Iteration   5: 410.068 us/op
                    ·gc.alloc.rate:                   3565.783 MB/sec
                    ·gc.alloc.rate.norm:              1558808.006 B/op
                    ·gc.churn.PS_Eden_Space:          3576.571 MB/sec
                    ·gc.churn.PS_Eden_Space.norm:     1563524.046 B/op
                    ·gc.churn.PS_Survivor_Space:      0.542 MB/sec
                    ·gc.churn.PS_Survivor_Space.norm: 236.741 B/op
                    ·gc.count:                        460.000 counts
                    ·gc.time:                         252.000 ms
   
   
   
   Result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream":
     408.674 ±(99.9%) 5.641 us/op [Average]
     (min, avg, max) = (407.294, 408.674, 410.342), stdev = 1.465
     CI (99.9%): [403.033, 414.314] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.alloc.rate":
     3577.824 ±(99.9%) 48.952 MB/sec [Average]
     (min, avg, max) = (3563.256, 3577.824, 3590.035), stdev = 12.713
     CI (99.9%): [3528.873, 3626.776] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.alloc.rate.norm":
     1558808.007 ±(99.9%) 0.005 B/op [Average]
     (min, avg, max) = (1558808.006, 1558808.007, 1558808.009), stdev = 0.001
     CI (99.9%): [1558808.002, 1558808.011] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Eden_Space":
     3584.078 ±(99.9%) 41.614 MB/sec [Average]
     (min, avg, max) = (3569.765, 3584.078, 3595.643), stdev = 10.807
     CI (99.9%): [3542.465, 3625.692] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Eden_Space.norm":
     1561535.360 ±(99.9%) 4793.590 B/op [Average]
     (min, avg, max) = (1560130.076, 1561535.360, 1563524.046), stdev = 1244.880
     CI (99.9%): [1556741.769, 1566328.950] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Survivor_Space":
     0.500 ±(99.9%) 0.204 MB/sec [Average]
     (min, avg, max) = (0.439, 0.500, 0.557), stdev = 0.053
     CI (99.9%): [0.296, 0.704] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Survivor_Space.norm":
     217.817 ±(99.9%) 88.656 B/op [Average]
     (min, avg, max) = (190.513, 217.817, 241.833), stdev = 23.024
     CI (99.9%): [129.161, 306.473] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.count":
     2222.000 ±(99.9%) 0.001 counts [Sum]
     (min, avg, max) = (382.000, 444.400, 495.000), stdev = 47.300
     CI (99.9%): [2222.000, 2222.000] (assumes normal distribution)
   
   Secondary result 
"org.apache.pinot.perf.BenchmarkDataTableSerialization.temporaryOutputStream:·gc.time":
     1249.000 ±(99.9%) 0.001 ms [Sum]
     (min, avg, max) = (239.000, 249.800, 261.000), stdev = 8.526
     CI (99.9%): [1249.000, 1249.000] (assumes normal distribution)
   
   
   # Run complete. Total time: 00:08:12
   
   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.
   
   Benchmark                                                                    
                        Mode  Cnt        Score      Error   Units
   BenchmarkDataTableSerialization.preAllocateByteArrayNative                   
                        avgt    5      523.353 ±   10.345   us/op
   BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.alloc.rate    
                        avgt    5     3246.751 ±   64.066  MB/sec
   
BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.alloc.rate.norm  
                     avgt    5  1811608.009 ±    0.005    B/op
   
BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Eden_Space
                   avgt    5     3250.704 ±   66.578  MB/sec
   
BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Eden_Space.norm
              avgt    5  1813811.924 ± 2365.646    B/op
   
BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Survivor_Space
               avgt    5        0.540 ±    0.150  MB/sec
   
BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.churn.PS_Survivor_Space.norm
          avgt    5      301.285 ±   80.118    B/op
   BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.count         
                        avgt    5     2528.000             counts
   BenchmarkDataTableSerialization.preAllocateByteArrayNative:·gc.time          
                        avgt    5     1303.000                 ms
   BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache           
                        avgt    5      373.201 ±    8.639   us/op
   
BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.alloc.rate
                    avgt    5     3547.828 ±   82.702  MB/sec
   
BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.alloc.rate.norm
               avgt    5  1411608.006 ±    0.005    B/op
   
BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Eden_Space
           avgt    5     3555.252 ±   83.120  MB/sec
   
BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Eden_Space.norm
      avgt    5  1414562.956 ± 7771.212    B/op
   
BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Survivor_Space
       avgt    5        0.551 ±    0.162  MB/sec
   
BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.churn.PS_Survivor_Space.norm
  avgt    5      219.217 ±   60.046    B/op
   BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.count 
                        avgt    5     2384.000             counts
   BenchmarkDataTableSerialization.preAllocateByteArrayWithBytesCache:·gc.time  
                        avgt    5     1275.000                 ms
   BenchmarkDataTableSerialization.temporaryOutputStream                        
                        avgt    5      408.674 ±    5.641   us/op
   BenchmarkDataTableSerialization.temporaryOutputStream:·gc.alloc.rate         
                        avgt    5     3577.824 ±   48.952  MB/sec
   BenchmarkDataTableSerialization.temporaryOutputStream:·gc.alloc.rate.norm    
                        avgt    5  1558808.007 ±    0.005    B/op
   
BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Eden_Space   
                     avgt    5     3584.078 ±   41.614  MB/sec
   
BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Eden_Space.norm
                   avgt    5  1561535.360 ± 4793.590    B/op
   
BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Survivor_Space
                    avgt    5        0.500 ±    0.204  MB/sec
   
BenchmarkDataTableSerialization.temporaryOutputStream:·gc.churn.PS_Survivor_Space.norm
               avgt    5      217.817 ±   88.656    B/op
   BenchmarkDataTableSerialization.temporaryOutputStream:·gc.count              
                        avgt    5     2222.000             counts
   BenchmarkDataTableSerialization.temporaryOutputStream:·gc.time               
                        avgt    5     1249.000                 ms
   
   Process finished with exit code 0
   
   ```
   
   If my implementation is correct, benchmark result shows that using 
pre-allocate byte array with cache is slightly better than temporary output 
stream (10% faster --  373.201 us/op VS. 408.674 us/op, use more memory of 
course to cache encoded KV, but GC time does not increased -- 1275ms VS 
1249ms). It's easy to understand why `preAllocateByteArrayNative` is the worst 
one -- it encode K/V twice, whereas other two methods only encode K/V once.
   
   Not sure whether we should do the change just for getting 10% improvement. 
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to