You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by GitBox <gi...@apache.org> on 2019/05/10 11:17:14 UTC
[GitHub] [incubator-zipkin] anuraaga edited a comment on issue #2579:
Benchmark bytes / bytebuffer, protobuf vs zipkin vs wire.
anuraaga edited a comment on issue #2579: Benchmark bytes / bytebuffer, protobuf vs zipkin vs wire.
URL: https://github.com/apache/incubator-zipkin/pull/2579#issuecomment-491252980
Yeah it'd definitely only be for the server. And while `protobuf-java-util` has some dependencies, just `protobuf-java` is dependency free and I believe has never broken backwards compatibility so I wouldn't write it off so fast ;)
I added a wire-based decoder too, with the same code flow as the protobuf-based one, just uses wire for the decoding. Now that it is doing hex decoding, it's a proper comparison. Wire is quite a bit slower, probably since it has to do an array copy before converting to hex since it doesn't expose the ability to read single bytes, and maybe because protobuf uses `Unsafe` though I don't know if that really makes a big impact on modern JVMs (it would have a larger impact with java 8 than java 11 I guess).
Protobuf vs zipkin seems to show protobuf a few percent faster.
Garbage-wise, as expected the lack of an initial array copy does remove a whole buffer's worth of allocation, but due to the lots of allocations to create hex and other strings, it's a very small percentage overall, ~3%, so just a little improvement. This is after applying a change to reuse `char[]`, which had a similar improvement in the base case too.
There do seem to be some differences shown here, though they're not so huge as to make it clear whether any approach is the best.
```
Benchmark (num) Mode Cnt Score Error Units
ProtoCodecBenchmarks.bytes_copy_protobufDecoder 10000 sample 1309 11510.855 ± 138.341 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.00 10000 sample 10010.624 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.50 10000 sample 10977.280 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.90 10000 sample 13156.352 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.95 10000 sample 15319.040 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.99 10000 sample 16967.270 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.999 10000 sample 24244.060 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p0.9999 10000 sample 25493.504 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:bytes_copy_protobufDecoder·p1.00 10000 sample 25493.504 us/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.alloc.rate 10000 sample 15 1212.778 ± 22.951 MB/sec
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.alloc.rate.norm 10000 sample 15 21949689.300 ± 213.505 B/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.churn.G1_Eden_Space 10000 sample 15 1110.207 ± 113.046 MB/sec
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.churn.G1_Eden_Space.norm 10000 sample 15 20094766.898 ± 2030230.821 B/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.churn.G1_Old_Gen 10000 sample 15 112.514 ± 11.349 MB/sec
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.churn.G1_Old_Gen.norm 10000 sample 15 2036516.677 ± 203864.604 B/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.churn.G1_Survivor_Space 10000 sample 15 0.443 ± 0.438 MB/sec
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.churn.G1_Survivor_Space.norm 10000 sample 15 8009.395 ± 7904.907 B/op
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.count 10000 sample 15 82.000 counts
ProtoCodecBenchmarks.bytes_copy_protobufDecoder:·gc.time 10000 sample 15 346.000 ms
ProtoCodecBenchmarks.bytes_copy_wireDecoder 10000 sample 1068 14170.764 ± 135.522 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.00 10000 sample 12648.448 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.50 10000 sample 13713.408 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.90 10000 sample 15810.560 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.95 10000 sample 16846.029 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.99 10000 sample 19930.808 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.999 10000 sample 24186.126 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p0.9999 10000 sample 24281.088 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:bytes_copy_wireDecoder·p1.00 10000 sample 24281.088 us/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.alloc.rate 10000 sample 15 1129.202 ± 28.012 MB/sec
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.alloc.rate.norm 10000 sample 15 25120909.386 ± 202.273 B/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.churn.G1_Eden_Space 10000 sample 15 1040.511 ± 54.956 MB/sec
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.churn.G1_Eden_Space.norm 10000 sample 15 23153464.194 ± 1194946.337 B/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.churn.G1_Old_Gen 10000 sample 15 90.519 ± 4.650 MB/sec
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.churn.G1_Old_Gen.norm 10000 sample 15 2014291.467 ± 102517.266 B/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.churn.G1_Survivor_Space 10000 sample 15 0.838 ± 0.323 MB/sec
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.churn.G1_Survivor_Space.norm 10000 sample 15 18578.527 ± 6846.810 B/op
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.count 10000 sample 15 76.000 counts
ProtoCodecBenchmarks.bytes_copy_wireDecoder:·gc.time 10000 sample 15 173.000 ms
ProtoCodecBenchmarks.bytes_protobufDecoder 10000 sample 1340 11252.910 ± 126.595 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.00 10000 sample 9912.320 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.50 10000 sample 10731.520 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.90 10000 sample 12546.867 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.95 10000 sample 14974.976 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.99 10000 sample 16912.548 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.999 10000 sample 19200.541 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p0.9999 10000 sample 19267.584 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:bytes_protobufDecoder·p1.00 10000 sample 19267.584 us/op
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.alloc.rate 10000 sample 15 1130.991 ± 25.879 MB/sec
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.alloc.rate.norm 10000 sample 15 20009660.550 ± 259.757 B/op
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.churn.G1_Eden_Space 10000 sample 15 1136.615 ± 111.000 MB/sec
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.churn.G1_Eden_Space.norm 10000 sample 15 20105313.287 ± 1867925.592 B/op
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.churn.G1_Old_Gen 10000 sample 15 0.319 ± 0.197 MB/sec
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.churn.G1_Old_Gen.norm 10000 sample 15 5659.194 ± 3507.786 B/op
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.churn.G1_Survivor_Space 10000 sample 15 0.354 ± 0.454 MB/sec
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.churn.G1_Survivor_Space.norm 10000 sample 15 6261.311 ± 8110.558 B/op
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.count 10000 sample 15 84.000 counts
ProtoCodecBenchmarks.bytes_protobufDecoder:·gc.time 10000 sample 15 352.000 ms
ProtoCodecBenchmarks.bytes_wireDecoder 10000 sample 1027 14696.033 ± 274.890 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.00 10000 sample 12697.600 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.50 10000 sample 13991.936 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.90 10000 sample 16420.045 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.95 10000 sample 17812.685 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.99 10000 sample 26746.552 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.999 10000 sample 63427.052 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p0.9999 10000 sample 64225.280 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:bytes_wireDecoder·p1.00 10000 sample 64225.280 us/op
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.alloc.rate 10000 sample 15 1003.950 ± 33.760 MB/sec
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.alloc.rate.norm 10000 sample 15 23180993.238 ± 327.812 B/op
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.churn.G1_Eden_Space 10000 sample 15 1001.456 ± 113.305 MB/sec
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.churn.G1_Eden_Space.norm 10000 sample 15 23105838.211 ± 2265066.780 B/op
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.churn.G1_Old_Gen 10000 sample 15 0.585 ± 0.150 MB/sec
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.churn.G1_Old_Gen.norm 10000 sample 15 13499.422 ± 3403.060 B/op
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.churn.G1_Survivor_Space 10000 sample 15 0.752 ± 0.249 MB/sec
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.churn.G1_Survivor_Space.norm 10000 sample 15 17272.859 ± 5177.973 B/op
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.count 10000 sample 15 73.000 counts
ProtoCodecBenchmarks.bytes_wireDecoder:·gc.time 10000 sample 15 158.000 ms
ProtoCodecBenchmarks.bytes_zipkinDecoder 10000 sample 1220 12361.137 ± 243.588 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.00 10000 sample 9863.168 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.50 10000 sample 11452.416 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.90 10000 sample 15382.938 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.95 10000 sample 18246.861 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.99 10000 sample 22308.127 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.999 10000 sample 26914.292 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p0.9999 10000 sample 27066.368 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:bytes_zipkinDecoder·p1.00 10000 sample 27066.368 us/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.alloc.rate 10000 sample 15 984.706 ± 72.183 MB/sec
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.alloc.rate.norm 10000 sample 15 19129801.132 ± 226.638 B/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.churn.G1_Eden_Space 10000 sample 15 993.104 ± 126.048 MB/sec
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.churn.G1_Eden_Space.norm 10000 sample 15 19270497.313 ± 1683336.845 B/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.churn.G1_Old_Gen 10000 sample 15 0.434 ± 0.268 MB/sec
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.churn.G1_Old_Gen.norm 10000 sample 15 8434.596 ± 5290.023 B/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.churn.G1_Survivor_Space 10000 sample 15 0.753 ± 0.651 MB/sec
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.churn.G1_Survivor_Space.norm 10000 sample 15 14673.383 ± 12535.509 B/op
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.count 10000 sample 15 83.000 counts
ProtoCodecBenchmarks.bytes_zipkinDecoder:·gc.time 10000 sample 15 335.000 ms
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services