Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Look to consolidate on HdrHistogram's V1 compressed wire form for storage instead of SkinnyHistogram #21

Closed
giltene opened this issue Aug 11, 2015 · 7 comments

Comments

@giltene
Copy link

giltene commented Aug 11, 2015

SkinnyHistogram appears to have been created before HdrHistigram's V1 wire format stabilized. On the assumption that the purpose for SkinnyHistogram was improved compressibility, I believe that the V1 wire format should roughly match it (or beat it) in that sense.

Based on some experiments (playing with adding forms of RLE and non-zero field encodings for sparse matrixes) I had run, the zlib compression used in the compressed HdrHistogram wire form tends to pick up on all the benefits that RLE and/or only-non-zero encoding schemes get, resulting in similar compressed payload sizes regardless of whether or not some form of pre-zlib efficiency is attempted. Furthermore, when Histograms are not extremely sparse (e.g. whenever a latency hiccups occurs that ends up covering a wide spectrum of values), zlib alone seems to slightly beat RLE+zlib in eventual payload size compactness.

The benefit of using the common wire format is that it is currently supported in Java, C, and Python ports, and I expect it to be the one other language variants adopt as well...

@pablosmedina
Copy link
Contributor

Hi @giltene,

You are right, we created the SkinnyHistogram to get better and faster serialization and compression rates and times. It is very promising that V1 wire format can provide us with similar benefits. We will definetely upgrade to the latest versions of HdrHistogram and try the zlib compression. We'll let you know about our results.
Thanks for the suggestion!

Regards,
Pablo

@pablosmedina
Copy link
Contributor

Hi @giltene,

I would like to share with you some results comparing the SkinnyHistogram and the latest HdrHistogram version. Some scenarios are based on latencies of a realword service and others are artificial. It would be great to add more real cases to see how both implementations react to different scenarios but I think this is a good start.
I've created a jmh benchmark to compare throughput between the SkinnyHistogram and HdrHistogram in different stages and scenarios. You may want to take a look at the HistogramBenchmark (histogram-perf branch) to see if there is anything wrong.
In terms of compression, the benchmark starts printing the compressed bytes of each implementation and a reduction percentage of skinny over hdr.
You will need sbt to run the benchmark:

sbt "project khronus-jmh" "run {jmh-params}" 

The following summary output was run with

sbt "project khronus-jmh" "run -f1" 

VM version: JDK 1.8.0_40, VM 25.40-b25
Scala 2.11.2
Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz

Compression

case1:          compressed bytes: skinny=936, hdr=1003. Reduction: 6.6799601196410805%
case2:          compressed bytes: skinny=256, hdr=379.  Reduction: 32.45382585751979%
case3:          compressed bytes: skinny=348, hdr=778.  Reduction: 55.26992287917738%
sparsed1:       compressed bytes: skinny=52, hdr=82.    Reduction: 36.58536585365854%
sparsed2:       compressed bytes: skinny=61, hdr=118.   Reduction: 48.30508474576271%
quadratic:      compressed bytes: skinny=830, hdr=878.  Reduction: 5.466970387243734%
cubic:          compressed bytes: skinny=646, hdr=817.  Reduction: 20.930232558139537%
case1PlusSparsed2:  compressed bytes: skinny=952, hdr=1083. Reduction: 12.096029547553087%

Throughput

[info] Benchmark                                                       (latencies)  (maxValue)  (precision)   Mode  Cnt       Score      Error  Units
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer                 case1  3600000000            3  thrpt    5    1630.003 ±   11.822  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer                 case2  3600000000            3  thrpt    5    3617.163 ±   28.701  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer                 case3  3600000000            3  thrpt    5    1344.669 ±    5.841  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer              sparsed1  3600000000            3  thrpt    5   13815.727 ± 1475.469  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer              sparsed2  3600000000            3  thrpt    5    4013.824 ±  211.598  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer             quadratic  3600000000            3  thrpt    5    1439.745 ±   31.518  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer                 cubic  3600000000            3  thrpt    5    1442.035 ±    3.732  ops/s
[info] HistogramBenchmark.hdr_encodeIntoCompressedByteBuffer     case1PlusSparsed2  3600000000            3  thrpt    5    1325.029 ±    2.485  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                           case1  3600000000            3  thrpt    5    1423.092 ±    6.026  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                           case2  3600000000            3  thrpt    5    2363.195 ±  119.970  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                           case3  3600000000            3  thrpt    5     981.700 ±   98.154  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                        sparsed1  3600000000            3  thrpt    5    7776.708 ±  423.237  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                        sparsed2  3600000000            3  thrpt    5    2434.499 ±  190.029  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                       quadratic  3600000000            3  thrpt    5    1121.018 ±   60.595  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed                           cubic  3600000000            3  thrpt    5    1124.452 ±   18.156  ops/s
[info] HistogramBenchmark.hdr_roundtrip_compressed               case1PlusSparsed2  3600000000            3  thrpt    5    1072.424 ±   23.398  ops/s

[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer              case1  3600000000            3  thrpt    5    4587.067 ±   78.314  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer              case2  3600000000            3  thrpt    5    6628.116 ±   56.607  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer              case3  3600000000            3  thrpt    5    3984.012 ±   55.258  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer           sparsed1  3600000000            3  thrpt    5   68107.455 ± 1075.437  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer           sparsed2  3600000000            3  thrpt    5   23359.406 ±  457.708  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer          quadratic  3600000000            3  thrpt    5    2044.975 ±   19.517  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer              cubic  3600000000            3  thrpt    5    6116.171 ±  110.816  ops/s
[info] HistogramBenchmark.skinny_encodeIntoCompressedByteBuffer  case1PlusSparsed2  3600000000            3  thrpt    5    4139.117 ±   12.298  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                        case1  3600000000            3  thrpt    5    3452.719 ±  142.996  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                        case2  3600000000            3  thrpt    5    4283.284 ±  189.762  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                        case3  3600000000            3  thrpt    5    2606.953 ±   57.754  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                     sparsed1  3600000000            3  thrpt    5   33521.710 ± 3024.292  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                     sparsed2  3600000000            3  thrpt    5   15536.796 ± 1599.334  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                    quadratic  3600000000            3  thrpt    5    1595.997 ±   42.258  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed                        cubic  3600000000            3  thrpt    5    4376.557 ±  549.444  ops/s
[info] HistogramBenchmark.skinny_roundtrip_compressed            case1PlusSparsed2  3600000000            3  thrpt    5    3219.874 ±  218.993  ops/s

jmh full output: https://gist.github.com/pablosmedina/5d4bd1ef727f4ccdc6af

I'm sure we can include more cases. Please let me know your impressions.

Thanks

Pablo

@giltene
Copy link
Author

giltene commented Sep 8, 2015

Ok. Results speak. And these certainly showed benefit.

I now had time to do some more analysis and testing (in between walking the streets of Seattle on the weekend). It appears that your skinny representation wins is terms of space mainly due to two separate factors:

  1. The use of ZigZag-encoded LEB128 for Ints and Longs written to the buffer stream wins in density, since it largely reduces the number of bytes written per value when values don't occupy the entire type's range (used via com.esotericsoftware.kryo.io for writeVarInt and writeVarLong).
  2. The encoding of zero-gaps between non-zero values helps compression (even when zlib does RLE on the stream).

It also tends to win in terms of speed because of the reduced size of the stream that zlib compression has to process (presumably the additional but simpler scan doing delta encoding is much cheaper than the work removed).

So for HdrHistogram, I've decided to adopt the main winning features. To start with, I've moved to using ZigZag LEB128 (see ZigZagEncoding.java: https://github.com/HdrHistogram/HdrHistogram/blob/master/src/main/java/org/HdrHistogram/ZigZagEncoding.java). Next, I played with variants of RLE, "TZLE" (Trailing Zero Length Encoding), and both combined, and it looks like TZLE alone works pretty well (adding RLE on top of that helps a bit in some cases and hurts a bit in others, for an overall loss, probably because it is somewhat redundant with zlib's RLE). The encoding scheme I ended up with is "simpler" than SkinnyHistogram's: Positive counts are directly encoded in the stream as ZigZag longs, and a negative count indicates a trailing-zeros count associated with the following count value. The nice way ZigZag handles small (closer to zero) negative numbers makes this work well). This scheme seems to produce similar or better compression ratios and speed to SkinnyHistogram across various test cases. To establish this comparison, I ported a part of SkinnyHistogram to Java, along with the data sets used in the above tests, to which I added some additional data sets (read in from actual jHiccup log output). see data sets and volume comparisons in https://github.com/HdrHistogram/HdrHistogram/blob/master/HdrHistogram-benchmarks/src/main/java/bench/HistogramData.java , which are all exercised when running the jmh benchmarks in https://github.com/HdrHistogram/HdrHistogram/blob/master/HdrHistogram-benchmarks/src/main/java/bench/HdrHistogramEncodingBench.java

It is exciting to see this new scheme provide significant compression (volume) benefits across the board, and especially on actual jHiccup log lines (the 2 decimal point values there are the more realistic ones, and those show 18%-24% improvements). The fact that the compression speed is also 4-5x father is an obvious nicety as well.

So: Thanks!!

The Java code that uses this new encoding scheme by default is now on github, but not yet released as a version or to maven central. (It still supports decoding the older V0 and V1 formats, but will encode in this new V2 format). I'd appreciate it if you could play with it a bit and see how it looks in comparison to SkinnyHistogram in your environments.

@pablosmedina
Copy link
Contributor

Hi @giltene,

Those are very good news. We are glad to contribute to improve HdrHistogram. I'll take a look at your changes and try the new format. I'll let you know the results in our environments.
We would be glad to use the new HdrHistogram for the next verions of Khronus.

Thanks!

Pablo

@giltene
Copy link
Author

giltene commented Sep 10, 2015

A new HdrHistogram 2.1.7 was just push to both github and maven central. It includes a V2 encoding (will still decode V1 and V0) that uses ZigZag LEB128 and ZLE (Zero Length Encoding, indicated by negative counts in the stream), largely inspired by the discussion above. It also includes benchmarking against a Java-port of the SkinnyHistogram logic. Below are the compression ratio comparisons vs. HdrHistogram 2.1.7 and 2.1.6 for the various cases now covered by the benchmark (using your original data sets and adding some). The results demonstrate both how SkinnyHistogram had better compression ratios than HdrHistogram's V1, and how HdrHistogram's V2 (in 2.1.7) has dramatically improved, now beating SkinnyHistogram across the board (with a single exception where they are 2 bytes off in total size, making HdrHistogram's V2 0.97% larger).

Speed-wise things look pretty good as well, although the fact that my benchmarks of SkinnyHistogram's speed use my own Java port of Skinny and my own ZigZag LEB128 implementation (as opposed to the one from kryo that Khronus uses) ) may have a large effect here (the data size comparisons are much easier to trust that the code speed comparisons given the difference in implementation). HdrHistogram's (new) encodeIntoCompressedByteBuffer() now appears to be 2x+ to 4x+ faster than (my port of) skinnyEncodeIntoCompressedByteBuffer() across the entire set of data samples used. I'm not sure why the speed difference is so high, but the results look good...

HdrHistogram 2.1.7/Skinny/%Reduction [uncompressed] and compressed:

               case1 [2] (Histogram/Skinny/%Reduction): [   724 /  1155 /  37.32%]     397 /  500 /  20.60%
               case1 [3] (Histogram/Skinny/%Reduction): [  1761 /  2322 /  24.16%]     812 /  960 /  15.42%
               case2 [2] (Histogram/Skinny/%Reduction): [  1118 /  1895 /  41.00%]     168 /  181 /   7.18%
               case2 [3] (Histogram/Skinny/%Reduction): [  5398 /  8695 /  37.92%]     220 /  263 /  16.35%
               case3 [2] (Histogram/Skinny/%Reduction): [  1963 /  2743 /  28.44%]     204 /  211 /   3.32%
               case3 [3] (Histogram/Skinny/%Reduction): [  9276 / 15449 /  39.96%]     290 /  355 /  18.31%
            sparsed1 [2] (Histogram/Skinny/%Reduction): [    52 /    56 /   7.14%]      48 /   51 /   5.88%
            sparsed1 [3] (Histogram/Skinny/%Reduction): [    52 /    56 /   7.14%]      49 /   51 /   3.92%
            sparsed2 [2] (Histogram/Skinny/%Reduction): [    61 /    65 /   6.15%]      58 /   62 /   6.45%
            sparsed2 [3] (Histogram/Skinny/%Reduction): [    61 /    65 /   6.15%]      60 /   62 /   3.23%
           quadratic [2] (Histogram/Skinny/%Reduction): [  1873 /  3198 /  41.43%]     400 /  402 /   0.50%
           quadratic [3] (Histogram/Skinny/%Reduction): [  8570 / 12998 /  34.07%]     780 /  869 /  10.24%
               cubic [2] (Histogram/Skinny/%Reduction): [  1446 /  2084 /  30.61%]     352 /  381 /   7.61%
               cubic [3] (Histogram/Skinny/%Reduction): [  2682 /  2688 /   0.22%]     669 /  673 /   0.59%
   case1PlusSparsed2 [2] (Histogram/Skinny/%Reduction): [   739 /  1170 /  36.84%]     409 /  515 /  20.58%
   case1PlusSparsed2 [3] (Histogram/Skinny/%Reduction): [  1777 /  2341 /  24.09%]     823 /  971 /  15.24%
  longestjHiccupLine [2] (Histogram/Skinny/%Reduction): [   838 /  1332 /  37.09%]     185 /  195 /   5.13%
  longestjHiccupLine [3] (Histogram/Skinny/%Reduction): [  1350 /  1377 /   1.96%]     209 /  207 /  -0.97%
 shortestjHiccupLine [2] (Histogram/Skinny/%Reduction): [    98 /   104 /   5.77%]      93 /   96 /   3.13%
 shortestjHiccupLine [3] (Histogram/Skinny/%Reduction): [   112 /   127 /  11.81%]      99 /  101 /   1.98%
   sumOfjHiccupLines [2] (Histogram/Skinny/%Reduction): [  1063 /  1702 /  37.54%]     340 /  375 /   9.33%
   sumOfjHiccupLines [3] (Histogram/Skinny/%Reduction): [  1742 /  1751 /   0.51%]     375 /  391 /   4.09%

HdrHistogram 2.1.6/Skinny/%Reduction [uncompressed] and compressed:

               case1 [2] (Histogram/Skinny/%Reduction): [  2186 /  1155 / -89.26%]     492 /  500 /   1.60%
               case1 [3] (Histogram/Skinny/%Reduction): [ 11058 /  2322 /-376.23%]     997 /  960 /  -3.85%
               case2 [2] (Histogram/Skinny/%Reduction): [  4442 /  1895 /-134.41%]     186 /  181 /  -2.76%
               case2 [3] (Histogram/Skinny/%Reduction): [ 29106 /  8695 /-234.74%]     376 /  263 / -42.97%
               case3 [2] (Histogram/Skinny/%Reduction): [ 10532 /  2743 /-283.96%]     252 /  211 / -19.43%
               case3 [3] (Histogram/Skinny/%Reduction): [ 71680 / 15449 /-363.98%]     775 /  355 /-118.31%
            sparsed1 [2] (Histogram/Skinny/%Reduction): [  1456 /    56 /-2500.00%]      59 /   51 / -15.69%
            sparsed1 [3] (Histogram/Skinny/%Reduction): [  5214 /    56 /-9210.71%]      77 /   51 / -50.98%
            sparsed2 [2] (Histogram/Skinny/%Reduction): [  4650 /    65 /-7053.85%]      86 /   62 / -38.71%
            sparsed2 [3] (Histogram/Skinny/%Reduction): [ 30762 /    65 /-47226.15%]     114 /   62 / -83.87%
           quadratic [2] (Histogram/Skinny/%Reduction): [  5286 /  3198 / -65.29%]     449 /  402 / -11.69%
           quadratic [3] (Histogram/Skinny/%Reduction): [ 35860 / 12998 /-175.89%]     877 /  869 /  -0.92%
               cubic [2] (Histogram/Skinny/%Reduction): [  6440 /  2084 /-209.02%]     374 /  381 /   1.84%
               cubic [3] (Histogram/Skinny/%Reduction): [ 45096 /  2688 /-1577.68%]     811 /  673 / -20.51%
   case1PlusSparsed2 [2] (Histogram/Skinny/%Reduction): [  4650 /  1170 /-297.44%]     524 /  515 /  -1.75%
   case1PlusSparsed2 [3] (Histogram/Skinny/%Reduction): [ 30762 /  2341 /-1214.05%]    1080 /  971 / -11.23%
  longestjHiccupLine [2] (Histogram/Skinny/%Reduction): [  6380 /  1332 /-378.98%]     224 /  195 / -14.87%
  longestjHiccupLine [3] (Histogram/Skinny/%Reduction): [ 44616 /  1377 /-3140.09%]     421 /  207 /-103.38%
 shortestjHiccupLine [2] (Histogram/Skinny/%Reduction): [  3288 /   104 /-3061.54%]     128 /   96 / -33.33%
 shortestjHiccupLine [3] (Histogram/Skinny/%Reduction): [ 19880 /   127 /-15553.54%]     172 /  101 / -70.30%
   sumOfjHiccupLines [2] (Histogram/Skinny/%Reduction): [ 12720 /  1702 /-647.36%]     450 /  375 / -20.00%
   sumOfjHiccupLines [3] (Histogram/Skinny/%Reduction): [ 89164 /  1751 /-4992.18%]     829 /  391 /-112.02%

Summary output from running the following on my laptop (2.3 GHz Intel Core i7 MacBook Pro):
%java -jar target/benchmarks.jar encodeIntoCompressedByteBuffer skinnyEncodeIntoCompressedByteBuffer:

HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      case1                                 2  thrpt   15   45232.549 ±  976.913  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      case1                                 3  thrpt   15    9524.874 ±  301.747  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      case2                                 2  thrpt   15   47067.651 ± 1824.385  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      case2                                 3  thrpt   15   15157.039 ±  578.072  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      case3                                 2  thrpt   15   36594.944 ± 1087.633  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      case3                                 3  thrpt   15    8820.284 ±  321.667  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                   sparsed1                                 2  thrpt   15  145079.712 ± 3854.173  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                   sparsed1                                 3  thrpt   15  132909.700 ± 2675.338  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                   sparsed2                                 2  thrpt   15  126772.744 ± 4548.077  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                   sparsed2                                 3  thrpt   15   82267.067 ± 4733.288  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                  quadratic                                 2  thrpt   15   17658.197 ±  256.311  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                  quadratic                                 3  thrpt   15    3785.096 ±   38.059  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      cubic                                 2  thrpt   15   15335.185 ±  500.722  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer                      cubic                                 3  thrpt   15    9812.269 ±  491.999  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer          case1PlusSparsed2                                 2  thrpt   15   46386.916 ± 2386.025  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer          case1PlusSparsed2                                 3  thrpt   15    9537.887 ±  201.211  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer         longestjHiccupLine                                 2  thrpt   15   56178.642 ± 4664.784  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer         longestjHiccupLine                                 3  thrpt   15   34561.582 ±  737.631  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer        shortestjHiccupLine                                 2  thrpt   15  111736.009 ± 8200.363  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer        shortestjHiccupLine                                 3  thrpt   15   83239.584 ± 7063.702  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer          sumOfjHiccupLines                                 2  thrpt   15   41695.970 ±  547.731  ops/s
HdrHistogramEncodingBench.encodeIntoCompressedByteBuffer          sumOfjHiccupLines                                 3  thrpt   15   21944.411 ± 1143.795  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                case1                                 2  thrpt   15    9636.229 ± 2221.252  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                case1                                 3  thrpt   15    4543.970 ±  426.574  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                case2                                 2  thrpt   15   11276.379 ± 3039.166  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                case2                                 3  thrpt   15    5986.957 ±  245.006  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                case3                                 2  thrpt   15   11450.173 ± 1630.326  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                case3                                 3  thrpt   15    4100.259 ±  258.592  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer             sparsed1                                 2  thrpt   15   17636.286 ± 5486.502  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer             sparsed1                                 3  thrpt   15   21985.059 ± 1870.414  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer             sparsed2                                 2  thrpt   15   23133.551 ± 2025.820  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer             sparsed2                                 3  thrpt   15   10607.844 ±  614.683  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer            quadratic                                 2  thrpt   15    5737.161 ±  627.068  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer            quadratic                                 3  thrpt   15    2259.205 ±  194.300  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                cubic                                 2  thrpt   15    8448.041 ±  759.726  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer                cubic                                 3  thrpt   15    5043.624 ±  172.165  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer    case1PlusSparsed2                                 2  thrpt   15   10378.208 ±  821.324  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer    case1PlusSparsed2                                 3  thrpt   15    4154.102 ±  149.605  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer   longestjHiccupLine                                 2  thrpt   15   15699.267 ±  775.498  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer   longestjHiccupLine                                 3  thrpt   15    7566.716 ±  287.367  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer  shortestjHiccupLine                                 2  thrpt   15   20986.218 ± 3204.748  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer  shortestjHiccupLine                                 3  thrpt   15   13183.283 ±  717.127  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer    sumOfjHiccupLines                                 2  thrpt   15    9517.728 ± 1037.642  ops/s
HdrHistogramEncodingBench.skinnyEncodeIntoCompressedByteBuffer    sumOfjHiccupLines                                 3  thrpt   15    5880.013 ±  317.976  ops/s

@pablosmedina
Copy link
Contributor

Hi @giltene,

Awesome! Looks very good! I'll definitely try the new hdr. I guess that your ZigZag implementation makes the difference in terms of speed. We will test it and upgrade to 2.1.7.

@pablosmedina
Copy link
Contributor

Done. Thanks @giltene !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants