Merge "veyron/runtimes/google/ipc: fix handling of proxy address"
diff --git a/lib/testutil/integration/util.go b/lib/testutil/integration/util.go
index 6a6d9b8..fdc0afa 100644
--- a/lib/testutil/integration/util.go
+++ b/lib/testutil/integration/util.go
@@ -358,7 +358,7 @@
if err != nil {
return nil, "", err
}
- s := expect.NewSession(nil, handle.Stdout(), time.Second)
+ s := expect.NewSession(nil, handle.Stdout(), 10*time.Second)
s.ExpectVar("PID")
if err := s.Error(); err != nil {
return nil, "", err
diff --git a/runtimes/google/ipc/benchmarks/RESULTS.txt b/runtimes/google/ipc/benchmarks/RESULTS.txt
index 5079f5b..979b2ac 100644
--- a/runtimes/google/ipc/benchmarks/RESULTS.txt
+++ b/runtimes/google/ipc/benchmarks/RESULTS.txt
@@ -1,108 +1,108 @@
-Date: 12/12/2014
+Date: 12/14/2014
Platform: Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz, 66114888KB Memory
$ veyron go run veyron/runtimes/google/ipc/benchmarks/bm/main.go \
-test.cpu=1,2 -test.benchtime=5s -histogram
-Benchmark____1B 5000 2083384 ns/op 0.00 MB/s
-Benchmark____1B-2 5000 2079227 ns/op 0.00 MB/s
-Benchmark___10B 5000 2393875 ns/op 0.01 MB/s
-Benchmark___10B-2 5000 2130395 ns/op 0.01 MB/s
-Benchmark__100B 5000 2570157 ns/op 0.08 MB/s
-Benchmark__100B-2 5000 2313091 ns/op 0.09 MB/s
-Benchmark___1KB 5000 2441822 ns/op 0.82 MB/s
-Benchmark___1KB-2 5000 2269425 ns/op 0.88 MB/s
-Benchmark__10KB 5000 2777789 ns/op 7.20 MB/s
-Benchmark__10KB-2 5000 2320824 ns/op 8.62 MB/s
-Benchmark_100KB 2000 5462859 ns/op 36.61 MB/s
-Benchmark_100KB-2 2000 4058566 ns/op 49.28 MB/s
+Benchmark____1B 3000 2260153 ns/op 0.00 MB/s
+Benchmark____1B-2 3000 2362339 ns/op 0.00 MB/s
+Benchmark___10B 3000 2595581 ns/op 0.01 MB/s
+Benchmark___10B-2 3000 2372671 ns/op 0.01 MB/s
+Benchmark__100B 3000 2690733 ns/op 0.07 MB/s
+Benchmark__100B-2 3000 2419120 ns/op 0.08 MB/s
+Benchmark___1KB 3000 2498211 ns/op 0.80 MB/s
+Benchmark___1KB-2 3000 2244818 ns/op 0.89 MB/s
+Benchmark__10KB 3000 2740536 ns/op 7.30 MB/s
+Benchmark__10KB-2 3000 2394824 ns/op 8.35 MB/s
+Benchmark_100KB 2000 5581491 ns/op 35.83 MB/s
+Benchmark_100KB-2 2000 4127286 ns/op 48.46 MB/s
-Benchmark____1_chunk_____1B 2000 5280468 ns/op 0.00 MB/s
-Benchmark____1_chunk_____1B-2 2000 4850675 ns/op 0.00 MB/s
-Benchmark____1_chunk____10B 2000 5334596 ns/op 0.00 MB/s
-Benchmark____1_chunk____10B-2 2000 4867046 ns/op 0.00 MB/s
-Benchmark____1_chunk___100B 2000 5429984 ns/op 0.04 MB/s
-Benchmark____1_chunk___100B-2 2000 4913146 ns/op 0.04 MB/s
-Benchmark____1_chunk____1KB 2000 5193539 ns/op 0.39 MB/s
-Benchmark____1_chunk____1KB-2 2000 4864711 ns/op 0.41 MB/s
-Benchmark____1_chunk___10KB 2000 5472549 ns/op 3.65 MB/s
-Benchmark____1_chunk___10KB-2 2000 4950905 ns/op 4.04 MB/s
-Benchmark____1_chunk__100KB 1000 7896673 ns/op 25.33 MB/s
-Benchmark____1_chunk__100KB-2 2000 5976114 ns/op 33.47 MB/s
-Benchmark___10_chunks____1B 2000 6964499 ns/op 0.00 MB/s
-Benchmark___10_chunks____1B-2 2000 5836079 ns/op 0.00 MB/s
-Benchmark___10_chunks___10B 1000 7468897 ns/op 0.03 MB/s
-Benchmark___10_chunks___10B-2 2000 5896988 ns/op 0.03 MB/s
-Benchmark___10_chunks__100B 2000 7511902 ns/op 0.27 MB/s
-Benchmark___10_chunks__100B-2 2000 5975725 ns/op 0.33 MB/s
-Benchmark___10_chunks___1KB 1000 7678796 ns/op 2.60 MB/s
-Benchmark___10_chunks___1KB-2 2000 6047220 ns/op 3.31 MB/s
-Benchmark___10_chunks__10KB 1000 9913510 ns/op 20.17 MB/s
-Benchmark___10_chunks__10KB-2 2000 7066239 ns/op 28.30 MB/s
-Benchmark___10_chunks_100KB 500 32109490 ns/op 62.29 MB/s
-Benchmark___10_chunks_100KB-2 500 18957196 ns/op 105.50 MB/s
-Benchmark__100_chunks____1B 500 23105522 ns/op 0.01 MB/s
-Benchmark__100_chunks____1B-2 1000 14962218 ns/op 0.01 MB/s
-Benchmark__100_chunks___10B 500 24822827 ns/op 0.08 MB/s
-Benchmark__100_chunks___10B-2 500 15143142 ns/op 0.13 MB/s
-Benchmark__100_chunks__100B 500 25825032 ns/op 0.77 MB/s
-Benchmark__100_chunks__100B-2 500 16276252 ns/op 1.23 MB/s
-Benchmark__100_chunks___1KB 500 29567438 ns/op 6.76 MB/s
-Benchmark__100_chunks___1KB-2 500 18167929 ns/op 11.01 MB/s
-Benchmark__100_chunks__10KB 100 52974498 ns/op 37.75 MB/s
-Benchmark__100_chunks__10KB-2 500 30197012 ns/op 66.23 MB/s
-Benchmark__100_chunks_100KB 50 259344427 ns/op 77.12 MB/s
-Benchmark__100_chunks_100KB-2 100 138213866 ns/op 144.70 MB/s
-Benchmark___1K_chunks____1B 100 140929084 ns/op 0.01 MB/s
-Benchmark___1K_chunks____1B-2 100 105473615 ns/op 0.02 MB/s
-Benchmark___1K_chunks___10B 50 200076160 ns/op 0.10 MB/s
-Benchmark___1K_chunks___10B-2 100 112141677 ns/op 0.18 MB/s
-Benchmark___1K_chunks__100B 50 227795062 ns/op 0.88 MB/s
-Benchmark___1K_chunks__100B-2 100 127584568 ns/op 1.57 MB/s
-Benchmark___1K_chunks___1KB 50 260678247 ns/op 7.67 MB/s
-Benchmark___1K_chunks___1KB-2 100 147406551 ns/op 13.57 MB/s
-Benchmark___1K_chunks__10KB 20 484028853 ns/op 41.32 MB/s
-Benchmark___1K_chunks__10KB-2 50 255874182 ns/op 78.16 MB/s
-Benchmark___1K_chunks_100KB 5 2464952174 ns/op 81.14 MB/s
-Benchmark___1K_chunks_100KB-2 5 1336699604 ns/op 149.62 MB/s
+Benchmark____1_chunk_____1B 3000 2744128 ns/op 0.00 MB/s
+Benchmark____1_chunk_____1B-2 3000 2347418 ns/op 0.00 MB/s
+Benchmark____1_chunk____10B 3000 2857309 ns/op 0.01 MB/s
+Benchmark____1_chunk____10B-2 3000 2363346 ns/op 0.01 MB/s
+Benchmark____1_chunk___100B 3000 2922993 ns/op 0.07 MB/s
+Benchmark____1_chunk___100B-2 3000 2558699 ns/op 0.08 MB/s
+Benchmark____1_chunk____1KB 3000 2646432 ns/op 0.76 MB/s
+Benchmark____1_chunk____1KB-2 3000 2400649 ns/op 0.83 MB/s
+Benchmark____1_chunk___10KB 3000 2954627 ns/op 6.77 MB/s
+Benchmark____1_chunk___10KB-2 3000 2546084 ns/op 7.86 MB/s
+Benchmark____1_chunk__100KB 2000 5517042 ns/op 36.25 MB/s
+Benchmark____1_chunk__100KB-2 2000 4157872 ns/op 48.10 MB/s
+Benchmark___10_chunks____1B 2000 4177247 ns/op 0.00 MB/s
+Benchmark___10_chunks____1B-2 2000 3432532 ns/op 0.01 MB/s
+Benchmark___10_chunks___10B 2000 4664935 ns/op 0.04 MB/s
+Benchmark___10_chunks___10B-2 2000 3548029 ns/op 0.06 MB/s
+Benchmark___10_chunks__100B 2000 4845710 ns/op 0.41 MB/s
+Benchmark___10_chunks__100B-2 2000 3658666 ns/op 0.55 MB/s
+Benchmark___10_chunks___1KB 2000 4971196 ns/op 4.02 MB/s
+Benchmark___10_chunks___1KB-2 2000 3662827 ns/op 5.46 MB/s
+Benchmark___10_chunks__10KB 1000 7533684 ns/op 26.55 MB/s
+Benchmark___10_chunks__10KB-2 2000 4922363 ns/op 40.63 MB/s
+Benchmark___10_chunks_100KB 200 31539312 ns/op 63.41 MB/s
+Benchmark___10_chunks_100KB-2 500 18574440 ns/op 107.67 MB/s
+Benchmark__100_chunks____1B 500 18036549 ns/op 0.01 MB/s
+Benchmark__100_chunks____1B-2 1000 12395699 ns/op 0.02 MB/s
+Benchmark__100_chunks___10B 300 20669375 ns/op 0.10 MB/s
+Benchmark__100_chunks___10B-2 500 12634978 ns/op 0.16 MB/s
+Benchmark__100_chunks__100B 300 23164692 ns/op 0.86 MB/s
+Benchmark__100_chunks__100B-2 500 13821225 ns/op 1.45 MB/s
+Benchmark__100_chunks___1KB 300 26071439 ns/op 7.67 MB/s
+Benchmark__100_chunks___1KB-2 500 15738134 ns/op 12.71 MB/s
+Benchmark__100_chunks__10KB 100 50248311 ns/op 39.80 MB/s
+Benchmark__100_chunks__10KB-2 300 28614761 ns/op 69.89 MB/s
+Benchmark__100_chunks_100KB 30 272889576 ns/op 73.29 MB/s
+Benchmark__100_chunks_100KB-2 50 149680912 ns/op 133.62 MB/s
+Benchmark___1K_chunks____1B 100 111621410 ns/op 0.02 MB/s
+Benchmark___1K_chunks____1B-2 100 103311101 ns/op 0.02 MB/s
+Benchmark___1K_chunks___10B 50 189580683 ns/op 0.11 MB/s
+Benchmark___1K_chunks___10B-2 100 107068429 ns/op 0.19 MB/s
+Benchmark___1K_chunks__100B 30 223128293 ns/op 0.90 MB/s
+Benchmark___1K_chunks__100B-2 50 125690815 ns/op 1.59 MB/s
+Benchmark___1K_chunks___1KB 30 251956982 ns/op 7.94 MB/s
+Benchmark___1K_chunks___1KB-2 50 144214400 ns/op 13.87 MB/s
+Benchmark___1K_chunks__10KB 20 474946063 ns/op 42.11 MB/s
+Benchmark___1K_chunks__10KB-2 30 267531367 ns/op 74.76 MB/s
+Benchmark___1K_chunks_100KB 2 2675372295 ns/op 74.76 MB/s
+Benchmark___1K_chunks_100KB-2 5 1421481350 ns/op 140.70 MB/s
-Benchmark__per_chunk____1B 50000 233075 ns/op 0.01 MB/s
-Benchmark__per_chunk____1B-2 50000 177314 ns/op 0.01 MB/s
-Benchmark__per_chunk___10B 20000 519996 ns/op 0.04 MB/s
-Benchmark__per_chunk___10B-2 50000 338254 ns/op 0.06 MB/s
-Benchmark__per_chunk__100B 10000 573593 ns/op 0.35 MB/s
-Benchmark__per_chunk__100B-2 50000 267646 ns/op 0.75 MB/s
-Benchmark__per_chunk___1KB 20000 514359 ns/op 3.89 MB/s
-Benchmark__per_chunk___1KB-2 50000 275305 ns/op 7.26 MB/s
-Benchmark__per_chunk__10KB 10000 703176 ns/op 28.44 MB/s
-Benchmark__per_chunk__10KB-2 20000 395105 ns/op 50.62 MB/s
-Benchmark__per_chunk_100KB 5000 2834149 ns/op 70.57 MB/s
-Benchmark__per_chunk_100KB-2 10000 1461822 ns/op 136.82 MB/s
+Benchmark__per_chunk____1B 50000 163939 ns/op 0.01 MB/s
+Benchmark__per_chunk____1B-2 50000 118409 ns/op 0.02 MB/s
+Benchmark__per_chunk___10B 20000 321908 ns/op 0.06 MB/s
+Benchmark__per_chunk___10B-2 50000 176818 ns/op 0.11 MB/s
+Benchmark__per_chunk__100B 20000 411514 ns/op 0.49 MB/s
+Benchmark__per_chunk__100B-2 30000 231565 ns/op 0.86 MB/s
+Benchmark__per_chunk___1KB 20000 423999 ns/op 4.72 MB/s
+Benchmark__per_chunk___1KB-2 30000 248721 ns/op 8.04 MB/s
+Benchmark__per_chunk__10KB 10000 631536 ns/op 31.67 MB/s
+Benchmark__per_chunk__10KB-2 20000 346868 ns/op 57.66 MB/s
+Benchmark__per_chunk_100KB 3000 2613430 ns/op 76.53 MB/s
+Benchmark__per_chunk_100KB-2 5000 1369809 ns/op 146.01 MB/s
-Benchmark___10B_mux__100_chunks___10B 500 22049071 ns/op 0.00 MB/s
-Benchmark___10B_mux__100_chunks___10B-2 2000 4734244 ns/op 0.00 MB/s
-Benchmark___10B_mux__100_chunks__100B 500 23746639 ns/op 0.00 MB/s
-Benchmark___10B_mux__100_chunks__100B-2 2000 5501514 ns/op 0.00 MB/s
-Benchmark___10B_mux__100_chunks___1KB 500 25033793 ns/op 0.00 MB/s
-Benchmark___10B_mux__100_chunks___1KB-2 2000 5598670 ns/op 0.00 MB/s
-Benchmark___10B_mux___1K_chunks___10B 100 121659148 ns/op 0.00 MB/s
-Benchmark___10B_mux___1K_chunks___10B-2 1000 7827224 ns/op 0.00 MB/s
-Benchmark___10B_mux___1K_chunks__100B 100 141824661 ns/op 0.00 MB/s
-Benchmark___10B_mux___1K_chunks__100B-2 1000 11127970 ns/op 0.00 MB/s
-Benchmark___10B_mux___1K_chunks___1KB 100 148589902 ns/op 0.00 MB/s
-Benchmark___10B_mux___1K_chunks___1KB-2 1000 12616916 ns/op 0.00 MB/s
-Benchmark__100B_mux__100_chunks___10B 500 23895451 ns/op 0.01 MB/s
-Benchmark__100B_mux__100_chunks___10B-2 2000 5134742 ns/op 0.04 MB/s
-Benchmark__100B_mux__100_chunks__100B 500 25336809 ns/op 0.01 MB/s
-Benchmark__100B_mux__100_chunks__100B-2 2000 6012040 ns/op 0.03 MB/s
-Benchmark__100B_mux__100_chunks___1KB 500 27144821 ns/op 0.01 MB/s
-Benchmark__100B_mux__100_chunks___1KB-2 2000 6117827 ns/op 0.03 MB/s
-Benchmark__100B_mux___1K_chunks___10B 100 132175574 ns/op 0.00 MB/s
-Benchmark__100B_mux___1K_chunks___10B-2 1000 8590497 ns/op 0.02 MB/s
-Benchmark__100B_mux___1K_chunks__100B 100 145204032 ns/op 0.00 MB/s
-Benchmark__100B_mux___1K_chunks__100B-2 1000 12104363 ns/op 0.02 MB/s
-Benchmark__100B_mux___1K_chunks___1KB 100 150385852 ns/op 0.00 MB/s
-Benchmark__100B_mux___1K_chunks___1KB-2 1000 13867566 ns/op 0.01 MB/s
+Benchmark___10B_mux__100_chunks___10B 500 18817141 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___10B-2 1000 7104449 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks__100B 300 21167617 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks__100B-2 1000 8372251 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___1KB 300 22817830 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___1KB-2 1000 8831943 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___10B 100 123136622 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___10B-2 300 22274569 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks__100B 100 143814971 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks__100B-2 200 34125016 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___1KB 100 136987808 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___1KB-2 200 35831221 ns/op 0.00 MB/s
+Benchmark__100B_mux__100_chunks___10B 500 20748811 ns/op 0.01 MB/s
+Benchmark__100B_mux__100_chunks___10B-2 1000 7604070 ns/op 0.03 MB/s
+Benchmark__100B_mux__100_chunks__100B 300 21922577 ns/op 0.01 MB/s
+Benchmark__100B_mux__100_chunks__100B-2 1000 9164254 ns/op 0.02 MB/s
+Benchmark__100B_mux__100_chunks___1KB 300 23892634 ns/op 0.01 MB/s
+Benchmark__100B_mux__100_chunks___1KB-2 1000 9288578 ns/op 0.02 MB/s
+Benchmark__100B_mux___1K_chunks___10B 100 120357166 ns/op 0.00 MB/s
+Benchmark__100B_mux___1K_chunks___10B-2 300 23110788 ns/op 0.01 MB/s
+Benchmark__100B_mux___1K_chunks__100B 100 146211502 ns/op 0.00 MB/s
+Benchmark__100B_mux___1K_chunks__100B-2 200 36485527 ns/op 0.01 MB/s
+Benchmark__100B_mux___1K_chunks___1KB 100 145242261 ns/op 0.00 MB/s
+Benchmark__100B_mux___1K_chunks___1KB-2 200 37420006 ns/op 0.01 MB/s
% The followings are the full output with histograms.
@@ -110,13 +110,13 @@
================================================================================
Echo RPC
================================================================================
-Benchmark____1B 5000 2083384 ns/op 0.00 MB/s
+Benchmark____1B 3000 2260153 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 3 Avg: 1.40
+Count: 3000 Min: 1 Max: 3 Avg: 1.54
------------------------------------------------------------
-[ 1, 2) 3397 67.9% 67.9% #######
-[ 2, 3) 1201 24.0% 92.0% ##
-[ 3, 4) 402 8.0% 100.0% #
+[ 1, 2) 1754 58.5% 58.5% ######
+[ 2, 3) 864 28.8% 87.3% ###
+[ 3, 4) 382 12.7% 100.0% #
[ 4, 5) 0 0.0% 100.0%
[ 5, 6) 0 0.0% 100.0%
[ 6, 7) 0 0.0% 100.0%
@@ -131,37 +131,100 @@
[ 15, 16) 0 0.0% 100.0%
[ 16, 17) 0 0.0% 100.0%
[ 17, inf) 0 0.0% 100.0%
-Benchmark____1B-2 5000 2079227 ns/op 0.00 MB/s
+Benchmark____1B-2 3000 2362339 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 3 Avg: 1.31
+Count: 3000 Min: 1 Max: 4 Avg: 1.98
------------------------------------------------------------
-[ 1, 2) 4002 80.0% 80.0% ########
-[ 2, 3) 450 9.0% 89.0% #
-[ 3, 4) 548 11.0% 100.0% #
-[ 4, 5) 0 0.0% 100.0%
+[ 1, 2) 608 20.3% 20.3% ##
+[ 2, 3) 1864 62.1% 82.4% ######
+[ 3, 4) 520 17.3% 99.7% ##
+[ 4, 5) 8 0.3% 100.0%
[ 5, 6) 0 0.0% 100.0%
[ 6, 7) 0 0.0% 100.0%
[ 7, 8) 0 0.0% 100.0%
[ 8, 9) 0 0.0% 100.0%
[ 9, 10) 0 0.0% 100.0%
[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 15) 0 0.0% 100.0%
-[ 15, 16) 0 0.0% 100.0%
-[ 16, 17) 0 0.0% 100.0%
-[ 17, inf) 0 0.0% 100.0%
-Benchmark___10B 5000 2393875 ns/op 0.01 MB/s
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 15) 0 0.0% 100.0%
+[ 15, 17) 0 0.0% 100.0%
+[ 17, 19) 0 0.0% 100.0%
+[ 19, 21) 0 0.0% 100.0%
+[ 21, 23) 0 0.0% 100.0%
+[ 23, inf) 0 0.0% 100.0%
+Benchmark___10B 3000 2595581 ns/op 0.01 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 6 Avg: 1.77
+Count: 3000 Min: 2 Max: 5 Avg: 2.37
------------------------------------------------------------
-[ 1, 2) 2689 53.8% 53.8% #####
-[ 2, 3) 1646 32.9% 86.7% ###
-[ 3, 4) 39 0.8% 87.5%
-[ 4, 5) 360 7.2% 94.7% #
-[ 5, 6) 265 5.3% 100.0% #
-[ 6, 7) 1 0.0% 100.0%
+[ 2, 3) 2459 82.0% 82.0% ########
+[ 3, 4) 45 1.5% 83.5%
+[ 4, 5) 437 14.6% 98.0% #
+[ 5, 6) 59 2.0% 100.0%
+[ 6, 7) 0 0.0% 100.0%
+[ 7, 8) 0 0.0% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 10) 0 0.0% 100.0%
+[ 10, 11) 0 0.0% 100.0%
+[ 11, 12) 0 0.0% 100.0%
+[ 12, 14) 0 0.0% 100.0%
+[ 14, 16) 0 0.0% 100.0%
+[ 16, 18) 0 0.0% 100.0%
+[ 18, 20) 0 0.0% 100.0%
+[ 20, 22) 0 0.0% 100.0%
+[ 22, 24) 0 0.0% 100.0%
+[ 24, inf) 0 0.0% 100.0%
+Benchmark___10B-2 3000 2372671 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 5 Avg: 1.93
+------------------------------------------------------------
+[ 1, 2) 866 28.9% 28.9% ###
+[ 2, 3) 1691 56.4% 85.2% ######
+[ 3, 4) 233 7.8% 93.0% #
+[ 4, 5) 201 6.7% 99.7% #
+[ 5, 6) 9 0.3% 100.0%
+[ 6, 7) 0 0.0% 100.0%
+[ 7, 8) 0 0.0% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 15) 0 0.0% 100.0%
+[ 15, 17) 0 0.0% 100.0%
+[ 17, 20) 0 0.0% 100.0%
+[ 20, 23) 0 0.0% 100.0%
+[ 23, 26) 0 0.0% 100.0%
+[ 26, 29) 0 0.0% 100.0%
+[ 29, inf) 0 0.0% 100.0%
+Benchmark__100B 3000 2690733 ns/op 0.07 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 2 Max: 7 Avg: 2.48
+------------------------------------------------------------
+[ 2, 3) 2544 84.8% 84.8% ########
+[ 3, 4) 82 2.7% 87.5%
+[ 4, 5) 0 0.0% 87.5%
+[ 5, 6) 146 4.9% 92.4%
+[ 6, 7) 226 7.5% 99.9% #
+[ 7, 8) 2 0.1% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 15) 0 0.0% 100.0%
+[ 15, 17) 0 0.0% 100.0%
+[ 17, 20) 0 0.0% 100.0%
+[ 20, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 31) 0 0.0% 100.0%
+[ 31, 35) 0 0.0% 100.0%
+[ 35, inf) 0 0.0% 100.0%
+Benchmark__100B-2 3000 2419120 ns/op 0.08 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 6 Avg: 2.05
+------------------------------------------------------------
+[ 1, 2) 647 21.6% 21.6% ##
+[ 2, 3) 2027 67.6% 89.1% #######
+[ 3, 4) 1 0.0% 89.2%
+[ 4, 5) 184 6.1% 95.3% #
+[ 5, 6) 128 4.3% 99.6%
+[ 6, 7) 13 0.4% 100.0%
[ 7, 8) 0 0.0% 100.0%
[ 8, 10) 0 0.0% 100.0%
[ 10, 12) 0 0.0% 100.0%
@@ -173,14 +236,207 @@
[ 26, 30) 0 0.0% 100.0%
[ 30, 34) 0 0.0% 100.0%
[ 34, inf) 0 0.0% 100.0%
-Benchmark___10B-2 5000 2130395 ns/op 0.01 MB/s
+Benchmark___1KB 3000 2498211 ns/op 0.80 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 5 Avg: 1.34
+Count: 3000 Min: 1 Max: 10 Avg: 1.76
------------------------------------------------------------
-[ 1, 2) 4228 84.6% 84.6% ########
-[ 2, 3) 249 5.0% 89.5%
-[ 3, 4) 110 2.2% 91.7%
-[ 4, 5) 412 8.2% 100.0% #
+[ 1, 2) 2191 73.0% 73.0% #######
+[ 2, 3) 449 15.0% 88.0% #
+[ 3, 4) 75 2.5% 90.5%
+[ 4, 5) 3 0.1% 90.6%
+[ 5, 6) 6 0.2% 90.8%
+[ 6, 8) 240 8.0% 98.8% #
+[ 8, 10) 35 1.2% 100.0%
+[ 10, 12) 1 0.0% 100.0%
+[ 12, 15) 0 0.0% 100.0%
+[ 15, 18) 0 0.0% 100.0%
+[ 18, 22) 0 0.0% 100.0%
+[ 22, 27) 0 0.0% 100.0%
+[ 27, 32) 0 0.0% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 45) 0 0.0% 100.0%
+[ 45, 54) 0 0.0% 100.0%
+[ 54, inf) 0 0.0% 100.0%
+Benchmark___1KB-2 3000 2244818 ns/op 0.89 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 7 Avg: 1.62
+------------------------------------------------------------
+[ 1, 2) 1949 65.0% 65.0% ######
+[ 2, 3) 795 26.5% 91.5% ###
+[ 3, 4) 0 0.0% 91.5%
+[ 4, 5) 63 2.1% 93.6%
+[ 5, 6) 112 3.7% 97.3%
+[ 6, 7) 72 2.4% 99.7%
+[ 7, 9) 9 0.3% 100.0%
+[ 9, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 15) 0 0.0% 100.0%
+[ 15, 18) 0 0.0% 100.0%
+[ 18, 21) 0 0.0% 100.0%
+[ 21, 25) 0 0.0% 100.0%
+[ 25, 29) 0 0.0% 100.0%
+[ 29, 34) 0 0.0% 100.0%
+[ 34, 40) 0 0.0% 100.0%
+[ 40, inf) 0 0.0% 100.0%
+Benchmark__10KB 3000 2740536 ns/op 7.30 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 2 Max: 10 Avg: 2.62
+------------------------------------------------------------
+[ 2, 3) 2652 88.4% 88.4% #########
+[ 3, 4) 72 2.4% 90.8%
+[ 4, 5) 0 0.0% 90.8%
+[ 5, 6) 0 0.0% 90.8%
+[ 6, 7) 0 0.0% 90.8%
+[ 7, 9) 93 3.1% 93.9%
+[ 9, 11) 183 6.1% 100.0% #
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 32) 0 0.0% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 44) 0 0.0% 100.0%
+[ 44, 52) 0 0.0% 100.0%
+[ 52, inf) 0 0.0% 100.0%
+Benchmark__10KB-2 3000 2394824 ns/op 8.35 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 8 Avg: 1.84
+------------------------------------------------------------
+[ 1, 2) 1531 51.0% 51.0% #####
+[ 2, 3) 1214 40.5% 91.5% ####
+[ 3, 4) 0 0.0% 91.5%
+[ 4, 5) 0 0.0% 91.5%
+[ 5, 6) 83 2.8% 94.3%
+[ 6, 7) 69 2.3% 96.6%
+[ 7, 9) 103 3.4% 100.0%
+[ 9, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 32) 0 0.0% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 44) 0 0.0% 100.0%
+[ 44, inf) 0 0.0% 100.0%
+Benchmark_100KB 2000 5581491 ns/op 35.83 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 15 Avg: 4.93
+------------------------------------------------------------
+[ 3, 4) 1253 62.7% 62.7% ######
+[ 4, 5) 259 13.0% 75.6% #
+[ 5, 6) 124 6.2% 81.8% #
+[ 6, 7) 1 0.1% 81.9%
+[ 7, 8) 0 0.0% 81.9%
+[ 8, 10) 0 0.0% 81.9%
+[ 10, 12) 84 4.2% 86.1%
+[ 12, 15) 274 13.7% 99.8% #
+[ 15, 18) 5 0.2% 100.0%
+[ 18, 22) 0 0.0% 100.0%
+[ 22, 27) 0 0.0% 100.0%
+[ 27, 33) 0 0.0% 100.0%
+[ 33, 40) 0 0.0% 100.0%
+[ 40, 48) 0 0.0% 100.0%
+[ 48, 58) 0 0.0% 100.0%
+[ 58, 69) 0 0.0% 100.0%
+[ 69, inf) 0 0.0% 100.0%
+Benchmark_100KB-2 2000 4127286 ns/op 48.46 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 10 Avg: 3.78
+------------------------------------------------------------
+[ 2, 3) 373 18.7% 18.7% ##
+[ 3, 4) 1286 64.3% 83.0% ######
+[ 4, 5) 0 0.0% 83.0%
+[ 5, 6) 0 0.0% 83.0%
+[ 6, 7) 0 0.0% 83.0%
+[ 7, 9) 116 5.8% 88.8% #
+[ 9, 11) 225 11.2% 100.0% #
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 32) 0 0.0% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 44) 0 0.0% 100.0%
+[ 44, 52) 0 0.0% 100.0%
+[ 52, inf) 0 0.0% 100.0%
+
+================================================================================
+Echo streaming RPC
+================================================================================
+Benchmark____1_chunk_____1B 3000 2744128 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 2 Max: 4 Avg: 2.31
+------------------------------------------------------------
+[ 2, 3) 2072 69.1% 69.1% #######
+[ 3, 4) 921 30.7% 99.8% ###
+[ 4, 5) 7 0.2% 100.0%
+[ 5, 6) 0 0.0% 100.0%
+[ 6, 7) 0 0.0% 100.0%
+[ 7, 8) 0 0.0% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 10) 0 0.0% 100.0%
+[ 10, 11) 0 0.0% 100.0%
+[ 11, 12) 0 0.0% 100.0%
+[ 12, 13) 0 0.0% 100.0%
+[ 13, 14) 0 0.0% 100.0%
+[ 14, 15) 0 0.0% 100.0%
+[ 15, 16) 0 0.0% 100.0%
+[ 16, 17) 0 0.0% 100.0%
+[ 17, 18) 0 0.0% 100.0%
+[ 18, inf) 0 0.0% 100.0%
+Benchmark____1_chunk_____1B-2 3000 2347418 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 4 Avg: 2.18
+------------------------------------------------------------
+[ 1, 2) 46 1.5% 1.5%
+[ 2, 3) 2381 79.4% 80.9% ########
+[ 3, 4) 567 18.9% 99.8% ##
+[ 4, 5) 6 0.2% 100.0%
+[ 5, 6) 0 0.0% 100.0%
+[ 6, 7) 0 0.0% 100.0%
+[ 7, 8) 0 0.0% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 10) 0 0.0% 100.0%
+[ 10, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 15) 0 0.0% 100.0%
+[ 15, 17) 0 0.0% 100.0%
+[ 17, 19) 0 0.0% 100.0%
+[ 19, 21) 0 0.0% 100.0%
+[ 21, 23) 0 0.0% 100.0%
+[ 23, inf) 0 0.0% 100.0%
+Benchmark____1_chunk____10B 3000 2857309 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 2 Max: 5 Avg: 2.45
+------------------------------------------------------------
+[ 2, 3) 2387 79.6% 79.6% ########
+[ 3, 4) 88 2.9% 82.5%
+[ 4, 5) 303 10.1% 92.6% #
+[ 5, 6) 222 7.4% 100.0% #
+[ 6, 7) 0 0.0% 100.0%
+[ 7, 8) 0 0.0% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 10) 0 0.0% 100.0%
+[ 10, 11) 0 0.0% 100.0%
+[ 11, 12) 0 0.0% 100.0%
+[ 12, 14) 0 0.0% 100.0%
+[ 14, 16) 0 0.0% 100.0%
+[ 16, 18) 0 0.0% 100.0%
+[ 18, 20) 0 0.0% 100.0%
+[ 20, 22) 0 0.0% 100.0%
+[ 22, 24) 0 0.0% 100.0%
+[ 24, inf) 0 0.0% 100.0%
+Benchmark____1_chunk____10B-2 3000 2363346 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 5 Avg: 2.18
+------------------------------------------------------------
+[ 1, 2) 32 1.1% 1.1%
+[ 2, 3) 2535 84.5% 85.6% ########
+[ 3, 4) 293 9.8% 95.3% #
+[ 4, 5) 139 4.6% 100.0%
[ 5, 6) 1 0.0% 100.0%
[ 6, 7) 0 0.0% 100.0%
[ 7, 8) 0 0.0% 100.0%
@@ -194,38 +450,80 @@
[ 23, 26) 0 0.0% 100.0%
[ 26, 29) 0 0.0% 100.0%
[ 29, inf) 0 0.0% 100.0%
-Benchmark__100B 5000 2570157 ns/op 0.08 MB/s
+Benchmark____1_chunk___100B 3000 2922993 ns/op 0.07 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 10 Avg: 2.35
+Count: 3000 Min: 2 Max: 7 Avg: 2.50
------------------------------------------------------------
-[ 1, 2) 627 12.5% 12.5% #
-[ 2, 3) 3834 76.7% 89.2% ########
-[ 3, 4) 95 1.9% 91.1%
-[ 4, 5) 6 0.1% 91.2%
-[ 5, 6) 22 0.4% 91.7%
-[ 6, 8) 254 5.1% 96.8% #
-[ 8, 10) 160 3.2% 100.0%
-[ 10, 12) 2 0.0% 100.0%
-[ 12, 15) 0 0.0% 100.0%
-[ 15, 18) 0 0.0% 100.0%
-[ 18, 22) 0 0.0% 100.0%
-[ 22, 27) 0 0.0% 100.0%
+[ 2, 3) 2527 84.2% 84.2% ########
+[ 3, 4) 106 3.5% 87.8%
+[ 4, 5) 0 0.0% 87.8%
+[ 5, 6) 99 3.3% 91.1%
+[ 6, 7) 255 8.5% 99.6% #
+[ 7, 8) 13 0.4% 100.0%
+[ 8, 9) 0 0.0% 100.0%
+[ 9, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 15) 0 0.0% 100.0%
+[ 15, 17) 0 0.0% 100.0%
+[ 17, 20) 0 0.0% 100.0%
+[ 20, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 31) 0 0.0% 100.0%
+[ 31, 35) 0 0.0% 100.0%
+[ 35, inf) 0 0.0% 100.0%
+Benchmark____1_chunk___100B-2 3000 2558699 ns/op 0.08 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 1 Max: 6 Avg: 2.28
+------------------------------------------------------------
+[ 1, 2) 5 0.2% 0.2%
+[ 2, 3) 2673 89.1% 89.3% #########
+[ 3, 4) 2 0.1% 89.3%
+[ 4, 5) 177 5.9% 95.2% #
+[ 5, 6) 96 3.2% 98.4%
+[ 6, 7) 47 1.6% 100.0%
+[ 7, 8) 0 0.0% 100.0%
+[ 8, 10) 0 0.0% 100.0%
+[ 10, 12) 0 0.0% 100.0%
+[ 12, 14) 0 0.0% 100.0%
+[ 14, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 22) 0 0.0% 100.0%
+[ 22, 26) 0 0.0% 100.0%
+[ 26, 30) 0 0.0% 100.0%
+[ 30, 34) 0 0.0% 100.0%
+[ 34, inf) 0 0.0% 100.0%
+Benchmark____1_chunk____1KB 3000 2646432 ns/op 0.76 MB/s
+Histogram (unit: ms)
+Count: 3000 Min: 2 Max: 10 Avg: 2.49
+------------------------------------------------------------
+[ 2, 3) 2647 88.2% 88.2% #########
+[ 3, 4) 71 2.4% 90.6%
+[ 4, 5) 4 0.1% 90.7%
+[ 5, 6) 0 0.0% 90.7%
+[ 6, 7) 67 2.2% 93.0%
+[ 7, 9) 209 7.0% 99.9% #
+[ 9, 11) 2 0.1% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
[ 27, 32) 0 0.0% 100.0%
[ 32, 38) 0 0.0% 100.0%
-[ 38, 45) 0 0.0% 100.0%
-[ 45, 54) 0 0.0% 100.0%
-[ 54, inf) 0 0.0% 100.0%
-Benchmark__100B-2 5000 2313091 ns/op 0.09 MB/s
+[ 38, 44) 0 0.0% 100.0%
+[ 44, 52) 0 0.0% 100.0%
+[ 52, inf) 0 0.0% 100.0%
+Benchmark____1_chunk____1KB-2 3000 2400649 ns/op 0.83 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 7 Avg: 1.78
+Count: 3000 Min: 1 Max: 7 Avg: 2.01
------------------------------------------------------------
-[ 1, 2) 2417 48.3% 48.3% #####
-[ 2, 3) 2204 44.1% 92.4% ####
-[ 3, 4) 0 0.0% 92.4%
-[ 4, 5) 0 0.0% 92.4%
-[ 5, 6) 229 4.6% 97.0%
-[ 6, 7) 123 2.5% 99.5%
-[ 7, 9) 27 0.5% 100.0%
+[ 1, 2) 864 28.8% 28.8% ###
+[ 2, 3) 1881 62.7% 91.5% ######
+[ 3, 4) 2 0.1% 91.6%
+[ 4, 5) 10 0.3% 91.9%
+[ 5, 6) 127 4.2% 96.1%
+[ 6, 7) 94 3.1% 99.3%
+[ 7, 9) 22 0.7% 100.0%
[ 9, 11) 0 0.0% 100.0%
[ 11, 13) 0 0.0% 100.0%
[ 13, 15) 0 0.0% 100.0%
@@ -236,103 +534,145 @@
[ 29, 34) 0 0.0% 100.0%
[ 34, 40) 0 0.0% 100.0%
[ 40, inf) 0 0.0% 100.0%
-Benchmark___1KB 5000 2441822 ns/op 0.82 MB/s
+Benchmark____1_chunk___10KB 3000 2954627 ns/op 6.77 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 12 Avg: 1.65
+Count: 3000 Min: 2 Max: 10 Avg: 2.65
------------------------------------------------------------
-[ 1, 2) 4546 90.9% 90.9% #########
-[ 2, 3) 52 1.0% 92.0%
-[ 3, 4) 4 0.1% 92.0%
-[ 4, 5) 69 1.4% 93.4%
-[ 5, 6) 0 0.0% 93.4%
-[ 6, 8) 8 0.2% 93.6%
-[ 8, 10) 66 1.3% 94.9%
-[ 10, 13) 255 5.1% 100.0% #
+[ 2, 3) 2621 87.4% 87.4% #########
+[ 3, 4) 93 3.1% 90.5%
+[ 4, 5) 13 0.4% 90.9%
+[ 5, 6) 0 0.0% 90.9%
+[ 6, 7) 0 0.0% 90.9%
+[ 7, 9) 99 3.3% 94.2%
+[ 9, 11) 174 5.8% 100.0% #
+[ 11, 13) 0 0.0% 100.0%
[ 13, 16) 0 0.0% 100.0%
-[ 16, 20) 0 0.0% 100.0%
-[ 20, 24) 0 0.0% 100.0%
-[ 24, 29) 0 0.0% 100.0%
-[ 29, 35) 0 0.0% 100.0%
-[ 35, 42) 0 0.0% 100.0%
-[ 42, 51) 0 0.0% 100.0%
-[ 51, 62) 0 0.0% 100.0%
-[ 62, inf) 0 0.0% 100.0%
-Benchmark___1KB-2 5000 2269425 ns/op 0.88 MB/s
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 32) 0 0.0% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 44) 0 0.0% 100.0%
+[ 44, 52) 0 0.0% 100.0%
+[ 52, inf) 0 0.0% 100.0%
+Benchmark____1_chunk___10KB-2 3000 2546084 ns/op 7.86 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 9 Avg: 1.61
+Count: 3000 Min: 1 Max: 8 Avg: 2.25
------------------------------------------------------------
-[ 1, 2) 3458 69.2% 69.2% #######
-[ 2, 3) 1248 25.0% 94.1% ##
-[ 3, 4) 1 0.0% 94.1%
-[ 4, 5) 0 0.0% 94.1%
-[ 5, 6) 0 0.0% 94.1%
-[ 6, 8) 183 3.7% 97.8%
-[ 8, 10) 110 2.2% 100.0%
-[ 10, 12) 0 0.0% 100.0%
-[ 12, 15) 0 0.0% 100.0%
-[ 15, 18) 0 0.0% 100.0%
-[ 18, 22) 0 0.0% 100.0%
-[ 22, 26) 0 0.0% 100.0%
-[ 26, 31) 0 0.0% 100.0%
-[ 31, 37) 0 0.0% 100.0%
-[ 37, 43) 0 0.0% 100.0%
-[ 43, 51) 0 0.0% 100.0%
-[ 51, inf) 0 0.0% 100.0%
-Benchmark__10KB 5000 2777789 ns/op 7.20 MB/s
+[ 1, 2) 414 13.8% 13.8% #
+[ 2, 3) 2335 77.8% 91.6% ########
+[ 3, 4) 0 0.0% 91.6%
+[ 4, 5) 0 0.0% 91.6%
+[ 5, 6) 37 1.2% 92.9%
+[ 6, 7) 88 2.9% 95.8%
+[ 7, 9) 126 4.2% 100.0%
+[ 9, 11) 0 0.0% 100.0%
+[ 11, 13) 0 0.0% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 27) 0 0.0% 100.0%
+[ 27, 32) 0 0.0% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 44) 0 0.0% 100.0%
+[ 44, inf) 0 0.0% 100.0%
+Benchmark____1_chunk__100KB 2000 5517042 ns/op 36.25 MB/s
Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 16 Avg: 2.15
+Count: 2000 Min: 3 Max: 15 Avg: 4.82
------------------------------------------------------------
-[ 1, 2) 2964 59.3% 59.3% ######
-[ 2, 3) 1640 32.8% 92.1% ###
-[ 3, 4) 3 0.1% 92.1%
-[ 4, 5) 47 0.9% 93.1%
-[ 5, 7) 30 0.6% 93.7%
-[ 7, 9) 0 0.0% 93.7%
-[ 9, 11) 17 0.3% 94.0%
-[ 11, 14) 134 2.7% 96.7%
-[ 14, 18) 165 3.3% 100.0%
-[ 18, 23) 0 0.0% 100.0%
-[ 23, 29) 0 0.0% 100.0%
-[ 29, 36) 0 0.0% 100.0%
-[ 36, 44) 0 0.0% 100.0%
-[ 44, 54) 0 0.0% 100.0%
-[ 54, 66) 0 0.0% 100.0%
-[ 66, 80) 0 0.0% 100.0%
-[ 80, inf) 0 0.0% 100.0%
-Benchmark__10KB-2 5000 2320824 ns/op 8.62 MB/s
-Histogram (unit: ms)
-Count: 5000 Min: 1 Max: 11 Avg: 1.58
-------------------------------------------------------------
-[ 1, 2) 4005 80.1% 80.1% ########
-[ 2, 3) 703 14.1% 94.2% #
-[ 3, 4) 0 0.0% 94.2%
-[ 4, 5) 0 0.0% 94.2%
-[ 5, 6) 0 0.0% 94.2%
-[ 6, 8) 3 0.1% 94.2%
-[ 8, 10) 273 5.5% 99.7% #
-[ 10, 12) 16 0.3% 100.0%
-[ 12, 15) 0 0.0% 100.0%
-[ 15, 18) 0 0.0% 100.0%
+[ 3, 4) 1247 62.4% 62.4% ######
+[ 4, 5) 256 12.8% 75.2% #
+[ 5, 6) 146 7.3% 82.5% #
+[ 6, 7) 0 0.0% 82.5%
+[ 7, 8) 0 0.0% 82.5%
+[ 8, 10) 0 0.0% 82.5%
+[ 10, 12) 132 6.6% 89.1% #
+[ 12, 15) 217 10.9% 99.9% #
+[ 15, 18) 2 0.1% 100.0%
[ 18, 22) 0 0.0% 100.0%
[ 22, 27) 0 0.0% 100.0%
[ 27, 33) 0 0.0% 100.0%
[ 33, 40) 0 0.0% 100.0%
[ 40, 48) 0 0.0% 100.0%
-[ 48, 57) 0 0.0% 100.0%
-[ 57, inf) 0 0.0% 100.0%
-Benchmark_100KB 2000 5462859 ns/op 36.61 MB/s
+[ 48, 58) 0 0.0% 100.0%
+[ 58, 69) 0 0.0% 100.0%
+[ 69, inf) 0 0.0% 100.0%
+Benchmark____1_chunk__100KB-2 2000 4157872 ns/op 48.10 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 3 Max: 19 Avg: 4.80
+Count: 2000 Min: 2 Max: 11 Avg: 3.83
------------------------------------------------------------
-[ 3, 4) 1609 80.5% 80.5% ########
-[ 4, 5) 8 0.4% 80.9%
-[ 5, 6) 51 2.6% 83.4%
-[ 6, 7) 84 4.2% 87.6%
-[ 7, 9) 0 0.0% 87.6%
-[ 9, 11) 0 0.0% 87.6%
-[ 11, 14) 0 0.0% 87.6%
-[ 14, 17) 135 6.8% 94.4% #
-[ 17, 21) 113 5.7% 100.0% #
+[ 2, 3) 159 8.0% 8.0% #
+[ 3, 4) 1495 74.8% 82.7% #######
+[ 4, 5) 11 0.6% 83.2%
+[ 5, 6) 0 0.0% 83.2%
+[ 6, 7) 0 0.0% 83.2%
+[ 7, 9) 167 8.3% 91.6% #
+[ 9, 11) 166 8.3% 99.9% #
+[ 11, 13) 2 0.1% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 28) 0 0.0% 100.0%
+[ 28, 33) 0 0.0% 100.0%
+[ 33, 39) 0 0.0% 100.0%
+[ 39, 46) 0 0.0% 100.0%
+[ 46, 55) 0 0.0% 100.0%
+[ 55, inf) 0 0.0% 100.0%
+Benchmark___10_chunks____1B 2000 4177247 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 17 Avg: 3.75
+------------------------------------------------------------
+[ 2, 3) 49 2.5% 2.5%
+[ 3, 4) 1771 88.6% 91.0% #########
+[ 4, 5) 0 0.0% 91.0%
+[ 5, 6) 2 0.1% 91.1%
+[ 6, 8) 42 2.1% 93.2%
+[ 8, 10) 0 0.0% 93.2%
+[ 10, 12) 33 1.7% 94.9%
+[ 12, 15) 73 3.7% 98.5%
+[ 15, 19) 30 1.5% 100.0%
+[ 19, 24) 0 0.0% 100.0%
+[ 24, 30) 0 0.0% 100.0%
+[ 30, 37) 0 0.0% 100.0%
+[ 37, 45) 0 0.0% 100.0%
+[ 45, 55) 0 0.0% 100.0%
+[ 55, 67) 0 0.0% 100.0%
+[ 67, 81) 0 0.0% 100.0%
+[ 81, inf) 0 0.0% 100.0%
+Benchmark___10_chunks____1B-2 2000 3432532 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 12 Avg: 2.82
+------------------------------------------------------------
+[ 2, 3) 1276 63.8% 63.8% ######
+[ 3, 4) 541 27.1% 90.9% ###
+[ 4, 5) 45 2.2% 93.1%
+[ 5, 6) 0 0.0% 93.1%
+[ 6, 7) 0 0.0% 93.1%
+[ 7, 9) 41 2.1% 95.2%
+[ 9, 11) 68 3.4% 98.6%
+[ 11, 13) 29 1.5% 100.0%
+[ 13, 16) 0 0.0% 100.0%
+[ 16, 19) 0 0.0% 100.0%
+[ 19, 23) 0 0.0% 100.0%
+[ 23, 28) 0 0.0% 100.0%
+[ 28, 34) 0 0.0% 100.0%
+[ 34, 41) 0 0.0% 100.0%
+[ 41, 49) 0 0.0% 100.0%
+[ 49, 58) 0 0.0% 100.0%
+[ 58, inf) 0 0.0% 100.0%
+Benchmark___10_chunks___10B 2000 4664935 ns/op 0.04 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 19 Avg: 3.94
+------------------------------------------------------------
+[ 3, 4) 1739 87.0% 87.0% #########
+[ 4, 5) 94 4.7% 91.7%
+[ 5, 6) 0 0.0% 91.7%
+[ 6, 7) 9 0.5% 92.1%
+[ 7, 9) 26 1.3% 93.4%
+[ 9, 11) 0 0.0% 93.4%
+[ 11, 14) 33 1.7% 95.1%
+[ 14, 17) 63 3.2% 98.2%
+[ 17, 21) 36 1.8% 100.0%
[ 21, 26) 0 0.0% 100.0%
[ 26, 32) 0 0.0% 100.0%
[ 32, 39) 0 0.0% 100.0%
@@ -341,1002 +681,662 @@
[ 59, 72) 0 0.0% 100.0%
[ 72, 88) 0 0.0% 100.0%
[ 88, inf) 0 0.0% 100.0%
-Benchmark_100KB-2 2000 4058566 ns/op 49.28 MB/s
+Benchmark___10_chunks___10B-2 2000 3548029 ns/op 0.06 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 2 Max: 15 Avg: 3.57
+Count: 2000 Min: 2 Max: 14 Avg: 3.02
------------------------------------------------------------
-[ 2, 3) 770 38.5% 38.5% ####
-[ 3, 4) 991 49.6% 88.1% #####
-[ 4, 5) 2 0.1% 88.2%
-[ 5, 6) 0 0.0% 88.2%
-[ 6, 7) 0 0.0% 88.2%
-[ 7, 9) 0 0.0% 88.2%
-[ 9, 11) 89 4.5% 92.6%
-[ 11, 14) 147 7.4% 100.0% #
+[ 2, 3) 971 48.6% 48.6% #####
+[ 3, 4) 835 41.8% 90.3% ####
+[ 4, 5) 67 3.4% 93.7%
+[ 5, 6) 0 0.0% 93.7%
+[ 6, 7) 0 0.0% 93.7%
+[ 7, 9) 16 0.8% 94.5%
+[ 9, 11) 40 2.0% 96.5%
+[ 11, 14) 70 3.5% 100.0%
[ 14, 17) 1 0.1% 100.0%
[ 17, 21) 0 0.0% 100.0%
[ 21, 26) 0 0.0% 100.0%
[ 26, 32) 0 0.0% 100.0%
[ 32, 39) 0 0.0% 100.0%
+[ 39, 47) 0 0.0% 100.0%
+[ 47, 57) 0 0.0% 100.0%
+[ 57, 68) 0 0.0% 100.0%
+[ 68, inf) 0 0.0% 100.0%
+Benchmark___10_chunks__100B 2000 4845710 ns/op 0.41 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 20 Avg: 4.09
+------------------------------------------------------------
+[ 3, 4) 1559 78.0% 78.0% ########
+[ 4, 5) 272 13.6% 91.6% #
+[ 5, 6) 1 0.1% 91.6%
+[ 6, 7) 0 0.0% 91.6%
+[ 7, 9) 43 2.1% 93.8%
+[ 9, 11) 1 0.1% 93.8%
+[ 11, 14) 0 0.0% 93.8%
+[ 14, 17) 44 2.2% 96.0%
+[ 17, 21) 80 4.0% 100.0%
+[ 21, 26) 0 0.0% 100.0%
+[ 26, 32) 0 0.0% 100.0%
+[ 32, 39) 0 0.0% 100.0%
+[ 39, 48) 0 0.0% 100.0%
+[ 48, 59) 0 0.0% 100.0%
+[ 59, 73) 0 0.0% 100.0%
+[ 73, 90) 0 0.0% 100.0%
+[ 90, inf) 0 0.0% 100.0%
+Benchmark___10_chunks__100B-2 2000 3658666 ns/op 0.55 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 14 Avg: 3.26
+------------------------------------------------------------
+[ 2, 3) 567 28.4% 28.4% ###
+[ 3, 4) 1240 62.0% 90.4% ######
+[ 4, 5) 68 3.4% 93.8%
+[ 5, 6) 5 0.2% 94.0%
+[ 6, 7) 0 0.0% 94.0%
+[ 7, 9) 0 0.0% 94.0%
+[ 9, 11) 50 2.5% 96.5%
+[ 11, 14) 62 3.1% 99.6%
+[ 14, 17) 8 0.4% 100.0%
+[ 17, 21) 0 0.0% 100.0%
+[ 21, 26) 0 0.0% 100.0%
+[ 26, 32) 0 0.0% 100.0%
+[ 32, 39) 0 0.0% 100.0%
+[ 39, 47) 0 0.0% 100.0%
+[ 47, 57) 0 0.0% 100.0%
+[ 57, 68) 0 0.0% 100.0%
+[ 68, inf) 0 0.0% 100.0%
+Benchmark___10_chunks___1KB 2000 4971196 ns/op 4.02 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 23 Avg: 4.37
+------------------------------------------------------------
+[ 3, 4) 1222 61.1% 61.1% ######
+[ 4, 5) 620 31.0% 92.1% ###
+[ 5, 6) 0 0.0% 92.1%
+[ 6, 7) 0 0.0% 92.1%
+[ 7, 9) 31 1.6% 93.7%
+[ 9, 11) 1 0.1% 93.7%
+[ 11, 14) 0 0.0% 93.7%
+[ 14, 18) 32 1.6% 95.3%
+[ 18, 22) 90 4.5% 99.8%
+[ 22, 28) 4 0.2% 100.0%
+[ 28, 35) 0 0.0% 100.0%
+[ 35, 43) 0 0.0% 100.0%
+[ 43, 53) 0 0.0% 100.0%
+[ 53, 66) 0 0.0% 100.0%
+[ 66, 82) 0 0.0% 100.0%
+[ 82, 101) 0 0.0% 100.0%
+[101, inf) 0 0.0% 100.0%
+Benchmark___10_chunks___1KB-2 2000 3662827 ns/op 5.46 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 15 Avg: 3.11
+------------------------------------------------------------
+[ 2, 3) 1012 50.6% 50.6% #####
+[ 3, 4) 794 39.7% 90.3% ####
+[ 4, 5) 67 3.4% 93.7%
+[ 5, 6) 4 0.2% 93.9%
+[ 6, 7) 0 0.0% 93.9%
+[ 7, 9) 0 0.0% 93.9%
+[ 9, 11) 25 1.2% 95.1%
+[ 11, 14) 53 2.7% 97.8%
+[ 14, 17) 45 2.2% 100.0%
+[ 17, 21) 0 0.0% 100.0%
+[ 21, 26) 0 0.0% 100.0%
+[ 26, 32) 0 0.0% 100.0%
+[ 32, 39) 0 0.0% 100.0%
[ 39, 48) 0 0.0% 100.0%
[ 48, 58) 0 0.0% 100.0%
[ 58, 70) 0 0.0% 100.0%
[ 70, inf) 0 0.0% 100.0%
-
-================================================================================
-Echo streaming RPC
-================================================================================
-Benchmark____1_chunk_____1B 2000 5280468 ns/op 0.00 MB/s
+Benchmark___10_chunks__10KB 1000 7533684 ns/op 26.55 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 6 Avg: 4.61
+Count: 1000 Min: 5 Max: 26 Avg: 7.03
------------------------------------------------------------
-[ 4, 5) 912 45.6% 45.6% #####
-[ 5, 6) 953 47.7% 93.2% #####
-[ 6, 7) 135 6.8% 100.0% #
-[ 7, 8) 0 0.0% 100.0%
-[ 8, 9) 0 0.0% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 15) 0 0.0% 100.0%
-[ 15, 16) 0 0.0% 100.0%
-[ 16, 17) 0 0.0% 100.0%
-[ 17, 18) 0 0.0% 100.0%
-[ 18, 19) 0 0.0% 100.0%
-[ 19, 20) 0 0.0% 100.0%
-[ 20, inf) 0 0.0% 100.0%
-Benchmark____1_chunk_____1B-2 2000 4850675 ns/op 0.00 MB/s
+[ 5, 6) 831 83.1% 83.1% ########
+[ 6, 7) 4 0.4% 83.5%
+[ 7, 8) 0 0.0% 83.5%
+[ 8, 9) 29 2.9% 86.4%
+[ 9, 11) 18 1.8% 88.2%
+[ 11, 13) 0 0.0% 88.2%
+[ 13, 16) 0 0.0% 88.2%
+[ 16, 20) 39 3.9% 92.1%
+[ 20, 25) 78 7.8% 99.9% #
+[ 25, 31) 1 0.1% 100.0%
+[ 31, 38) 0 0.0% 100.0%
+[ 38, 47) 0 0.0% 100.0%
+[ 47, 58) 0 0.0% 100.0%
+[ 58, 71) 0 0.0% 100.0%
+[ 71, 88) 0 0.0% 100.0%
+[ 88, 108) 0 0.0% 100.0%
+[108, inf) 0 0.0% 100.0%
+Benchmark___10_chunks__10KB-2 2000 4922363 ns/op 40.63 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 6 Avg: 4.26
+Count: 2000 Min: 3 Max: 18 Avg: 4.32
------------------------------------------------------------
-[ 4, 5) 1489 74.5% 74.5% #######
-[ 5, 6) 506 25.3% 99.8% ###
-[ 6, 7) 5 0.2% 100.0%
-[ 7, 8) 0 0.0% 100.0%
-[ 8, 9) 0 0.0% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 15) 0 0.0% 100.0%
-[ 15, 16) 0 0.0% 100.0%
-[ 16, 17) 0 0.0% 100.0%
-[ 17, 18) 0 0.0% 100.0%
-[ 18, 19) 0 0.0% 100.0%
-[ 19, 20) 0 0.0% 100.0%
-[ 20, inf) 0 0.0% 100.0%
-Benchmark____1_chunk____10B 2000 5334596 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 7 Avg: 4.69
-------------------------------------------------------------
-[ 4, 5) 1035 51.8% 51.8% #####
-[ 5, 6) 565 28.2% 80.0% ###
-[ 6, 7) 389 19.5% 99.5% ##
-[ 7, 8) 11 0.6% 100.0%
-[ 8, 9) 0 0.0% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 20) 0 0.0% 100.0%
-[ 20, 22) 0 0.0% 100.0%
-[ 22, 24) 0 0.0% 100.0%
-[ 24, 26) 0 0.0% 100.0%
-[ 26, inf) 0 0.0% 100.0%
-Benchmark____1_chunk____10B-2 2000 4867046 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 6 Avg: 4.21
-------------------------------------------------------------
-[ 4, 5) 1631 81.6% 81.6% ########
-[ 5, 6) 316 15.8% 97.4% ##
-[ 6, 7) 53 2.7% 100.0%
-[ 7, 8) 0 0.0% 100.0%
-[ 8, 9) 0 0.0% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 15) 0 0.0% 100.0%
-[ 15, 16) 0 0.0% 100.0%
-[ 16, 17) 0 0.0% 100.0%
-[ 17, 18) 0 0.0% 100.0%
-[ 18, 19) 0 0.0% 100.0%
-[ 19, 20) 0 0.0% 100.0%
-[ 20, inf) 0 0.0% 100.0%
-Benchmark____1_chunk___100B 2000 5429984 ns/op 0.04 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 9 Avg: 5.03
-------------------------------------------------------------
-[ 4, 5) 512 25.6% 25.6% ###
-[ 5, 6) 1166 58.3% 83.9% ######
-[ 6, 7) 79 4.0% 87.9%
-[ 7, 8) 237 11.9% 99.7% #
-[ 8, 9) 5 0.2% 100.0%
-[ 9, 10) 1 0.1% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 13) 0 0.0% 100.0%
-[ 13, 15) 0 0.0% 100.0%
-[ 15, 17) 0 0.0% 100.0%
-[ 17, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 25) 0 0.0% 100.0%
-[ 25, 29) 0 0.0% 100.0%
-[ 29, 33) 0 0.0% 100.0%
-[ 33, 37) 0 0.0% 100.0%
-[ 37, inf) 0 0.0% 100.0%
-Benchmark____1_chunk___100B-2 2000 4913146 ns/op 0.04 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 7 Avg: 4.28
-------------------------------------------------------------
-[ 4, 5) 1694 84.7% 84.7% ########
-[ 5, 6) 54 2.7% 87.4%
-[ 6, 7) 245 12.2% 99.7% #
-[ 7, 8) 7 0.4% 100.0%
-[ 8, 9) 0 0.0% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 20) 0 0.0% 100.0%
-[ 20, 22) 0 0.0% 100.0%
-[ 22, 24) 0 0.0% 100.0%
-[ 24, 26) 0 0.0% 100.0%
-[ 26, inf) 0 0.0% 100.0%
-Benchmark____1_chunk____1KB 2000 5193539 ns/op 0.39 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 8 Avg: 4.48
-------------------------------------------------------------
-[ 4, 5) 1624 81.2% 81.2% ########
-[ 5, 6) 121 6.1% 87.2% #
-[ 6, 7) 19 1.0% 88.2%
-[ 7, 8) 138 6.9% 95.1% #
-[ 8, 9) 98 4.9% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 20) 0 0.0% 100.0%
-[ 20, 23) 0 0.0% 100.0%
-[ 23, 26) 0 0.0% 100.0%
-[ 26, 29) 0 0.0% 100.0%
-[ 29, 32) 0 0.0% 100.0%
-[ 32, inf) 0 0.0% 100.0%
-Benchmark____1_chunk____1KB-2 2000 4864711 ns/op 0.41 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 7 Avg: 4.24
-------------------------------------------------------------
-[ 4, 5) 1762 88.1% 88.1% #########
-[ 5, 6) 4 0.2% 88.3%
-[ 6, 7) 227 11.4% 99.7% #
-[ 7, 8) 7 0.4% 100.0%
-[ 8, 9) 0 0.0% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 13) 0 0.0% 100.0%
-[ 13, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 20) 0 0.0% 100.0%
-[ 20, 22) 0 0.0% 100.0%
-[ 22, 24) 0 0.0% 100.0%
-[ 24, 26) 0 0.0% 100.0%
-[ 26, inf) 0 0.0% 100.0%
-Benchmark____1_chunk___10KB 2000 5472549 ns/op 3.65 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 10 Avg: 4.73
-------------------------------------------------------------
-[ 4, 5) 1418 70.9% 70.9% #######
-[ 5, 6) 298 14.9% 85.8% #
-[ 6, 7) 37 1.9% 87.7%
-[ 7, 8) 28 1.4% 89.1%
-[ 8, 9) 101 5.1% 94.1% #
-[ 9, 10) 116 5.8% 99.9% #
-[ 10, 12) 2 0.1% 100.0%
-[ 12, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 21) 0 0.0% 100.0%
-[ 21, 24) 0 0.0% 100.0%
-[ 24, 28) 0 0.0% 100.0%
-[ 28, 32) 0 0.0% 100.0%
-[ 32, 37) 0 0.0% 100.0%
-[ 37, 43) 0 0.0% 100.0%
-[ 43, inf) 0 0.0% 100.0%
-Benchmark____1_chunk___10KB-2 2000 4950905 ns/op 4.04 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 8 Avg: 4.34
-------------------------------------------------------------
-[ 4, 5) 1760 88.0% 88.0% #########
-[ 5, 6) 7 0.4% 88.4%
-[ 6, 7) 25 1.2% 89.6%
-[ 7, 8) 206 10.3% 99.9% #
-[ 8, 9) 2 0.1% 100.0%
-[ 9, 10) 0 0.0% 100.0%
-[ 10, 11) 0 0.0% 100.0%
-[ 11, 12) 0 0.0% 100.0%
-[ 12, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 20) 0 0.0% 100.0%
-[ 20, 23) 0 0.0% 100.0%
-[ 23, 26) 0 0.0% 100.0%
-[ 26, 29) 0 0.0% 100.0%
-[ 29, 32) 0 0.0% 100.0%
-[ 32, inf) 0 0.0% 100.0%
-Benchmark____1_chunk__100KB 1000 7896673 ns/op 25.33 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 6 Max: 12 Avg: 7.24
-------------------------------------------------------------
-[ 6, 7) 660 66.0% 66.0% #######
-[ 7, 8) 113 11.3% 77.3% #
-[ 8, 9) 6 0.6% 77.9%
-[ 9, 10) 0 0.0% 77.9%
-[ 10, 11) 43 4.3% 82.2%
-[ 11, 12) 128 12.8% 95.0% #
-[ 12, 14) 50 5.0% 100.0% #
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 20) 0 0.0% 100.0%
-[ 20, 23) 0 0.0% 100.0%
-[ 23, 26) 0 0.0% 100.0%
-[ 26, 30) 0 0.0% 100.0%
-[ 30, 34) 0 0.0% 100.0%
-[ 34, 39) 0 0.0% 100.0%
-[ 39, 45) 0 0.0% 100.0%
-[ 45, inf) 0 0.0% 100.0%
-Benchmark____1_chunk__100KB-2 2000 5976114 ns/op 33.47 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 4 Max: 10 Avg: 5.67
-------------------------------------------------------------
-[ 4, 5) 3 0.2% 0.2%
-[ 5, 6) 1574 78.7% 78.9% ########
-[ 6, 7) 2 0.1% 79.0%
-[ 7, 8) 25 1.2% 80.2%
-[ 8, 9) 296 14.8% 95.0% #
-[ 9, 10) 98 4.9% 99.9%
-[ 10, 12) 2 0.1% 100.0%
-[ 12, 14) 0 0.0% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 18) 0 0.0% 100.0%
-[ 18, 21) 0 0.0% 100.0%
-[ 21, 24) 0 0.0% 100.0%
-[ 24, 28) 0 0.0% 100.0%
-[ 28, 32) 0 0.0% 100.0%
-[ 32, 37) 0 0.0% 100.0%
-[ 37, 43) 0 0.0% 100.0%
-[ 43, inf) 0 0.0% 100.0%
-Benchmark___10_chunks____1B 2000 6964499 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 5 Max: 15 Avg: 6.65
-------------------------------------------------------------
-[ 5, 6) 1 0.1% 0.1%
-[ 6, 7) 1743 87.2% 87.2% #########
-[ 7, 8) 20 1.0% 88.2%
-[ 8, 9) 48 2.4% 90.6%
-[ 9, 10) 3 0.2% 90.8%
-[ 10, 12) 62 3.1% 93.9%
-[ 12, 14) 91 4.5% 98.4%
-[ 14, 16) 32 1.6% 100.0%
-[ 16, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 26) 0 0.0% 100.0%
-[ 26, 31) 0 0.0% 100.0%
-[ 31, 37) 0 0.0% 100.0%
-[ 37, 44) 0 0.0% 100.0%
-[ 44, 52) 0 0.0% 100.0%
-[ 52, 61) 0 0.0% 100.0%
-[ 61, inf) 0 0.0% 100.0%
-Benchmark___10_chunks____1B-2 2000 5836079 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 5 Max: 11 Avg: 5.42
-------------------------------------------------------------
-[ 5, 6) 1781 89.1% 89.1% #########
-[ 6, 7) 31 1.6% 90.6%
-[ 7, 8) 1 0.1% 90.7%
-[ 8, 9) 29 1.5% 92.1%
-[ 9, 10) 94 4.7% 96.8%
-[ 10, 11) 49 2.5% 99.2%
-[ 11, 13) 15 0.8% 100.0%
-[ 13, 15) 0 0.0% 100.0%
-[ 15, 17) 0 0.0% 100.0%
-[ 17, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 25) 0 0.0% 100.0%
-[ 25, 29) 0 0.0% 100.0%
-[ 29, 33) 0 0.0% 100.0%
-[ 33, 38) 0 0.0% 100.0%
-[ 38, 44) 0 0.0% 100.0%
-[ 44, inf) 0 0.0% 100.0%
-Benchmark___10_chunks___10B 1000 7468897 ns/op 0.03 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 6 Max: 20 Avg: 6.94
-------------------------------------------------------------
-[ 6, 7) 841 84.1% 84.1% ########
-[ 7, 8) 30 3.0% 87.1%
-[ 8, 9) 2 0.2% 87.3%
-[ 9, 10) 31 3.1% 90.4%
-[ 10, 12) 6 0.6% 91.0%
-[ 12, 14) 29 2.9% 93.9%
-[ 14, 16) 26 2.6% 96.5%
-[ 16, 19) 32 3.2% 99.7%
-[ 19, 23) 3 0.3% 100.0%
-[ 23, 27) 0 0.0% 100.0%
-[ 27, 32) 0 0.0% 100.0%
-[ 32, 38) 0 0.0% 100.0%
+[ 3, 4) 1573 78.7% 78.7% ########
+[ 4, 5) 146 7.3% 86.0% #
+[ 5, 6) 53 2.7% 88.6%
+[ 6, 7) 0 0.0% 88.6%
+[ 7, 9) 0 0.0% 88.6%
+[ 9, 11) 3 0.2% 88.8%
+[ 11, 13) 79 4.0% 92.7%
+[ 13, 16) 107 5.4% 98.1% #
+[ 16, 20) 39 2.0% 100.0%
+[ 20, 25) 0 0.0% 100.0%
+[ 25, 31) 0 0.0% 100.0%
+[ 31, 38) 0 0.0% 100.0%
[ 38, 46) 0 0.0% 100.0%
-[ 46, 55) 0 0.0% 100.0%
-[ 55, 66) 0 0.0% 100.0%
-[ 66, 80) 0 0.0% 100.0%
-[ 80, inf) 0 0.0% 100.0%
-Benchmark___10_chunks___10B-2 2000 5896988 ns/op 0.03 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 5 Max: 13 Avg: 5.45
-------------------------------------------------------------
-[ 5, 6) 1795 89.8% 89.8% #########
-[ 6, 7) 31 1.6% 91.3%
-[ 7, 8) 0 0.0% 91.3%
-[ 8, 9) 7 0.4% 91.7%
-[ 9, 10) 35 1.8% 93.4%
-[ 10, 12) 124 6.2% 99.6% #
-[ 12, 14) 8 0.4% 100.0%
-[ 14, 16) 0 0.0% 100.0%
-[ 16, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 26) 0 0.0% 100.0%
-[ 26, 30) 0 0.0% 100.0%
-[ 30, 35) 0 0.0% 100.0%
-[ 35, 41) 0 0.0% 100.0%
-[ 41, 47) 0 0.0% 100.0%
-[ 47, 55) 0 0.0% 100.0%
-[ 55, inf) 0 0.0% 100.0%
-Benchmark___10_chunks__100B 2000 7511902 ns/op 0.27 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 6 Max: 20 Avg: 6.89
-------------------------------------------------------------
-[ 6, 7) 1706 85.3% 85.3% #########
-[ 7, 8) 76 3.8% 89.1%
-[ 8, 9) 3 0.2% 89.2%
-[ 9, 10) 40 2.0% 91.2%
-[ 10, 12) 7 0.4% 91.6%
-[ 12, 14) 43 2.1% 93.8%
-[ 14, 16) 10 0.5% 94.2%
-[ 16, 19) 113 5.7% 99.9% #
-[ 19, 23) 2 0.1% 100.0%
-[ 23, 27) 0 0.0% 100.0%
-[ 27, 32) 0 0.0% 100.0%
-[ 32, 38) 0 0.0% 100.0%
-[ 38, 46) 0 0.0% 100.0%
-[ 46, 55) 0 0.0% 100.0%
-[ 55, 66) 0 0.0% 100.0%
-[ 66, 80) 0 0.0% 100.0%
-[ 80, inf) 0 0.0% 100.0%
-Benchmark___10_chunks__100B-2 2000 5975725 ns/op 0.33 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 5 Max: 14 Avg: 5.52
-------------------------------------------------------------
-[ 5, 6) 1796 89.8% 89.8% #########
-[ 6, 7) 32 1.6% 91.4%
-[ 7, 8) 12 0.6% 92.0%
-[ 8, 9) 0 0.0% 92.0%
-[ 9, 10) 7 0.4% 92.4%
-[ 10, 12) 97 4.9% 97.2%
-[ 12, 14) 55 2.8% 100.0%
-[ 14, 16) 1 0.1% 100.0%
-[ 16, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 26) 0 0.0% 100.0%
-[ 26, 31) 0 0.0% 100.0%
-[ 31, 36) 0 0.0% 100.0%
-[ 36, 42) 0 0.0% 100.0%
-[ 42, 49) 0 0.0% 100.0%
-[ 49, 58) 0 0.0% 100.0%
-[ 58, inf) 0 0.0% 100.0%
-Benchmark___10_chunks___1KB 1000 7678796 ns/op 2.60 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 6 Max: 21 Avg: 7.07
-------------------------------------------------------------
-[ 6, 7) 862 86.2% 86.2% #########
-[ 7, 8) 21 2.1% 88.3%
-[ 8, 9) 0 0.0% 88.3%
-[ 9, 10) 7 0.7% 89.0%
-[ 10, 12) 27 2.7% 91.7%
-[ 12, 14) 0 0.0% 91.7%
-[ 14, 16) 23 2.3% 94.0%
-[ 16, 19) 38 3.8% 97.8%
-[ 19, 23) 22 2.2% 100.0%
-[ 23, 28) 0 0.0% 100.0%
-[ 28, 34) 0 0.0% 100.0%
-[ 34, 41) 0 0.0% 100.0%
-[ 41, 49) 0 0.0% 100.0%
-[ 49, 59) 0 0.0% 100.0%
-[ 59, 71) 0 0.0% 100.0%
-[ 71, 85) 0 0.0% 100.0%
-[ 85, inf) 0 0.0% 100.0%
-Benchmark___10_chunks___1KB-2 2000 6047220 ns/op 3.31 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 5 Max: 14 Avg: 5.57
-------------------------------------------------------------
-[ 5, 6) 1775 88.8% 88.8% #########
-[ 6, 7) 43 2.1% 90.9%
-[ 7, 8) 17 0.9% 91.8%
-[ 8, 9) 0 0.0% 91.8%
-[ 9, 10) 2 0.1% 91.9%
-[ 10, 12) 87 4.4% 96.2%
-[ 12, 14) 74 3.7% 99.9%
-[ 14, 16) 2 0.1% 100.0%
-[ 16, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 26) 0 0.0% 100.0%
-[ 26, 31) 0 0.0% 100.0%
-[ 31, 36) 0 0.0% 100.0%
-[ 36, 42) 0 0.0% 100.0%
-[ 42, 49) 0 0.0% 100.0%
-[ 49, 58) 0 0.0% 100.0%
-[ 58, inf) 0 0.0% 100.0%
-Benchmark___10_chunks__10KB 1000 9913510 ns/op 20.17 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 8 Max: 22 Avg: 9.63
-------------------------------------------------------------
-[ 8, 9) 808 80.8% 80.8% ########
-[ 9, 10) 2 0.2% 81.0%
-[ 10, 11) 33 3.3% 84.3%
-[ 11, 12) 11 1.1% 85.4%
-[ 12, 14) 0 0.0% 85.4%
-[ 14, 16) 0 0.0% 85.4%
-[ 16, 18) 37 3.7% 89.1%
-[ 18, 21) 95 9.5% 98.6% #
-[ 21, 25) 14 1.4% 100.0%
-[ 25, 29) 0 0.0% 100.0%
-[ 29, 34) 0 0.0% 100.0%
-[ 34, 40) 0 0.0% 100.0%
-[ 40, 48) 0 0.0% 100.0%
-[ 48, 57) 0 0.0% 100.0%
-[ 57, 68) 0 0.0% 100.0%
+[ 46, 56) 0 0.0% 100.0%
+[ 56, 68) 0 0.0% 100.0%
[ 68, 82) 0 0.0% 100.0%
[ 82, inf) 0 0.0% 100.0%
-Benchmark___10_chunks__10KB-2 2000 7066239 ns/op 28.30 MB/s
+Benchmark___10_chunks_100KB 200 31539312 ns/op 63.41 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 5 Max: 15 Avg: 6.56
+Count: 200 Min: 22 Max: 40 Avg: 30.91
------------------------------------------------------------
-[ 5, 6) 710 35.5% 35.5% ####
-[ 6, 7) 971 48.6% 84.1% #####
-[ 7, 8) 34 1.7% 85.8%
-[ 8, 9) 0 0.0% 85.8%
-[ 9, 10) 0 0.0% 85.8%
-[ 10, 12) 56 2.8% 88.6%
-[ 12, 14) 201 10.1% 98.6% #
-[ 14, 16) 28 1.4% 100.0%
-[ 16, 19) 0 0.0% 100.0%
-[ 19, 22) 0 0.0% 100.0%
-[ 22, 26) 0 0.0% 100.0%
-[ 26, 31) 0 0.0% 100.0%
-[ 31, 37) 0 0.0% 100.0%
-[ 37, 44) 0 0.0% 100.0%
-[ 44, 52) 0 0.0% 100.0%
-[ 52, 61) 0 0.0% 100.0%
-[ 61, inf) 0 0.0% 100.0%
-Benchmark___10_chunks_100KB 500 32109490 ns/op 62.29 MB/s
+[ 22, 23) 1 0.5% 0.5%
+[ 23, 24) 1 0.5% 1.0%
+[ 24, 25) 69 34.5% 35.5% ###
+[ 25, 26) 22 11.0% 46.5% #
+[ 26, 28) 7 3.5% 50.0%
+[ 28, 30) 0 0.0% 50.0%
+[ 30, 33) 0 0.0% 50.0%
+[ 33, 36) 0 0.0% 50.0%
+[ 36, 40) 95 47.5% 97.5% #####
+[ 40, 45) 5 2.5% 100.0%
+[ 45, 51) 0 0.0% 100.0%
+[ 51, 59) 0 0.0% 100.0%
+[ 59, 69) 0 0.0% 100.0%
+[ 69, 81) 0 0.0% 100.0%
+[ 81, 95) 0 0.0% 100.0%
+[ 95, 112) 0 0.0% 100.0%
+[112, inf) 0 0.0% 100.0%
+Benchmark___10_chunks_100KB-2 500 18574440 ns/op 107.67 MB/s
Histogram (unit: ms)
-Count: 500 Min: 24 Max: 41 Avg: 31.61
+Count: 500 Min: 12 Max: 27 Avg: 18.10
------------------------------------------------------------
-[ 24, 25) 55 11.0% 11.0% #
-[ 25, 26) 105 21.0% 32.0% ##
-[ 26, 27) 50 10.0% 42.0% #
-[ 27, 28) 10 2.0% 44.0%
-[ 28, 30) 2 0.4% 44.4%
-[ 30, 32) 0 0.0% 44.4%
-[ 32, 35) 23 4.6% 49.0%
-[ 35, 38) 157 31.4% 80.4% ###
-[ 38, 42) 98 19.6% 100.0% ##
-[ 42, 47) 0 0.0% 100.0%
-[ 47, 53) 0 0.0% 100.0%
-[ 53, 60) 0 0.0% 100.0%
-[ 60, 69) 0 0.0% 100.0%
-[ 69, 80) 0 0.0% 100.0%
-[ 80, 94) 0 0.0% 100.0%
-[ 94, 111) 0 0.0% 100.0%
-[111, inf) 0 0.0% 100.0%
-Benchmark___10_chunks_100KB-2 500 18957196 ns/op 105.50 MB/s
+[ 12, 13) 79 15.8% 15.8% ##
+[ 13, 14) 168 33.6% 49.4% ###
+[ 14, 15) 12 2.4% 51.8%
+[ 15, 16) 1 0.2% 52.0%
+[ 16, 18) 0 0.0% 52.0%
+[ 18, 20) 0 0.0% 52.0%
+[ 20, 22) 30 6.0% 58.0% #
+[ 22, 25) 94 18.8% 76.8% ##
+[ 25, 29) 116 23.2% 100.0% ##
+[ 29, 34) 0 0.0% 100.0%
+[ 34, 40) 0 0.0% 100.0%
+[ 40, 47) 0 0.0% 100.0%
+[ 47, 55) 0 0.0% 100.0%
+[ 55, 65) 0 0.0% 100.0%
+[ 65, 77) 0 0.0% 100.0%
+[ 77, 91) 0 0.0% 100.0%
+[ 91, inf) 0 0.0% 100.0%
+Benchmark__100_chunks____1B 500 18036549 ns/op 0.01 MB/s
Histogram (unit: ms)
-Count: 500 Min: 14 Max: 24 Avg: 18.47
+Count: 500 Min: 14 Max: 41 Avg: 17.44
------------------------------------------------------------
-[ 14, 15) 155 31.0% 31.0% ###
-[ 15, 16) 78 15.6% 46.6% ##
-[ 16, 17) 0 0.0% 46.6%
-[ 17, 18) 0 0.0% 46.6%
-[ 18, 19) 0 0.0% 46.6%
-[ 19, 21) 33 6.6% 53.2% #
-[ 21, 23) 121 24.2% 77.4% ##
-[ 23, 25) 113 22.6% 100.0% ##
-[ 25, 28) 0 0.0% 100.0%
-[ 28, 31) 0 0.0% 100.0%
-[ 31, 35) 0 0.0% 100.0%
-[ 35, 40) 0 0.0% 100.0%
-[ 40, 46) 0 0.0% 100.0%
-[ 46, 53) 0 0.0% 100.0%
-[ 53, 61) 0 0.0% 100.0%
-[ 61, 70) 0 0.0% 100.0%
-[ 70, inf) 0 0.0% 100.0%
-Benchmark__100_chunks____1B 500 23105522 ns/op 0.01 MB/s
+[ 14, 15) 280 56.0% 56.0% ######
+[ 15, 16) 106 21.2% 77.2% ##
+[ 16, 17) 10 2.0% 79.2%
+[ 17, 18) 1 0.2% 79.4%
+[ 18, 20) 6 1.2% 80.6%
+[ 20, 23) 22 4.4% 85.0%
+[ 23, 26) 0 0.0% 85.0%
+[ 26, 30) 16 3.2% 88.2%
+[ 30, 35) 27 5.4% 93.6% #
+[ 35, 42) 32 6.4% 100.0% #
+[ 42, 51) 0 0.0% 100.0%
+[ 51, 62) 0 0.0% 100.0%
+[ 62, 75) 0 0.0% 100.0%
+[ 75, 92) 0 0.0% 100.0%
+[ 92, 113) 0 0.0% 100.0%
+[113, 140) 0 0.0% 100.0%
+[140, inf) 0 0.0% 100.0%
+Benchmark__100_chunks____1B-2 1000 12395699 ns/op 0.02 MB/s
Histogram (unit: ms)
-Count: 500 Min: 16 Max: 40 Avg: 22.54
+Count: 1000 Min: 7 Max: 31 Avg: 11.90
------------------------------------------------------------
-[ 16, 17) 1 0.2% 0.2%
-[ 17, 18) 14 2.8% 3.0%
-[ 18, 19) 47 9.4% 12.4% #
-[ 19, 20) 90 18.0% 30.4% ##
-[ 20, 22) 213 42.6% 73.0% ####
-[ 22, 24) 21 4.2% 77.2%
-[ 24, 27) 20 4.0% 81.2%
-[ 27, 31) 11 2.2% 83.4%
-[ 31, 36) 63 12.6% 96.0% #
-[ 36, 42) 20 4.0% 100.0%
-[ 42, 50) 0 0.0% 100.0%
-[ 50, 60) 0 0.0% 100.0%
-[ 60, 72) 0 0.0% 100.0%
-[ 72, 87) 0 0.0% 100.0%
-[ 87, 106) 0 0.0% 100.0%
-[106, 130) 0 0.0% 100.0%
-[130, inf) 0 0.0% 100.0%
-Benchmark__100_chunks____1B-2 1000 14962218 ns/op 0.01 MB/s
+[ 7, 8) 26 2.6% 2.6%
+[ 8, 9) 14 1.4% 4.0%
+[ 9, 10) 171 17.1% 21.1% ##
+[ 10, 11) 528 52.8% 73.9% #####
+[ 11, 13) 71 7.1% 81.0% #
+[ 13, 15) 23 2.3% 83.3%
+[ 15, 18) 8 0.8% 84.1%
+[ 18, 22) 68 6.8% 90.9% #
+[ 22, 27) 89 8.9% 99.8% #
+[ 27, 33) 2 0.2% 100.0%
+[ 33, 41) 0 0.0% 100.0%
+[ 41, 51) 0 0.0% 100.0%
+[ 51, 63) 0 0.0% 100.0%
+[ 63, 78) 0 0.0% 100.0%
+[ 78, 97) 0 0.0% 100.0%
+[ 97, 121) 0 0.0% 100.0%
+[121, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___10B 300 20669375 ns/op 0.10 MB/s
Histogram (unit: ms)
-Count: 1000 Min: 11 Max: 25 Avg: 14.46
+Count: 300 Min: 17 Max: 39 Avg: 20.31
------------------------------------------------------------
-[ 11, 12) 5 0.5% 0.5%
-[ 12, 13) 376 37.6% 38.1% ####
-[ 13, 14) 375 37.5% 75.6% ####
-[ 14, 15) 39 3.9% 79.5%
-[ 15, 17) 13 1.3% 80.8%
-[ 17, 19) 4 0.4% 81.2%
-[ 19, 21) 26 2.6% 83.8%
-[ 21, 24) 107 10.7% 94.5% #
-[ 24, 28) 55 5.5% 100.0% #
-[ 28, 32) 0 0.0% 100.0%
-[ 32, 37) 0 0.0% 100.0%
-[ 37, 43) 0 0.0% 100.0%
-[ 43, 51) 0 0.0% 100.0%
-[ 51, 60) 0 0.0% 100.0%
-[ 60, 71) 0 0.0% 100.0%
-[ 71, 85) 0 0.0% 100.0%
-[ 85, inf) 0 0.0% 100.0%
-Benchmark__100_chunks___10B 500 24822827 ns/op 0.08 MB/s
+[ 17, 18) 228 76.0% 76.0% ########
+[ 18, 19) 8 2.7% 78.7%
+[ 19, 20) 2 0.7% 79.3%
+[ 20, 21) 0 0.0% 79.3%
+[ 21, 23) 3 1.0% 80.3%
+[ 23, 25) 12 4.0% 84.3%
+[ 25, 28) 0 0.0% 84.3%
+[ 28, 32) 0 0.0% 84.3%
+[ 32, 37) 15 5.0% 89.3% #
+[ 37, 43) 32 10.7% 100.0% #
+[ 43, 50) 0 0.0% 100.0%
+[ 50, 59) 0 0.0% 100.0%
+[ 59, 70) 0 0.0% 100.0%
+[ 70, 84) 0 0.0% 100.0%
+[ 84, 101) 0 0.0% 100.0%
+[101, 122) 0 0.0% 100.0%
+[122, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___10B-2 500 12634978 ns/op 0.16 MB/s
Histogram (unit: ms)
-Count: 500 Min: 20 Max: 41 Avg: 24.42
+Count: 500 Min: 9 Max: 27 Avg: 12.11
------------------------------------------------------------
-[ 20, 21) 61 12.2% 12.2% #
-[ 21, 22) 294 58.8% 71.0% ######
-[ 22, 23) 16 3.2% 74.2%
-[ 23, 24) 4 0.8% 75.0%
-[ 24, 26) 20 4.0% 79.0%
-[ 26, 28) 5 1.0% 80.0%
-[ 28, 31) 7 1.4% 81.4%
-[ 31, 35) 12 2.4% 83.8%
-[ 35, 40) 38 7.6% 91.4% #
-[ 40, 46) 43 8.6% 100.0% #
-[ 46, 53) 0 0.0% 100.0%
+[ 9, 10) 69 13.8% 13.8% #
+[ 10, 11) 287 57.4% 71.2% ######
+[ 11, 12) 47 9.4% 80.6% #
+[ 12, 13) 10 2.0% 82.6%
+[ 13, 15) 8 1.6% 84.2%
+[ 15, 17) 0 0.0% 84.2%
+[ 17, 20) 5 1.0% 85.2%
+[ 20, 23) 28 5.6% 90.8% #
+[ 23, 27) 43 8.6% 99.4% #
+[ 27, 32) 3 0.6% 100.0%
+[ 32, 38) 0 0.0% 100.0%
+[ 38, 46) 0 0.0% 100.0%
+[ 46, 56) 0 0.0% 100.0%
+[ 56, 68) 0 0.0% 100.0%
+[ 68, 82) 0 0.0% 100.0%
+[ 82, 99) 0 0.0% 100.0%
+[ 99, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__100B 300 23164692 ns/op 0.86 MB/s
+Histogram (unit: ms)
+Count: 300 Min: 19 Max: 42 Avg: 22.72
+------------------------------------------------------------
+[ 19, 20) 209 69.7% 69.7% #######
+[ 20, 21) 17 5.7% 75.3% #
+[ 21, 22) 6 2.0% 77.3%
+[ 22, 23) 1 0.3% 77.7%
+[ 23, 25) 1 0.3% 78.0%
+[ 25, 27) 17 5.7% 83.7% #
+[ 27, 30) 0 0.0% 83.7%
+[ 30, 34) 0 0.0% 83.7%
+[ 34, 39) 19 6.3% 90.0% #
+[ 39, 45) 30 10.0% 100.0% #
+[ 45, 53) 0 0.0% 100.0%
[ 53, 62) 0 0.0% 100.0%
-[ 62, 73) 0 0.0% 100.0%
-[ 73, 86) 0 0.0% 100.0%
-[ 86, 103) 0 0.0% 100.0%
-[103, 123) 0 0.0% 100.0%
-[123, inf) 0 0.0% 100.0%
-Benchmark__100_chunks___10B-2 500 15143142 ns/op 0.13 MB/s
+[ 62, 74) 0 0.0% 100.0%
+[ 74, 89) 0 0.0% 100.0%
+[ 89, 107) 0 0.0% 100.0%
+[107, 129) 0 0.0% 100.0%
+[129, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__100B-2 500 13821225 ns/op 1.45 MB/s
Histogram (unit: ms)
-Count: 500 Min: 11 Max: 25 Avg: 14.63
+Count: 500 Min: 10 Max: 29 Avg: 13.29
------------------------------------------------------------
-[ 11, 12) 1 0.2% 0.2%
-[ 12, 13) 126 25.2% 25.4% ###
-[ 13, 14) 238 47.6% 73.0% #####
-[ 14, 15) 35 7.0% 80.0% #
-[ 15, 17) 6 1.2% 81.2%
-[ 17, 19) 0 0.0% 81.2%
-[ 19, 21) 10 2.0% 83.2%
-[ 21, 24) 52 10.4% 93.6% #
-[ 24, 28) 32 6.4% 100.0% #
-[ 28, 32) 0 0.0% 100.0%
-[ 32, 37) 0 0.0% 100.0%
-[ 37, 43) 0 0.0% 100.0%
-[ 43, 51) 0 0.0% 100.0%
-[ 51, 60) 0 0.0% 100.0%
-[ 60, 71) 0 0.0% 100.0%
-[ 71, 85) 0 0.0% 100.0%
-[ 85, inf) 0 0.0% 100.0%
-Benchmark__100_chunks__100B 500 25825032 ns/op 0.77 MB/s
+[ 10, 11) 47 9.4% 9.4% #
+[ 11, 12) 307 61.4% 70.8% ######
+[ 12, 13) 46 9.2% 80.0% #
+[ 13, 14) 9 1.8% 81.8%
+[ 14, 16) 9 1.8% 83.6%
+[ 16, 18) 0 0.0% 83.6%
+[ 18, 21) 5 1.0% 84.6%
+[ 21, 24) 25 5.0% 89.6% #
+[ 24, 28) 49 9.8% 99.4% #
+[ 28, 33) 3 0.6% 100.0%
+[ 33, 40) 0 0.0% 100.0%
+[ 40, 48) 0 0.0% 100.0%
+[ 48, 58) 0 0.0% 100.0%
+[ 58, 70) 0 0.0% 100.0%
+[ 70, 85) 0 0.0% 100.0%
+[ 85, 103) 0 0.0% 100.0%
+[103, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___1KB 300 26071439 ns/op 7.67 MB/s
Histogram (unit: ms)
-Count: 500 Min: 22 Max: 41 Avg: 25.23
+Count: 300 Min: 20 Max: 48 Avg: 25.72
------------------------------------------------------------
-[ 22, 23) 336 67.2% 67.2% #######
-[ 23, 24) 29 5.8% 73.0% #
-[ 24, 25) 9 1.8% 74.8%
-[ 25, 26) 0 0.0% 74.8%
-[ 26, 28) 16 3.2% 78.0%
-[ 28, 30) 14 2.8% 80.8%
-[ 30, 33) 5 1.0% 81.8%
-[ 33, 36) 24 4.8% 86.6%
-[ 36, 40) 63 12.6% 99.2% #
-[ 40, 45) 4 0.8% 100.0%
-[ 45, 52) 0 0.0% 100.0%
-[ 52, 60) 0 0.0% 100.0%
-[ 60, 70) 0 0.0% 100.0%
-[ 70, 82) 0 0.0% 100.0%
-[ 82, 97) 0 0.0% 100.0%
-[ 97, 115) 0 0.0% 100.0%
-[115, inf) 0 0.0% 100.0%
-Benchmark__100_chunks__100B-2 500 16276252 ns/op 1.23 MB/s
+[ 20, 21) 1 0.3% 0.3%
+[ 21, 22) 195 65.0% 65.3% #######
+[ 22, 23) 13 4.3% 69.7%
+[ 23, 24) 5 1.7% 71.3%
+[ 24, 26) 0 0.0% 71.3%
+[ 26, 29) 23 7.7% 79.0% #
+[ 29, 32) 0 0.0% 79.0%
+[ 32, 36) 0 0.0% 79.0%
+[ 36, 41) 23 7.7% 86.7% #
+[ 41, 48) 39 13.0% 99.7% #
+[ 48, 57) 1 0.3% 100.0%
+[ 57, 68) 0 0.0% 100.0%
+[ 68, 82) 0 0.0% 100.0%
+[ 82, 99) 0 0.0% 100.0%
+[ 99, 121) 0 0.0% 100.0%
+[121, 148) 0 0.0% 100.0%
+[148, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___1KB-2 500 15738134 ns/op 12.71 MB/s
Histogram (unit: ms)
-Count: 500 Min: 13 Max: 28 Avg: 15.75
+Count: 500 Min: 11 Max: 30 Avg: 15.24
------------------------------------------------------------
-[ 13, 14) 153 30.6% 30.6% ###
-[ 14, 15) 208 41.6% 72.2% ####
-[ 15, 16) 32 6.4% 78.6% #
-[ 16, 17) 6 1.2% 79.8%
-[ 17, 19) 5 1.0% 80.8%
-[ 19, 21) 3 0.6% 81.4%
-[ 21, 23) 19 3.8% 85.2%
-[ 23, 26) 52 10.4% 95.6% #
-[ 26, 30) 22 4.4% 100.0%
-[ 30, 35) 0 0.0% 100.0%
-[ 35, 41) 0 0.0% 100.0%
-[ 41, 48) 0 0.0% 100.0%
-[ 48, 56) 0 0.0% 100.0%
-[ 56, 66) 0 0.0% 100.0%
-[ 66, 78) 0 0.0% 100.0%
-[ 78, 92) 0 0.0% 100.0%
-[ 92, inf) 0 0.0% 100.0%
-Benchmark__100_chunks___1KB 500 29567438 ns/op 6.76 MB/s
+[ 11, 12) 19 3.8% 3.8%
+[ 12, 13) 253 50.6% 54.4% #####
+[ 13, 14) 97 19.4% 73.8% ##
+[ 14, 15) 11 2.2% 76.0%
+[ 15, 17) 15 3.0% 79.0%
+[ 17, 19) 0 0.0% 79.0%
+[ 19, 22) 3 0.6% 79.6%
+[ 22, 25) 28 5.6% 85.2% #
+[ 25, 29) 61 12.2% 97.4% #
+[ 29, 34) 13 2.6% 100.0%
+[ 34, 41) 0 0.0% 100.0%
+[ 41, 49) 0 0.0% 100.0%
+[ 49, 59) 0 0.0% 100.0%
+[ 59, 71) 0 0.0% 100.0%
+[ 71, 86) 0 0.0% 100.0%
+[ 86, 104) 0 0.0% 100.0%
+[104, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__10KB 100 50248311 ns/op 39.80 MB/s
Histogram (unit: ms)
-Count: 500 Min: 24 Max: 47 Avg: 29.00
+Count: 100 Min: 37 Max: 60 Avg: 49.72
------------------------------------------------------------
-[ 24, 25) 230 46.0% 46.0% #####
-[ 25, 26) 80 16.0% 62.0% ##
-[ 26, 27) 29 5.8% 67.8% #
-[ 27, 28) 3 0.6% 68.4%
-[ 28, 30) 24 4.8% 73.2%
-[ 30, 32) 12 2.4% 75.6%
-[ 32, 35) 1 0.2% 75.8%
-[ 35, 39) 15 3.0% 78.8%
-[ 39, 44) 62 12.4% 91.2% #
-[ 44, 50) 44 8.8% 100.0% #
-[ 50, 58) 0 0.0% 100.0%
-[ 58, 67) 0 0.0% 100.0%
+[ 37, 38) 4 4.0% 4.0%
+[ 38, 39) 7 7.0% 11.0% #
+[ 39, 40) 6 6.0% 17.0% #
+[ 40, 41) 5 5.0% 22.0% #
+[ 41, 43) 18 18.0% 40.0% ##
+[ 43, 45) 0 0.0% 40.0%
+[ 45, 48) 0 0.0% 40.0%
+[ 48, 52) 0 0.0% 40.0%
+[ 52, 57) 24 24.0% 64.0% ##
+[ 57, 63) 36 36.0% 100.0% ####
+[ 63, 71) 0 0.0% 100.0%
+[ 71, 80) 0 0.0% 100.0%
+[ 80, 92) 0 0.0% 100.0%
+[ 92, 107) 0 0.0% 100.0%
+[107, 125) 0 0.0% 100.0%
+[125, 147) 0 0.0% 100.0%
+[147, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__10KB-2 300 28614761 ns/op 69.89 MB/s
+Histogram (unit: ms)
+Count: 300 Min: 19 Max: 38 Avg: 28.11
+------------------------------------------------------------
+[ 19, 20) 7 2.3% 2.3%
+[ 20, 21) 55 18.3% 20.7% ##
+[ 21, 22) 43 14.3% 35.0% #
+[ 22, 23) 9 3.0% 38.0%
+[ 23, 25) 3 1.0% 39.0%
+[ 25, 27) 0 0.0% 39.0%
+[ 27, 30) 3 1.0% 40.0%
+[ 30, 33) 84 28.0% 68.0% ###
+[ 33, 37) 94 31.3% 99.3% ###
+[ 37, 42) 2 0.7% 100.0%
+[ 42, 49) 0 0.0% 100.0%
+[ 49, 57) 0 0.0% 100.0%
+[ 57, 67) 0 0.0% 100.0%
[ 67, 79) 0 0.0% 100.0%
[ 79, 94) 0 0.0% 100.0%
[ 94, 112) 0 0.0% 100.0%
-[112, 134) 0 0.0% 100.0%
-[134, inf) 0 0.0% 100.0%
-Benchmark__100_chunks___1KB-2 500 18167929 ns/op 11.01 MB/s
+[112, inf) 0 0.0% 100.0%
+Benchmark__100_chunks_100KB 30 272889576 ns/op 73.29 MB/s
Histogram (unit: ms)
-Count: 500 Min: 13 Max: 30 Avg: 17.65
+Count: 30 Min: 267 Max: 292 Avg: 272.40
------------------------------------------------------------
-[ 13, 14) 1 0.2% 0.2%
-[ 14, 15) 64 12.8% 13.0% #
-[ 15, 16) 237 47.4% 60.4% #####
-[ 16, 17) 62 12.4% 72.8% #
-[ 17, 19) 12 2.4% 75.2%
-[ 19, 21) 3 0.6% 75.8%
-[ 21, 24) 14 2.8% 78.6%
-[ 24, 27) 67 13.4% 92.0% #
-[ 27, 31) 40 8.0% 100.0% #
-[ 31, 36) 0 0.0% 100.0%
-[ 36, 42) 0 0.0% 100.0%
-[ 42, 49) 0 0.0% 100.0%
-[ 49, 58) 0 0.0% 100.0%
-[ 58, 69) 0 0.0% 100.0%
-[ 69, 83) 0 0.0% 100.0%
-[ 83, 100) 0 0.0% 100.0%
-[100, inf) 0 0.0% 100.0%
-Benchmark__100_chunks__10KB 100 52974498 ns/op 37.75 MB/s
+[267, 268) 3 10.0% 10.0% #
+[268, 269) 8 26.7% 36.7% ###
+[269, 270) 4 13.3% 50.0% #
+[270, 271) 4 13.3% 63.3% #
+[271, 273) 4 13.3% 76.7% #
+[273, 275) 1 3.3% 80.0%
+[275, 278) 1 3.3% 83.3%
+[278, 282) 0 0.0% 83.3%
+[282, 287) 1 3.3% 86.7%
+[287, 293) 4 13.3% 100.0% #
+[293, 301) 0 0.0% 100.0%
+[301, 311) 0 0.0% 100.0%
+[311, 324) 0 0.0% 100.0%
+[324, 340) 0 0.0% 100.0%
+[340, 360) 0 0.0% 100.0%
+[360, 384) 0 0.0% 100.0%
+[384, inf) 0 0.0% 100.0%
+Benchmark__100_chunks_100KB-2 50 149680912 ns/op 133.62 MB/s
Histogram (unit: ms)
-Count: 100 Min: 41 Max: 60 Avg: 52.43
+Count: 50 Min: 138 Max: 158 Avg: 149.14
------------------------------------------------------------
-[ 41, 42) 2 2.0% 2.0%
-[ 42, 43) 0 0.0% 2.0%
-[ 43, 44) 6 6.0% 8.0% #
-[ 44, 45) 26 26.0% 34.0% ###
-[ 45, 47) 0 0.0% 34.0%
-[ 47, 49) 0 0.0% 34.0%
-[ 49, 52) 0 0.0% 34.0%
-[ 52, 55) 0 0.0% 34.0%
-[ 55, 59) 51 51.0% 85.0% #####
-[ 59, 64) 15 15.0% 100.0% ##
-[ 64, 71) 0 0.0% 100.0%
-[ 71, 79) 0 0.0% 100.0%
-[ 79, 89) 0 0.0% 100.0%
-[ 89, 101) 0 0.0% 100.0%
-[101, 116) 0 0.0% 100.0%
-[116, 134) 0 0.0% 100.0%
-[134, inf) 0 0.0% 100.0%
-Benchmark__100_chunks__10KB-2 500 30197012 ns/op 66.23 MB/s
+[138, 139) 2 4.0% 4.0%
+[139, 140) 0 0.0% 4.0%
+[140, 141) 0 0.0% 4.0%
+[141, 142) 2 4.0% 8.0%
+[142, 144) 4 8.0% 16.0% #
+[144, 146) 4 8.0% 24.0% #
+[146, 149) 6 12.0% 36.0% #
+[149, 153) 20 40.0% 76.0% ####
+[153, 157) 11 22.0% 98.0% ##
+[157, 163) 1 2.0% 100.0%
+[163, 170) 0 0.0% 100.0%
+[170, 178) 0 0.0% 100.0%
+[178, 188) 0 0.0% 100.0%
+[188, 201) 0 0.0% 100.0%
+[201, 217) 0 0.0% 100.0%
+[217, 236) 0 0.0% 100.0%
+[236, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks____1B 100 111621410 ns/op 0.02 MB/s
Histogram (unit: ms)
-Count: 500 Min: 22 Max: 49 Avg: 29.68
+Count: 100 Min: 93 Max: 120 Avg: 111.11
------------------------------------------------------------
-[ 22, 23) 65 13.0% 13.0% #
-[ 23, 24) 75 15.0% 28.0% ##
-[ 24, 25) 19 3.8% 31.8%
-[ 25, 26) 0 0.0% 31.8%
-[ 26, 28) 0 0.0% 31.8%
-[ 28, 31) 14 2.8% 34.6%
-[ 31, 34) 278 55.6% 90.2% ######
-[ 34, 38) 35 7.0% 97.2% #
-[ 38, 43) 2 0.4% 97.6%
-[ 43, 50) 12 2.4% 100.0%
-[ 50, 59) 0 0.0% 100.0%
-[ 59, 70) 0 0.0% 100.0%
-[ 70, 83) 0 0.0% 100.0%
-[ 83, 100) 0 0.0% 100.0%
-[100, 121) 0 0.0% 100.0%
-[121, 148) 0 0.0% 100.0%
-[148, inf) 0 0.0% 100.0%
-Benchmark__100_chunks_100KB 50 259344427 ns/op 77.12 MB/s
+[ 93, 94) 1 1.0% 1.0%
+[ 94, 95) 0 0.0% 1.0%
+[ 95, 96) 0 0.0% 1.0%
+[ 96, 97) 0 0.0% 1.0%
+[ 97, 99) 0 0.0% 1.0%
+[ 99, 102) 17 17.0% 18.0% ##
+[102, 105) 12 12.0% 30.0% #
+[105, 109) 1 1.0% 31.0%
+[109, 114) 6 6.0% 37.0% #
+[114, 121) 63 63.0% 100.0% ######
+[121, 130) 0 0.0% 100.0%
+[130, 141) 0 0.0% 100.0%
+[141, 154) 0 0.0% 100.0%
+[154, 171) 0 0.0% 100.0%
+[171, 192) 0 0.0% 100.0%
+[192, 219) 0 0.0% 100.0%
+[219, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks____1B-2 100 103311101 ns/op 0.02 MB/s
Histogram (unit: ms)
-Count: 50 Min: 249 Max: 278 Avg: 258.80
+Count: 100 Min: 62 Max: 168 Avg: 102.82
------------------------------------------------------------
-[249, 250) 1 2.0% 2.0%
-[250, 251) 2 4.0% 6.0%
-[251, 252) 7 14.0% 20.0% #
-[252, 253) 5 10.0% 30.0% #
-[253, 255) 7 14.0% 44.0% #
-[255, 258) 2 4.0% 48.0%
-[258, 261) 7 14.0% 62.0% #
-[261, 265) 6 12.0% 74.0% #
-[265, 271) 8 16.0% 90.0% ##
-[271, 278) 4 8.0% 98.0% #
-[278, 287) 1 2.0% 100.0%
-[287, 298) 0 0.0% 100.0%
-[298, 312) 0 0.0% 100.0%
-[312, 330) 0 0.0% 100.0%
-[330, 353) 0 0.0% 100.0%
-[353, 381) 0 0.0% 100.0%
-[381, inf) 0 0.0% 100.0%
-Benchmark__100_chunks_100KB-2 100 138213866 ns/op 144.70 MB/s
+[ 62, 63) 1 1.0% 1.0%
+[ 63, 64) 0 0.0% 1.0%
+[ 64, 65) 0 0.0% 1.0%
+[ 65, 67) 0 0.0% 1.0%
+[ 67, 70) 0 0.0% 1.0%
+[ 70, 74) 1 1.0% 2.0%
+[ 74, 80) 2 2.0% 4.0%
+[ 80, 88) 2 2.0% 6.0%
+[ 88, 100) 23 23.0% 29.0% ##
+[100, 116) 61 61.0% 90.0% ######
+[116, 138) 9 9.0% 99.0% #
+[138, 168) 0 0.0% 99.0%
+[168, 209) 1 1.0% 100.0%
+[209, 265) 0 0.0% 100.0%
+[265, 342) 0 0.0% 100.0%
+[342, 447) 0 0.0% 100.0%
+[447, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___10B 50 189580683 ns/op 0.11 MB/s
Histogram (unit: ms)
-Count: 100 Min: 127 Max: 147 Avg: 137.69
+Count: 50 Min: 181 Max: 210 Avg: 189.10
------------------------------------------------------------
-[127, 128) 2 2.0% 2.0%
-[128, 129) 1 1.0% 3.0%
-[129, 130) 4 4.0% 7.0%
-[130, 131) 0 0.0% 7.0%
-[131, 133) 1 1.0% 8.0%
-[133, 135) 4 4.0% 12.0%
-[135, 138) 26 26.0% 38.0% ###
-[138, 142) 56 56.0% 94.0% ######
-[142, 146) 3 3.0% 97.0%
-[146, 152) 3 3.0% 100.0%
-[152, 159) 0 0.0% 100.0%
-[159, 167) 0 0.0% 100.0%
-[167, 177) 0 0.0% 100.0%
-[177, 190) 0 0.0% 100.0%
-[190, 206) 0 0.0% 100.0%
-[206, 225) 0 0.0% 100.0%
-[225, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks____1B 100 140929084 ns/op 0.01 MB/s
+[181, 182) 2 4.0% 4.0%
+[182, 183) 0 0.0% 4.0%
+[183, 184) 1 2.0% 6.0%
+[184, 185) 1 2.0% 8.0%
+[185, 187) 16 32.0% 40.0% ###
+[187, 190) 20 40.0% 80.0% ####
+[190, 193) 2 4.0% 84.0%
+[193, 197) 1 2.0% 86.0%
+[197, 203) 3 6.0% 92.0% #
+[203, 210) 3 6.0% 98.0% #
+[210, 219) 1 2.0% 100.0%
+[219, 230) 0 0.0% 100.0%
+[230, 244) 0 0.0% 100.0%
+[244, 262) 0 0.0% 100.0%
+[262, 285) 0 0.0% 100.0%
+[285, 313) 0 0.0% 100.0%
+[313, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___10B-2 100 107068429 ns/op 0.19 MB/s
Histogram (unit: ms)
-Count: 100 Min: 121 Max: 159 Avg: 140.44
+Count: 100 Min: 98 Max: 124 Avg: 106.53
------------------------------------------------------------
-[121, 122) 3 3.0% 3.0%
-[122, 123) 6 6.0% 9.0% #
-[123, 124) 1 1.0% 10.0%
-[124, 126) 8 8.0% 18.0% #
-[126, 128) 4 4.0% 22.0%
-[128, 131) 3 3.0% 25.0%
-[131, 135) 4 4.0% 29.0%
-[135, 140) 1 1.0% 30.0%
-[140, 146) 16 16.0% 46.0% ##
-[146, 154) 53 53.0% 99.0% #####
-[154, 165) 1 1.0% 100.0%
-[165, 179) 0 0.0% 100.0%
-[179, 197) 0 0.0% 100.0%
-[197, 220) 0 0.0% 100.0%
-[220, 249) 0 0.0% 100.0%
-[249, 286) 0 0.0% 100.0%
-[286, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks____1B-2 100 105473615 ns/op 0.02 MB/s
+[ 98, 99) 1 1.0% 1.0%
+[ 99, 100) 0 0.0% 1.0%
+[100, 101) 5 5.0% 6.0% #
+[101, 102) 12 12.0% 18.0% #
+[102, 104) 20 20.0% 38.0% ##
+[104, 106) 18 18.0% 56.0% ##
+[106, 109) 23 23.0% 79.0% ##
+[109, 113) 4 4.0% 83.0%
+[113, 118) 7 7.0% 90.0% #
+[118, 125) 10 10.0% 100.0% #
+[125, 133) 0 0.0% 100.0%
+[133, 143) 0 0.0% 100.0%
+[143, 156) 0 0.0% 100.0%
+[156, 172) 0 0.0% 100.0%
+[172, 192) 0 0.0% 100.0%
+[192, 217) 0 0.0% 100.0%
+[217, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__100B 30 223128293 ns/op 0.90 MB/s
Histogram (unit: ms)
-Count: 100 Min: 73 Max: 120 Avg: 104.93
+Count: 30 Min: 210 Max: 241 Avg: 222.53
------------------------------------------------------------
-[ 73, 74) 1 1.0% 1.0%
-[ 74, 75) 0 0.0% 1.0%
-[ 75, 76) 1 1.0% 2.0%
-[ 76, 78) 1 1.0% 3.0%
-[ 78, 80) 0 0.0% 3.0%
-[ 80, 83) 0 0.0% 3.0%
-[ 83, 87) 4 4.0% 7.0%
-[ 87, 93) 5 5.0% 12.0% #
-[ 93, 100) 10 10.0% 22.0% #
-[100, 110) 52 52.0% 74.0% #####
-[110, 123) 26 26.0% 100.0% ###
-[123, 139) 0 0.0% 100.0%
-[139, 160) 0 0.0% 100.0%
-[160, 188) 0 0.0% 100.0%
-[188, 224) 0 0.0% 100.0%
-[224, 270) 0 0.0% 100.0%
-[270, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks___10B 50 200076160 ns/op 0.10 MB/s
+[210, 211) 1 3.3% 3.3%
+[211, 212) 0 0.0% 3.3%
+[212, 213) 0 0.0% 3.3%
+[213, 214) 0 0.0% 3.3%
+[214, 216) 2 6.7% 10.0% #
+[216, 219) 8 26.7% 36.7% ###
+[219, 222) 8 26.7% 63.3% ###
+[222, 226) 5 16.7% 80.0% ##
+[226, 232) 0 0.0% 80.0%
+[232, 239) 5 16.7% 96.7% ##
+[239, 248) 1 3.3% 100.0%
+[248, 260) 0 0.0% 100.0%
+[260, 275) 0 0.0% 100.0%
+[275, 294) 0 0.0% 100.0%
+[294, 318) 0 0.0% 100.0%
+[318, 348) 0 0.0% 100.0%
+[348, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__100B-2 50 125690815 ns/op 1.59 MB/s
Histogram (unit: ms)
-Count: 50 Min: 190 Max: 219 Avg: 199.56
+Count: 50 Min: 117 Max: 142 Avg: 125.22
------------------------------------------------------------
-[190, 191) 2 4.0% 4.0%
-[191, 192) 3 6.0% 10.0% #
-[192, 193) 5 10.0% 20.0% #
-[193, 194) 2 4.0% 24.0%
-[194, 196) 8 16.0% 40.0% ##
-[196, 199) 8 16.0% 56.0% ##
-[199, 202) 4 8.0% 64.0% #
-[202, 206) 7 14.0% 78.0% #
-[206, 212) 7 14.0% 92.0% #
-[212, 219) 3 6.0% 98.0% #
-[219, 228) 1 2.0% 100.0%
-[228, 239) 0 0.0% 100.0%
-[239, 253) 0 0.0% 100.0%
-[253, 271) 0 0.0% 100.0%
-[271, 294) 0 0.0% 100.0%
-[294, 322) 0 0.0% 100.0%
-[322, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks___10B-2 100 112141677 ns/op 0.18 MB/s
+[117, 118) 4 8.0% 8.0% #
+[118, 119) 1 2.0% 10.0%
+[119, 120) 1 2.0% 12.0%
+[120, 121) 8 16.0% 28.0% ##
+[121, 123) 9 18.0% 46.0% ##
+[123, 125) 9 18.0% 64.0% ##
+[125, 128) 6 12.0% 76.0% #
+[128, 132) 2 4.0% 80.0%
+[132, 137) 5 10.0% 90.0% #
+[137, 143) 5 10.0% 100.0% #
+[143, 151) 0 0.0% 100.0%
+[151, 161) 0 0.0% 100.0%
+[161, 174) 0 0.0% 100.0%
+[174, 190) 0 0.0% 100.0%
+[190, 210) 0 0.0% 100.0%
+[210, 234) 0 0.0% 100.0%
+[234, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___1KB 30 251956982 ns/op 7.94 MB/s
Histogram (unit: ms)
-Count: 100 Min: 102 Max: 125 Avg: 111.64
+Count: 30 Min: 238 Max: 266 Avg: 251.50
------------------------------------------------------------
-[102, 103) 1 1.0% 1.0%
-[103, 104) 2 2.0% 3.0%
-[104, 105) 2 2.0% 5.0%
-[105, 106) 9 9.0% 14.0% #
-[106, 108) 13 13.0% 27.0% #
-[108, 110) 22 22.0% 49.0% ##
-[110, 113) 15 15.0% 64.0% ##
-[113, 117) 13 13.0% 77.0% #
-[117, 122) 11 11.0% 88.0% #
-[122, 128) 12 12.0% 100.0% #
-[128, 136) 0 0.0% 100.0%
-[136, 145) 0 0.0% 100.0%
-[145, 157) 0 0.0% 100.0%
-[157, 172) 0 0.0% 100.0%
-[172, 190) 0 0.0% 100.0%
-[190, 212) 0 0.0% 100.0%
-[212, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks__100B 50 227795062 ns/op 0.88 MB/s
+[238, 239) 1 3.3% 3.3%
+[239, 240) 0 0.0% 3.3%
+[240, 241) 1 3.3% 6.7%
+[241, 242) 0 0.0% 6.7%
+[242, 244) 3 10.0% 16.7% #
+[244, 247) 7 23.3% 40.0% ##
+[247, 250) 3 10.0% 50.0% #
+[250, 254) 3 10.0% 60.0% #
+[254, 259) 1 3.3% 63.3%
+[259, 266) 10 33.3% 96.7% ###
+[266, 275) 1 3.3% 100.0%
+[275, 286) 0 0.0% 100.0%
+[286, 300) 0 0.0% 100.0%
+[300, 317) 0 0.0% 100.0%
+[317, 339) 0 0.0% 100.0%
+[339, 366) 0 0.0% 100.0%
+[366, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___1KB-2 50 144214400 ns/op 13.87 MB/s
Histogram (unit: ms)
-Count: 50 Min: 216 Max: 251 Avg: 227.34
+Count: 50 Min: 130 Max: 158 Avg: 143.70
------------------------------------------------------------
-[216, 217) 1 2.0% 2.0%
-[217, 218) 1 2.0% 4.0%
-[218, 219) 2 4.0% 8.0%
-[219, 221) 4 8.0% 16.0% #
-[221, 223) 7 14.0% 30.0% #
-[223, 226) 12 24.0% 54.0% ##
-[226, 230) 6 12.0% 66.0% #
-[230, 235) 9 18.0% 84.0% ##
-[235, 241) 5 10.0% 94.0% #
-[241, 249) 2 4.0% 98.0%
-[249, 259) 1 2.0% 100.0%
-[259, 272) 0 0.0% 100.0%
-[272, 289) 0 0.0% 100.0%
-[289, 310) 0 0.0% 100.0%
-[310, 337) 0 0.0% 100.0%
-[337, 371) 0 0.0% 100.0%
-[371, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks__100B-2 100 127584568 ns/op 1.57 MB/s
+[130, 131) 1 2.0% 2.0%
+[131, 132) 0 0.0% 2.0%
+[132, 133) 1 2.0% 4.0%
+[133, 134) 6 12.0% 16.0% #
+[134, 136) 6 12.0% 28.0% #
+[136, 139) 4 8.0% 36.0% #
+[139, 142) 6 12.0% 48.0% #
+[142, 146) 1 2.0% 50.0%
+[146, 151) 13 26.0% 76.0% ###
+[151, 158) 9 18.0% 94.0% ##
+[158, 167) 3 6.0% 100.0% #
+[167, 178) 0 0.0% 100.0%
+[178, 192) 0 0.0% 100.0%
+[192, 209) 0 0.0% 100.0%
+[209, 231) 0 0.0% 100.0%
+[231, 258) 0 0.0% 100.0%
+[258, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__10KB 20 474946063 ns/op 42.11 MB/s
Histogram (unit: ms)
-Count: 100 Min: 117 Max: 143 Avg: 127.04
+Count: 20 Min: 458 Max: 492 Avg: 474.60
------------------------------------------------------------
-[117, 118) 1 1.0% 1.0%
-[118, 119) 1 1.0% 2.0%
-[119, 120) 0 0.0% 2.0%
-[120, 121) 6 6.0% 8.0% #
-[121, 123) 23 23.0% 31.0% ##
-[123, 125) 22 22.0% 53.0% ##
-[125, 128) 10 10.0% 63.0% #
-[128, 132) 7 7.0% 70.0% #
-[132, 137) 20 20.0% 90.0% ##
-[137, 144) 10 10.0% 100.0% #
-[144, 152) 0 0.0% 100.0%
-[152, 162) 0 0.0% 100.0%
-[162, 175) 0 0.0% 100.0%
-[175, 191) 0 0.0% 100.0%
-[191, 211) 0 0.0% 100.0%
-[211, 236) 0 0.0% 100.0%
-[236, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks___1KB 50 260678247 ns/op 7.67 MB/s
+[458, 459) 1 5.0% 5.0% #
+[459, 460) 0 0.0% 5.0%
+[460, 461) 1 5.0% 10.0% #
+[461, 463) 3 15.0% 25.0% ##
+[463, 465) 1 5.0% 30.0% #
+[465, 468) 4 20.0% 50.0% ##
+[468, 472) 0 0.0% 50.0%
+[472, 477) 0 0.0% 50.0%
+[477, 483) 1 5.0% 55.0% #
+[483, 491) 8 40.0% 95.0% ####
+[491, 501) 1 5.0% 100.0% #
+[501, 514) 0 0.0% 100.0%
+[514, 530) 0 0.0% 100.0%
+[530, 551) 0 0.0% 100.0%
+[551, 577) 0 0.0% 100.0%
+[577, 610) 0 0.0% 100.0%
+[610, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__10KB-2 30 267531367 ns/op 74.76 MB/s
Histogram (unit: ms)
-Count: 50 Min: 243 Max: 291 Avg: 260.18
+Count: 30 Min: 250 Max: 294 Avg: 267.07
------------------------------------------------------------
-[243, 244) 2 4.0% 4.0%
-[244, 245) 0 0.0% 4.0%
-[245, 246) 2 4.0% 8.0%
-[246, 248) 1 2.0% 10.0%
-[248, 250) 5 10.0% 20.0% #
-[250, 253) 5 10.0% 30.0% #
-[253, 257) 5 10.0% 40.0% #
-[257, 263) 7 14.0% 54.0% #
-[263, 270) 17 34.0% 88.0% ###
-[270, 280) 3 6.0% 94.0% #
-[280, 293) 3 6.0% 100.0% #
-[293, 310) 0 0.0% 100.0%
-[310, 332) 0 0.0% 100.0%
-[332, 360) 0 0.0% 100.0%
-[360, 397) 0 0.0% 100.0%
-[397, 444) 0 0.0% 100.0%
-[444, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks___1KB-2 100 147406551 ns/op 13.57 MB/s
-Histogram (unit: ms)
-Count: 100 Min: 134 Max: 160 Avg: 146.88
-------------------------------------------------------------
-[134, 135) 3 3.0% 3.0%
-[135, 136) 1 1.0% 4.0%
-[136, 137) 5 5.0% 9.0% #
-[137, 138) 3 3.0% 12.0%
-[138, 140) 8 8.0% 20.0% #
-[140, 142) 6 6.0% 26.0% #
-[142, 145) 12 12.0% 38.0% #
-[145, 149) 13 13.0% 51.0% #
-[149, 154) 31 31.0% 82.0% ###
-[154, 161) 18 18.0% 100.0% ##
-[161, 169) 0 0.0% 100.0%
-[169, 179) 0 0.0% 100.0%
-[179, 192) 0 0.0% 100.0%
-[192, 208) 0 0.0% 100.0%
-[208, 228) 0 0.0% 100.0%
-[228, 253) 0 0.0% 100.0%
-[253, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks__10KB 20 484028853 ns/op 41.32 MB/s
-Histogram (unit: ms)
-Count: 20 Min: 468 Max: 501 Avg: 483.50
-------------------------------------------------------------
-[468, 469) 1 5.0% 5.0% #
-[469, 470) 1 5.0% 10.0% #
-[470, 471) 0 0.0% 10.0%
-[471, 473) 0 0.0% 10.0%
-[473, 475) 1 5.0% 15.0% #
-[475, 478) 2 10.0% 25.0% #
-[478, 482) 2 10.0% 35.0% #
-[482, 487) 7 35.0% 70.0% ####
-[487, 493) 4 20.0% 90.0% ##
-[493, 501) 1 5.0% 95.0% #
-[501, 511) 1 5.0% 100.0% #
-[511, 523) 0 0.0% 100.0%
-[523, 539) 0 0.0% 100.0%
-[539, 559) 0 0.0% 100.0%
-[559, 585) 0 0.0% 100.0%
-[585, 618) 0 0.0% 100.0%
-[618, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks__10KB-2 50 255874182 ns/op 78.16 MB/s
-Histogram (unit: ms)
-Count: 50 Min: 239 Max: 268 Avg: 255.42
-------------------------------------------------------------
-[239, 240) 1 2.0% 2.0%
-[240, 241) 0 0.0% 2.0%
-[241, 242) 0 0.0% 2.0%
-[242, 243) 1 2.0% 4.0%
-[243, 245) 1 2.0% 6.0%
-[245, 248) 4 8.0% 14.0% #
-[248, 251) 2 4.0% 18.0%
-[251, 255) 5 10.0% 28.0% #
-[255, 261) 29 58.0% 86.0% ######
-[261, 268) 6 12.0% 98.0% #
-[268, 277) 1 2.0% 100.0%
-[277, 288) 0 0.0% 100.0%
-[288, 302) 0 0.0% 100.0%
-[302, 320) 0 0.0% 100.0%
-[320, 343) 0 0.0% 100.0%
-[343, 371) 0 0.0% 100.0%
-[371, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks_100KB 5 2464952174 ns/op 81.14 MB/s
+[250, 251) 1 3.3% 3.3%
+[251, 252) 1 3.3% 6.7%
+[252, 253) 0 0.0% 6.7%
+[253, 255) 0 0.0% 6.7%
+[255, 257) 2 6.7% 13.3% #
+[257, 260) 2 6.7% 20.0% #
+[260, 264) 7 23.3% 43.3% ##
+[264, 269) 3 10.0% 53.3% #
+[269, 276) 8 26.7% 80.0% ###
+[276, 285) 5 16.7% 96.7% ##
+[285, 297) 1 3.3% 100.0%
+[297, 313) 0 0.0% 100.0%
+[313, 333) 0 0.0% 100.0%
+[333, 359) 0 0.0% 100.0%
+[359, 393) 0 0.0% 100.0%
+[393, 437) 0 0.0% 100.0%
+[437, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks_100KB 2 2675372295 ns/op 74.76 MB/s
Histogram (unit: s)
-Count: 5 Min: 2 Max: 2 Avg: 2.00
+Count: 2 Min: 2 Max: 2 Avg: 2.00
------------------------------------------------------------
-[ 2, 3) 5 100.0% 100.0% ##########
+[ 2, 3) 2 100.0% 100.0% ##########
[ 3, 3) 0 0.0% 100.0%
[ 3, 3) 0 0.0% 100.0%
[ 3, 3) 0 0.0% 100.0%
@@ -1353,7 +1353,7 @@
[ 3, 3) 0 0.0% 100.0%
[ 3, 3) 0 0.0% 100.0%
[ 3, inf) 0 0.0% 100.0%
-Benchmark___1K_chunks_100KB-2 5 1336699604 ns/op 149.62 MB/s
+Benchmark___1K_chunks_100KB-2 5 1421481350 ns/op 140.70 MB/s
Histogram (unit: s)
Count: 5 Min: 1 Max: 1 Avg: 1.00
------------------------------------------------------------
@@ -1378,28 +1378,7 @@
================================================================================
Echo streaming RPC (Per chunk)
================================================================================
-Benchmark__per_chunk____1B 50000 233075 ns/op 0.01 MB/s
-Histogram (unit: s)
-Count: 1 Min: 11 Max: 11 Avg: 11.00
-------------------------------------------------------------
-[ 11, 12) 1 100.0% 100.0% ##########
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, 12) 0 0.0% 100.0%
-[ 12, inf) 0 0.0% 100.0%
-Benchmark__per_chunk____1B-2 50000 177314 ns/op 0.01 MB/s
+Benchmark__per_chunk____1B 50000 163939 ns/op 0.01 MB/s
Histogram (unit: s)
Count: 1 Min: 8 Max: 8 Avg: 8.00
------------------------------------------------------------
@@ -1420,49 +1399,7 @@
[ 9, 9) 0 0.0% 100.0%
[ 9, 9) 0 0.0% 100.0%
[ 9, inf) 0 0.0% 100.0%
-Benchmark__per_chunk___10B 20000 519996 ns/op 0.04 MB/s
-Histogram (unit: s)
-Count: 1 Min: 10 Max: 10 Avg: 10.00
-------------------------------------------------------------
-[ 10, 11) 1 100.0% 100.0% ##########
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, inf) 0 0.0% 100.0%
-Benchmark__per_chunk___10B-2 50000 338254 ns/op 0.06 MB/s
-Histogram (unit: s)
-Count: 1 Min: 16 Max: 16 Avg: 16.00
-------------------------------------------------------------
-[ 16, 17) 1 100.0% 100.0% ##########
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, 17) 0 0.0% 100.0%
-[ 17, inf) 0 0.0% 100.0%
-Benchmark__per_chunk__100B 10000 573593 ns/op 0.35 MB/s
+Benchmark__per_chunk____1B-2 50000 118409 ns/op 0.02 MB/s
Histogram (unit: s)
Count: 1 Min: 5 Max: 5 Avg: 5.00
------------------------------------------------------------
@@ -1483,70 +1420,112 @@
[ 6, 6) 0 0.0% 100.0%
[ 6, 6) 0 0.0% 100.0%
[ 6, inf) 0 0.0% 100.0%
-Benchmark__per_chunk__100B-2 50000 267646 ns/op 0.75 MB/s
+Benchmark__per_chunk___10B 20000 321908 ns/op 0.06 MB/s
Histogram (unit: s)
-Count: 1 Min: 13 Max: 13 Avg: 13.00
+Count: 1 Min: 6 Max: 6 Avg: 6.00
------------------------------------------------------------
-[ 13, 14) 1 100.0% 100.0% ##########
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, inf) 0 0.0% 100.0%
-Benchmark__per_chunk___1KB 20000 514359 ns/op 3.89 MB/s
+[ 6, 7) 1 100.0% 100.0% ##########
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, inf) 0 0.0% 100.0%
+Benchmark__per_chunk___10B-2 50000 176818 ns/op 0.11 MB/s
Histogram (unit: s)
-Count: 1 Min: 10 Max: 10 Avg: 10.00
+Count: 1 Min: 8 Max: 8 Avg: 8.00
------------------------------------------------------------
-[ 10, 11) 1 100.0% 100.0% ##########
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, 11) 0 0.0% 100.0%
-[ 11, inf) 0 0.0% 100.0%
-Benchmark__per_chunk___1KB-2 50000 275305 ns/op 7.26 MB/s
+[ 8, 9) 1 100.0% 100.0% ##########
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, inf) 0 0.0% 100.0%
+Benchmark__per_chunk__100B 20000 411514 ns/op 0.49 MB/s
Histogram (unit: s)
-Count: 1 Min: 13 Max: 13 Avg: 13.00
+Count: 1 Min: 8 Max: 8 Avg: 8.00
------------------------------------------------------------
-[ 13, 14) 1 100.0% 100.0% ##########
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, 14) 0 0.0% 100.0%
-[ 14, inf) 0 0.0% 100.0%
-Benchmark__per_chunk__10KB 10000 703176 ns/op 28.44 MB/s
+[ 8, 9) 1 100.0% 100.0% ##########
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, inf) 0 0.0% 100.0%
+Benchmark__per_chunk__100B-2 30000 231565 ns/op 0.86 MB/s
+Histogram (unit: s)
+Count: 1 Min: 6 Max: 6 Avg: 6.00
+------------------------------------------------------------
+[ 6, 7) 1 100.0% 100.0% ##########
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, inf) 0 0.0% 100.0%
+Benchmark__per_chunk___1KB 20000 423999 ns/op 4.72 MB/s
+Histogram (unit: s)
+Count: 1 Min: 8 Max: 8 Avg: 8.00
+------------------------------------------------------------
+[ 8, 9) 1 100.0% 100.0% ##########
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, 9) 0 0.0% 100.0%
+[ 9, inf) 0 0.0% 100.0%
+Benchmark__per_chunk___1KB-2 30000 248721 ns/op 8.04 MB/s
Histogram (unit: s)
Count: 1 Min: 7 Max: 7 Avg: 7.00
------------------------------------------------------------
@@ -1567,7 +1546,49 @@
[ 8, 8) 0 0.0% 100.0%
[ 8, 8) 0 0.0% 100.0%
[ 8, inf) 0 0.0% 100.0%
-Benchmark__per_chunk__10KB-2 20000 395105 ns/op 50.62 MB/s
+Benchmark__per_chunk__10KB 10000 631536 ns/op 31.67 MB/s
+Histogram (unit: s)
+Count: 1 Min: 6 Max: 6 Avg: 6.00
+------------------------------------------------------------
+[ 6, 7) 1 100.0% 100.0% ##########
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, inf) 0 0.0% 100.0%
+Benchmark__per_chunk__10KB-2 20000 346868 ns/op 57.66 MB/s
+Histogram (unit: s)
+Count: 1 Min: 6 Max: 6 Avg: 6.00
+------------------------------------------------------------
+[ 6, 7) 1 100.0% 100.0% ##########
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, inf) 0 0.0% 100.0%
+Benchmark__per_chunk_100KB 3000 2613430 ns/op 76.53 MB/s
Histogram (unit: s)
Count: 1 Min: 7 Max: 7 Avg: 7.00
------------------------------------------------------------
@@ -1588,338 +1609,107 @@
[ 8, 8) 0 0.0% 100.0%
[ 8, 8) 0 0.0% 100.0%
[ 8, inf) 0 0.0% 100.0%
-Benchmark__per_chunk_100KB 5000 2834149 ns/op 70.57 MB/s
+Benchmark__per_chunk_100KB-2 5000 1369809 ns/op 146.01 MB/s
Histogram (unit: s)
-Count: 1 Min: 14 Max: 14 Avg: 14.00
+Count: 1 Min: 6 Max: 6 Avg: 6.00
------------------------------------------------------------
-[ 14, 15) 1 100.0% 100.0% ##########
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, inf) 0 0.0% 100.0%
-Benchmark__per_chunk_100KB-2 10000 1461822 ns/op 136.82 MB/s
-Histogram (unit: s)
-Count: 1 Min: 14 Max: 14 Avg: 14.00
-------------------------------------------------------------
-[ 14, 15) 1 100.0% 100.0% ##########
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, 15) 0 0.0% 100.0%
-[ 15, inf) 0 0.0% 100.0%
+[ 6, 7) 1 100.0% 100.0% ##########
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, 7) 0 0.0% 100.0%
+[ 7, inf) 0 0.0% 100.0%
================================================================================
Echo RPC when multiplexing with Echo streaming RPC
================================================================================
-Benchmark___10B_mux__100_chunks___10B 500 22049071 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___10B 500 18817141 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 500 Min: 10 Max: 26 Avg: 21.57
+Count: 500 Min: 7 Max: 26 Avg: 18.28
------------------------------------------------------------
-[ 10, 11) 24 4.8% 4.8%
-[ 11, 12) 20 4.0% 8.8%
-[ 12, 13) 0 0.0% 8.8%
-[ 13, 14) 1 0.2% 9.0%
-[ 14, 16) 1 0.2% 9.2%
-[ 16, 18) 44 8.8% 18.0% #
-[ 18, 21) 1 0.2% 18.2%
-[ 21, 24) 255 51.0% 69.2% #####
-[ 24, 28) 154 30.8% 100.0% ###
-[ 28, 33) 0 0.0% 100.0%
-[ 33, 39) 0 0.0% 100.0%
-[ 39, 46) 0 0.0% 100.0%
-[ 46, 55) 0 0.0% 100.0%
-[ 55, 66) 0 0.0% 100.0%
-[ 66, 79) 0 0.0% 100.0%
-[ 79, 95) 0 0.0% 100.0%
-[ 95, inf) 0 0.0% 100.0%
-Benchmark___10B_mux__100_chunks___10B-2 2000 4734244 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 1 Max: 11 Avg: 4.29
-------------------------------------------------------------
-[ 1, 2) 1 0.1% 0.1%
-[ 2, 3) 681 34.1% 34.1% ###
-[ 3, 4) 457 22.9% 57.0% ##
-[ 4, 5) 197 9.9% 66.8% #
-[ 5, 6) 120 6.0% 72.8% #
-[ 6, 8) 188 9.4% 82.2% #
-[ 8, 10) 230 11.5% 93.7% #
-[ 10, 12) 126 6.3% 100.0% #
-[ 12, 15) 0 0.0% 100.0%
-[ 15, 18) 0 0.0% 100.0%
-[ 18, 22) 0 0.0% 100.0%
-[ 22, 27) 0 0.0% 100.0%
-[ 27, 33) 0 0.0% 100.0%
-[ 33, 40) 0 0.0% 100.0%
-[ 40, 48) 0 0.0% 100.0%
-[ 48, 57) 0 0.0% 100.0%
-[ 57, inf) 0 0.0% 100.0%
-Benchmark___10B_mux__100_chunks__100B 500 23746639 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 500 Min: 6 Max: 28 Avg: 23.15
-------------------------------------------------------------
-[ 6, 7) 1 0.2% 0.2%
-[ 7, 8) 0 0.0% 0.2%
-[ 8, 9) 0 0.0% 0.2%
-[ 9, 10) 2 0.4% 0.6%
-[ 10, 12) 33 6.6% 7.2% #
-[ 12, 14) 5 1.0% 8.2%
-[ 14, 17) 8 1.6% 9.8%
-[ 17, 21) 44 8.8% 18.6% #
-[ 21, 26) 308 61.6% 80.2% ######
-[ 26, 32) 99 19.8% 100.0% ##
-[ 32, 39) 0 0.0% 100.0%
-[ 39, 48) 0 0.0% 100.0%
-[ 48, 59) 0 0.0% 100.0%
-[ 59, 73) 0 0.0% 100.0%
-[ 73, 90) 0 0.0% 100.0%
-[ 90, 111) 0 0.0% 100.0%
-[111, inf) 0 0.0% 100.0%
-Benchmark___10B_mux__100_chunks__100B-2 2000 5501514 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 1 Max: 13 Avg: 5.06
-------------------------------------------------------------
-[ 1, 2) 8 0.4% 0.4%
-[ 2, 3) 630 31.5% 31.9% ###
-[ 3, 4) 277 13.9% 45.8% #
-[ 4, 5) 229 11.5% 57.2% #
-[ 5, 6) 147 7.4% 64.5% #
-[ 6, 8) 223 11.2% 75.7% #
-[ 8, 10) 177 8.8% 84.6% #
-[ 10, 13) 291 14.6% 99.1% #
-[ 13, 16) 18 0.9% 100.0%
-[ 16, 20) 0 0.0% 100.0%
-[ 20, 25) 0 0.0% 100.0%
-[ 25, 31) 0 0.0% 100.0%
-[ 31, 38) 0 0.0% 100.0%
-[ 38, 46) 0 0.0% 100.0%
-[ 46, 56) 0 0.0% 100.0%
-[ 56, 67) 0 0.0% 100.0%
-[ 67, inf) 0 0.0% 100.0%
-Benchmark___10B_mux__100_chunks___1KB 500 25033793 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 500 Min: 9 Max: 31 Avg: 24.50
-------------------------------------------------------------
-[ 9, 10) 14 2.8% 2.8%
-[ 10, 11) 10 2.0% 4.8%
-[ 11, 12) 2 0.4% 5.2%
-[ 12, 13) 22 4.4% 9.6%
-[ 13, 15) 4 0.8% 10.4%
-[ 15, 17) 0 0.0% 10.4%
-[ 17, 20) 23 4.6% 15.0%
-[ 20, 24) 30 6.0% 21.0% #
-[ 24, 29) 381 76.2% 97.2% ########
-[ 29, 35) 14 2.8% 100.0%
-[ 35, 42) 0 0.0% 100.0%
-[ 42, 51) 0 0.0% 100.0%
-[ 51, 62) 0 0.0% 100.0%
-[ 62, 76) 0 0.0% 100.0%
-[ 76, 93) 0 0.0% 100.0%
-[ 93, 114) 0 0.0% 100.0%
-[114, inf) 0 0.0% 100.0%
-Benchmark___10B_mux__100_chunks___1KB-2 2000 5598670 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 2000 Min: 1 Max: 15 Avg: 5.11
-------------------------------------------------------------
-[ 1, 2) 318 15.9% 15.9% ##
-[ 2, 3) 460 23.0% 38.9% ##
-[ 3, 4) 186 9.3% 48.2% #
-[ 4, 5) 188 9.4% 57.6% #
-[ 5, 7) 231 11.6% 69.2% #
-[ 7, 9) 175 8.8% 77.9% #
-[ 9, 11) 132 6.6% 84.5% #
-[ 11, 14) 265 13.2% 97.8% #
-[ 14, 18) 45 2.2% 100.0%
-[ 18, 22) 0 0.0% 100.0%
-[ 22, 27) 0 0.0% 100.0%
-[ 27, 33) 0 0.0% 100.0%
-[ 33, 41) 0 0.0% 100.0%
-[ 41, 50) 0 0.0% 100.0%
-[ 50, 61) 0 0.0% 100.0%
-[ 61, 75) 0 0.0% 100.0%
-[ 75, inf) 0 0.0% 100.0%
-Benchmark___10B_mux___1K_chunks___10B 100 121659148 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 100 Min: 4 Max: 179 Avg: 121.14
-------------------------------------------------------------
-[ 4, 5) 1 1.0% 1.0%
-[ 5, 6) 0 0.0% 1.0%
-[ 6, 7) 0 0.0% 1.0%
-[ 7, 9) 0 0.0% 1.0%
-[ 9, 12) 0 0.0% 1.0%
-[ 12, 17) 0 0.0% 1.0%
-[ 17, 24) 0 0.0% 1.0%
-[ 24, 35) 1 1.0% 2.0%
-[ 35, 50) 7 7.0% 9.0% #
-[ 50, 72) 15 15.0% 24.0% ##
-[ 72, 103) 13 13.0% 37.0% #
-[103, 147) 22 22.0% 59.0% ##
-[147, 209) 41 41.0% 100.0% ####
-[209, 296) 0 0.0% 100.0%
-[296, 420) 0 0.0% 100.0%
-[420, 595) 0 0.0% 100.0%
-[595, inf) 0 0.0% 100.0%
-Benchmark___10B_mux___1K_chunks___10B-2 1000 7827224 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 2 Max: 50 Avg: 7.36
-------------------------------------------------------------
-[ 2, 3) 251 25.1% 25.1% ###
-[ 3, 4) 172 17.2% 42.3% ##
-[ 4, 5) 114 11.4% 53.7% #
-[ 5, 7) 148 14.8% 68.5% #
-[ 7, 9) 107 10.7% 79.2% #
-[ 9, 12) 58 5.8% 85.0% #
-[ 12, 16) 31 3.1% 88.1%
-[ 16, 22) 36 3.6% 91.7%
-[ 22, 29) 35 3.5% 95.2%
-[ 29, 39) 29 2.9% 98.1%
-[ 39, 52) 19 1.9% 100.0%
-[ 52, 69) 0 0.0% 100.0%
-[ 69, 91) 0 0.0% 100.0%
-[ 91, 119) 0 0.0% 100.0%
-[119, 156) 0 0.0% 100.0%
-[156, 203) 0 0.0% 100.0%
-[203, inf) 0 0.0% 100.0%
-Benchmark___10B_mux___1K_chunks__100B 100 141824661 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 100 Min: 12 Max: 207 Avg: 141.35
-------------------------------------------------------------
-[ 12, 13) 1 1.0% 1.0%
-[ 13, 14) 0 0.0% 1.0%
-[ 14, 16) 1 1.0% 2.0%
-[ 16, 18) 1 1.0% 3.0%
-[ 18, 22) 0 0.0% 3.0%
-[ 22, 27) 0 0.0% 3.0%
-[ 27, 35) 0 0.0% 3.0%
-[ 35, 46) 1 1.0% 4.0%
-[ 46, 62) 10 10.0% 14.0% #
-[ 62, 85) 16 16.0% 30.0% ##
-[ 85, 118) 0 0.0% 30.0%
-[118, 165) 27 27.0% 57.0% ###
-[165, 232) 43 43.0% 100.0% ####
-[232, 328) 0 0.0% 100.0%
-[328, 465) 0 0.0% 100.0%
-[465, 659) 0 0.0% 100.0%
-[659, inf) 0 0.0% 100.0%
-Benchmark___10B_mux___1K_chunks__100B-2 1000 11127970 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 1 Max: 70 Avg: 10.65
-------------------------------------------------------------
-[ 1, 2) 1 0.1% 0.1%
-[ 2, 3) 199 19.9% 20.0% ##
-[ 3, 4) 94 9.4% 29.4% #
-[ 4, 6) 196 19.6% 49.0% ##
-[ 6, 9) 192 19.2% 68.2% ##
-[ 9, 13) 147 14.7% 82.9% #
-[ 13, 18) 45 4.5% 87.4%
-[ 18, 25) 13 1.3% 88.7%
-[ 25, 34) 27 2.7% 91.4%
-[ 34, 46) 20 2.0% 93.4%
-[ 46, 62) 47 4.7% 98.1%
-[ 62, 84) 19 1.9% 100.0%
-[ 84, 113) 0 0.0% 100.0%
-[113, 152) 0 0.0% 100.0%
-[152, 204) 0 0.0% 100.0%
-[204, 272) 0 0.0% 100.0%
-[272, inf) 0 0.0% 100.0%
-Benchmark___10B_mux___1K_chunks___1KB 100 148589902 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 100 Min: 8 Max: 262 Avg: 148.08
-------------------------------------------------------------
-[ 8, 9) 1 1.0% 1.0%
-[ 9, 10) 1 1.0% 2.0%
-[ 10, 12) 1 1.0% 3.0%
-[ 12, 15) 0 0.0% 3.0%
-[ 15, 19) 3 3.0% 6.0%
-[ 19, 25) 1 1.0% 7.0%
-[ 25, 34) 1 1.0% 8.0%
-[ 34, 47) 0 0.0% 8.0%
-[ 47, 66) 5 5.0% 13.0% #
-[ 66, 93) 13 13.0% 26.0% #
-[ 93, 133) 16 16.0% 42.0% ##
-[133, 191) 24 24.0% 66.0% ##
-[191, 274) 34 34.0% 100.0% ###
-[274, 395) 0 0.0% 100.0%
-[395, 570) 0 0.0% 100.0%
-[570, 824) 0 0.0% 100.0%
-[824, inf) 0 0.0% 100.0%
-Benchmark___10B_mux___1K_chunks___1KB-2 1000 12616916 ns/op 0.00 MB/s
-Histogram (unit: ms)
-Count: 1000 Min: 1 Max: 84 Avg: 12.10
-------------------------------------------------------------
-[ 1, 2) 203 20.3% 20.3% ##
-[ 2, 3) 190 19.0% 39.3% ##
-[ 3, 4) 41 4.1% 43.4%
-[ 4, 6) 115 11.5% 54.9% #
-[ 6, 9) 149 14.9% 69.8% #
-[ 9, 13) 61 6.1% 75.9% #
-[ 13, 18) 63 6.3% 82.2% #
-[ 18, 25) 33 3.3% 85.5%
-[ 25, 35) 32 3.2% 88.7%
-[ 35, 49) 30 3.0% 91.7%
-[ 49, 68) 48 4.8% 96.5%
-[ 68, 93) 35 3.5% 100.0%
-[ 93, 127) 0 0.0% 100.0%
-[127, 173) 0 0.0% 100.0%
-[173, 234) 0 0.0% 100.0%
-[234, 317) 0 0.0% 100.0%
-[317, inf) 0 0.0% 100.0%
-Benchmark__100B_mux__100_chunks___10B 500 23895451 ns/op 0.01 MB/s
-Histogram (unit: ms)
-Count: 500 Min: 10 Max: 36 Avg: 23.35
-------------------------------------------------------------
-[ 10, 11) 3 0.6% 0.6%
-[ 11, 12) 3 0.6% 1.2%
-[ 12, 13) 17 3.4% 4.6%
-[ 13, 14) 1 0.2% 4.8%
-[ 14, 16) 14 2.8% 7.6%
-[ 16, 18) 10 2.0% 9.6%
-[ 18, 21) 12 2.4% 12.0%
-[ 21, 25) 252 50.4% 62.4% #####
-[ 25, 30) 180 36.0% 98.4% ####
-[ 30, 37) 8 1.6% 100.0%
+[ 7, 8) 41 8.2% 8.2% #
+[ 8, 9) 5 1.0% 9.2%
+[ 9, 10) 1 0.2% 9.4%
+[ 10, 11) 0 0.0% 9.4%
+[ 11, 13) 5 1.0% 10.4%
+[ 13, 15) 0 0.0% 10.4%
+[ 15, 18) 52 10.4% 20.8% #
+[ 18, 21) 329 65.8% 86.6% #######
+[ 21, 25) 66 13.2% 99.8% #
+[ 25, 30) 1 0.2% 100.0%
+[ 30, 37) 0 0.0% 100.0%
[ 37, 45) 0 0.0% 100.0%
[ 45, 55) 0 0.0% 100.0%
-[ 55, 68) 0 0.0% 100.0%
-[ 68, 84) 0 0.0% 100.0%
-[ 84, 104) 0 0.0% 100.0%
-[104, 129) 0 0.0% 100.0%
-[129, inf) 0 0.0% 100.0%
-Benchmark__100B_mux__100_chunks___10B-2 2000 5134742 ns/op 0.04 MB/s
+[ 55, 67) 0 0.0% 100.0%
+[ 67, 82) 0 0.0% 100.0%
+[ 82, 100) 0 0.0% 100.0%
+[100, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks___10B-2 1000 7104449 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 2 Max: 15 Avg: 4.65
+Count: 1000 Min: 2 Max: 13 Avg: 6.62
------------------------------------------------------------
-[ 2, 3) 710 35.5% 35.5% ####
-[ 3, 4) 328 16.4% 51.9% ##
-[ 4, 5) 190 9.5% 61.4% #
-[ 5, 6) 127 6.4% 67.8% #
-[ 6, 7) 131 6.6% 74.3% #
-[ 7, 9) 242 12.1% 86.4% #
-[ 9, 11) 145 7.2% 93.7% #
-[ 11, 14) 105 5.2% 98.9% #
-[ 14, 17) 22 1.1% 100.0%
+[ 2, 3) 89 8.9% 8.9% #
+[ 3, 4) 110 11.0% 19.9% #
+[ 4, 5) 108 10.8% 30.7% #
+[ 5, 6) 112 11.2% 41.9% #
+[ 6, 7) 77 7.7% 49.6% #
+[ 7, 9) 165 16.5% 66.1% ##
+[ 9, 11) 230 23.0% 89.1% ##
+[ 11, 14) 109 10.9% 100.0% #
+[ 14, 17) 0 0.0% 100.0%
+[ 17, 21) 0 0.0% 100.0%
+[ 21, 25) 0 0.0% 100.0%
+[ 25, 30) 0 0.0% 100.0%
+[ 30, 36) 0 0.0% 100.0%
+[ 36, 43) 0 0.0% 100.0%
+[ 43, 52) 0 0.0% 100.0%
+[ 52, 63) 0 0.0% 100.0%
+[ 63, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks__100B 300 21167617 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 300 Min: 6 Max: 26 Avg: 20.68
+------------------------------------------------------------
+[ 6, 7) 13 4.3% 4.3%
+[ 7, 8) 7 2.3% 6.7%
+[ 8, 9) 9 3.0% 9.7%
+[ 9, 10) 0 0.0% 9.7%
+[ 10, 12) 0 0.0% 9.7%
+[ 12, 14) 0 0.0% 9.7%
+[ 14, 17) 0 0.0% 9.7%
+[ 17, 21) 29 9.7% 19.3% #
+[ 21, 25) 237 79.0% 98.3% ########
+[ 25, 31) 5 1.7% 100.0%
+[ 31, 38) 0 0.0% 100.0%
+[ 38, 46) 0 0.0% 100.0%
+[ 46, 56) 0 0.0% 100.0%
+[ 56, 69) 0 0.0% 100.0%
+[ 69, 85) 0 0.0% 100.0%
+[ 85, 104) 0 0.0% 100.0%
+[104, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks__100B-2 1000 8372251 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 2 Max: 15 Avg: 7.88
+------------------------------------------------------------
+[ 2, 3) 67 6.7% 6.7% #
+[ 3, 4) 62 6.2% 12.9% #
+[ 4, 5) 83 8.3% 21.2% #
+[ 5, 6) 85 8.5% 29.7% #
+[ 6, 7) 92 9.2% 38.9% #
+[ 7, 9) 150 15.0% 53.9% ##
+[ 9, 11) 144 14.4% 68.3% #
+[ 11, 14) 307 30.7% 99.0% ###
+[ 14, 17) 10 1.0% 100.0%
[ 17, 21) 0 0.0% 100.0%
[ 21, 26) 0 0.0% 100.0%
[ 26, 32) 0 0.0% 100.0%
@@ -1928,40 +1718,250 @@
[ 48, 58) 0 0.0% 100.0%
[ 58, 70) 0 0.0% 100.0%
[ 70, inf) 0 0.0% 100.0%
-Benchmark__100B_mux__100_chunks__100B 500 25336809 ns/op 0.01 MB/s
+Benchmark___10B_mux__100_chunks___1KB 300 22817830 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 500 Min: 9 Max: 39 Avg: 24.84
+Count: 300 Min: 6 Max: 28 Avg: 22.30
------------------------------------------------------------
-[ 9, 10) 3 0.6% 0.6%
-[ 10, 11) 22 4.4% 5.0%
-[ 11, 12) 3 0.6% 5.6%
-[ 12, 13) 0 0.0% 5.6%
-[ 13, 15) 3 0.6% 6.2%
-[ 15, 18) 42 8.4% 14.6% #
-[ 18, 21) 10 2.0% 16.6%
-[ 21, 25) 218 43.6% 60.2% ####
-[ 25, 31) 61 12.2% 72.4% #
-[ 31, 38) 137 27.4% 99.8% ###
-[ 38, 47) 1 0.2% 100.0%
-[ 47, 59) 0 0.0% 100.0%
-[ 59, 74) 0 0.0% 100.0%
-[ 74, 93) 0 0.0% 100.0%
-[ 93, 116) 0 0.0% 100.0%
-[116, 145) 0 0.0% 100.0%
-[145, inf) 0 0.0% 100.0%
-Benchmark__100B_mux__100_chunks__100B-2 2000 6012040 ns/op 0.03 MB/s
+[ 6, 7) 15 5.0% 5.0% #
+[ 7, 8) 4 1.3% 6.3%
+[ 8, 9) 9 3.0% 9.3%
+[ 9, 10) 0 0.0% 9.3%
+[ 10, 12) 0 0.0% 9.3%
+[ 12, 14) 0 0.0% 9.3%
+[ 14, 17) 2 0.7% 10.0%
+[ 17, 21) 24 8.0% 18.0% #
+[ 21, 26) 207 69.0% 87.0% #######
+[ 26, 32) 39 13.0% 100.0% #
+[ 32, 39) 0 0.0% 100.0%
+[ 39, 48) 0 0.0% 100.0%
+[ 48, 59) 0 0.0% 100.0%
+[ 59, 73) 0 0.0% 100.0%
+[ 73, 90) 0 0.0% 100.0%
+[ 90, 111) 0 0.0% 100.0%
+[111, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks___1KB-2 1000 8831943 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 2 Max: 18 Avg: 5.53
+Count: 1000 Min: 1 Max: 17 Avg: 8.35
------------------------------------------------------------
-[ 2, 3) 595 29.8% 29.8% ###
-[ 3, 4) 213 10.7% 40.4% #
-[ 4, 5) 204 10.2% 50.6% #
-[ 5, 6) 168 8.4% 59.0% #
-[ 6, 8) 246 12.3% 71.3% #
-[ 8, 10) 248 12.4% 83.7% #
-[ 10, 13) 224 11.2% 94.9% #
-[ 13, 16) 73 3.7% 98.6%
-[ 16, 20) 29 1.5% 100.0%
+[ 1, 2) 12 1.2% 1.2%
+[ 2, 3) 155 15.5% 16.7% ##
+[ 3, 4) 59 5.9% 22.6% #
+[ 4, 5) 48 4.8% 27.4%
+[ 5, 7) 134 13.4% 40.8% #
+[ 7, 9) 91 9.1% 49.9% #
+[ 9, 12) 132 13.2% 63.1% #
+[ 12, 15) 328 32.8% 95.9% ###
+[ 15, 19) 41 4.1% 100.0%
+[ 19, 24) 0 0.0% 100.0%
+[ 24, 30) 0 0.0% 100.0%
+[ 30, 37) 0 0.0% 100.0%
+[ 37, 46) 0 0.0% 100.0%
+[ 46, 57) 0 0.0% 100.0%
+[ 57, 70) 0 0.0% 100.0%
+[ 70, 86) 0 0.0% 100.0%
+[ 86, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___10B 100 123136622 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 5 Max: 173 Avg: 122.60
+------------------------------------------------------------
+[ 5, 6) 1 1.0% 1.0%
+[ 6, 7) 0 0.0% 1.0%
+[ 7, 8) 0 0.0% 1.0%
+[ 8, 10) 1 1.0% 2.0%
+[ 10, 13) 0 0.0% 2.0%
+[ 13, 18) 1 1.0% 3.0%
+[ 18, 25) 0 0.0% 3.0%
+[ 25, 35) 1 1.0% 4.0%
+[ 35, 50) 2 2.0% 6.0%
+[ 50, 71) 11 11.0% 17.0% #
+[ 71, 101) 22 22.0% 39.0% ##
+[101, 143) 14 14.0% 53.0% #
+[143, 203) 47 47.0% 100.0% #####
+[203, 287) 0 0.0% 100.0%
+[287, 406) 0 0.0% 100.0%
+[406, 574) 0 0.0% 100.0%
+[574, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___10B-2 300 22274569 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 300 Min: 2 Max: 96 Avg: 21.75
+------------------------------------------------------------
+[ 2, 3) 8 2.7% 2.7%
+[ 3, 4) 23 7.7% 10.3% #
+[ 4, 5) 31 10.3% 20.7% #
+[ 5, 7) 47 15.7% 36.3% ##
+[ 7, 10) 74 24.7% 61.0% ##
+[ 10, 14) 33 11.0% 72.0% #
+[ 14, 20) 12 4.0% 76.0%
+[ 20, 28) 7 2.3% 78.3%
+[ 28, 39) 1 0.3% 78.7%
+[ 39, 54) 4 1.3% 80.0%
+[ 54, 74) 20 6.7% 86.7% #
+[ 74, 101) 40 13.3% 100.0% #
+[101, 138) 0 0.0% 100.0%
+[138, 189) 0 0.0% 100.0%
+[189, 258) 0 0.0% 100.0%
+[258, 352) 0 0.0% 100.0%
+[352, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks__100B 100 143814971 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 14 Max: 204 Avg: 143.32
+------------------------------------------------------------
+[ 14, 15) 1 1.0% 1.0%
+[ 15, 16) 0 0.0% 1.0%
+[ 16, 18) 0 0.0% 1.0%
+[ 18, 20) 0 0.0% 1.0%
+[ 20, 24) 0 0.0% 1.0%
+[ 24, 29) 0 0.0% 1.0%
+[ 29, 37) 0 0.0% 1.0%
+[ 37, 48) 0 0.0% 1.0%
+[ 48, 64) 11 11.0% 12.0% #
+[ 64, 87) 15 15.0% 27.0% ##
+[ 87, 120) 2 2.0% 29.0%
+[120, 166) 26 26.0% 55.0% ###
+[166, 232) 45 45.0% 100.0% #####
+[232, 326) 0 0.0% 100.0%
+[326, 459) 0 0.0% 100.0%
+[459, 649) 0 0.0% 100.0%
+[649, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks__100B-2 200 34125016 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 200 Min: 2 Max: 114 Avg: 33.62
+------------------------------------------------------------
+[ 2, 3) 10 5.0% 5.0% #
+[ 3, 4) 6 3.0% 8.0%
+[ 4, 5) 10 5.0% 13.0% #
+[ 5, 7) 21 10.5% 23.5% #
+[ 7, 10) 26 13.0% 36.5% #
+[ 10, 14) 34 17.0% 53.5% ##
+[ 14, 20) 27 13.5% 67.0% #
+[ 20, 29) 7 3.5% 70.5%
+[ 29, 41) 1 0.5% 71.0%
+[ 41, 57) 2 1.0% 72.0%
+[ 57, 80) 7 3.5% 75.5%
+[ 80, 111) 45 22.5% 98.0% ##
+[111, 154) 4 2.0% 100.0%
+[154, 213) 0 0.0% 100.0%
+[213, 294) 0 0.0% 100.0%
+[294, 405) 0 0.0% 100.0%
+[405, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___1KB 100 136987808 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 5 Max: 233 Avg: 136.46
+------------------------------------------------------------
+[ 5, 6) 1 1.0% 1.0%
+[ 6, 7) 0 0.0% 1.0%
+[ 7, 9) 1 1.0% 2.0%
+[ 9, 11) 1 1.0% 3.0%
+[ 11, 15) 1 1.0% 4.0%
+[ 15, 21) 3 3.0% 7.0%
+[ 21, 29) 0 0.0% 7.0%
+[ 29, 41) 0 0.0% 7.0%
+[ 41, 59) 3 3.0% 10.0%
+[ 59, 84) 11 11.0% 21.0% #
+[ 84, 121) 24 24.0% 45.0% ##
+[121, 174) 25 25.0% 70.0% ###
+[174, 250) 30 30.0% 100.0% ###
+[250, 360) 0 0.0% 100.0%
+[360, 518) 0 0.0% 100.0%
+[518, 746) 0 0.0% 100.0%
+[746, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___1KB-2 200 35831221 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 200 Min: 2 Max: 123 Avg: 35.40
+------------------------------------------------------------
+[ 2, 3) 21 10.5% 10.5% #
+[ 3, 4) 12 6.0% 16.5% #
+[ 4, 5) 4 2.0% 18.5%
+[ 5, 7) 8 4.0% 22.5%
+[ 7, 10) 18 9.0% 31.5% #
+[ 10, 14) 21 10.5% 42.0% #
+[ 14, 20) 21 10.5% 52.5% #
+[ 20, 29) 7 3.5% 56.0%
+[ 29, 41) 11 5.5% 61.5% #
+[ 41, 58) 23 11.5% 73.0% #
+[ 58, 82) 28 14.0% 87.0% #
+[ 82, 115) 25 12.5% 99.5% #
+[115, 161) 1 0.5% 100.0%
+[161, 224) 0 0.0% 100.0%
+[224, 311) 0 0.0% 100.0%
+[311, 432) 0 0.0% 100.0%
+[432, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks___10B 500 20748811 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 6 Max: 27 Avg: 20.33
+------------------------------------------------------------
+[ 6, 7) 1 0.2% 0.2%
+[ 7, 8) 16 3.2% 3.4%
+[ 8, 9) 3 0.6% 4.0%
+[ 9, 10) 6 1.2% 5.2%
+[ 10, 12) 4 0.8% 6.0%
+[ 12, 14) 0 0.0% 6.0%
+[ 14, 17) 7 1.4% 7.4%
+[ 17, 21) 181 36.2% 43.6% ####
+[ 21, 26) 278 55.6% 99.2% ######
+[ 26, 32) 4 0.8% 100.0%
+[ 32, 39) 0 0.0% 100.0%
+[ 39, 48) 0 0.0% 100.0%
+[ 48, 59) 0 0.0% 100.0%
+[ 59, 72) 0 0.0% 100.0%
+[ 72, 89) 0 0.0% 100.0%
+[ 89, 109) 0 0.0% 100.0%
+[109, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks___10B-2 1000 7604070 ns/op 0.03 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 2 Max: 15 Avg: 7.10
+------------------------------------------------------------
+[ 2, 3) 49 4.9% 4.9%
+[ 3, 4) 90 9.0% 13.9% #
+[ 4, 5) 124 12.4% 26.3% #
+[ 5, 6) 117 11.7% 38.0% #
+[ 6, 7) 100 10.0% 48.0% #
+[ 7, 9) 185 18.5% 66.5% ##
+[ 9, 11) 169 16.9% 83.4% ##
+[ 11, 14) 141 14.1% 97.5% #
+[ 14, 17) 25 2.5% 100.0%
+[ 17, 21) 0 0.0% 100.0%
+[ 21, 26) 0 0.0% 100.0%
+[ 26, 32) 0 0.0% 100.0%
+[ 32, 39) 0 0.0% 100.0%
+[ 39, 48) 0 0.0% 100.0%
+[ 48, 58) 0 0.0% 100.0%
+[ 58, 70) 0 0.0% 100.0%
+[ 70, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks__100B 300 21922577 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 300 Min: 6 Max: 30 Avg: 21.45
+------------------------------------------------------------
+[ 6, 7) 17 5.7% 5.7% #
+[ 7, 8) 2 0.7% 6.3%
+[ 8, 9) 4 1.3% 7.7%
+[ 9, 10) 0 0.0% 7.7%
+[ 10, 12) 9 3.0% 10.7%
+[ 12, 14) 2 0.7% 11.3%
+[ 14, 17) 1 0.3% 11.7%
+[ 17, 21) 26 8.7% 20.3% #
+[ 21, 26) 144 48.0% 68.3% #####
+[ 26, 32) 95 31.7% 100.0% ###
+[ 32, 40) 0 0.0% 100.0%
+[ 40, 50) 0 0.0% 100.0%
+[ 50, 62) 0 0.0% 100.0%
+[ 62, 77) 0 0.0% 100.0%
+[ 77, 96) 0 0.0% 100.0%
+[ 96, 120) 0 0.0% 100.0%
+[120, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks__100B-2 1000 9164254 ns/op 0.02 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 2 Max: 18 Avg: 8.66
+------------------------------------------------------------
+[ 2, 3) 35 3.5% 3.5%
+[ 3, 4) 44 4.4% 7.9%
+[ 4, 5) 78 7.8% 15.7% #
+[ 5, 6) 102 10.2% 25.9% #
+[ 6, 8) 168 16.8% 42.7% ##
+[ 8, 10) 155 15.5% 58.2% ##
+[ 10, 13) 236 23.6% 81.8% ##
+[ 13, 16) 137 13.7% 95.5% #
+[ 16, 20) 45 4.5% 100.0%
[ 20, 25) 0 0.0% 100.0%
[ 25, 31) 0 0.0% 100.0%
[ 31, 38) 0 0.0% 100.0%
@@ -1970,171 +1970,171 @@
[ 58, 71) 0 0.0% 100.0%
[ 71, 87) 0 0.0% 100.0%
[ 87, inf) 0 0.0% 100.0%
-Benchmark__100B_mux__100_chunks___1KB 500 27144821 ns/op 0.01 MB/s
+Benchmark__100B_mux__100_chunks___1KB 300 23892634 ns/op 0.01 MB/s
Histogram (unit: ms)
-Count: 500 Min: 9 Max: 43 Avg: 26.67
+Count: 300 Min: 6 Max: 31 Avg: 23.41
------------------------------------------------------------
-[ 9, 10) 17 3.4% 3.4%
-[ 10, 11) 18 3.6% 7.0%
-[ 11, 12) 2 0.4% 7.4%
-[ 12, 14) 0 0.0% 7.4%
-[ 14, 16) 2 0.4% 7.8%
-[ 16, 19) 40 8.0% 15.8% #
-[ 19, 23) 18 3.6% 19.4%
-[ 23, 28) 221 44.2% 63.6% ####
-[ 28, 34) 32 6.4% 70.0% #
-[ 34, 42) 149 29.8% 99.8% ###
-[ 42, 52) 1 0.2% 100.0%
-[ 52, 65) 0 0.0% 100.0%
-[ 65, 81) 0 0.0% 100.0%
-[ 81, 102) 0 0.0% 100.0%
-[102, 128) 0 0.0% 100.0%
-[128, 161) 0 0.0% 100.0%
-[161, inf) 0 0.0% 100.0%
-Benchmark__100B_mux__100_chunks___1KB-2 2000 6117827 ns/op 0.03 MB/s
+[ 6, 7) 12 4.0% 4.0%
+[ 7, 8) 9 3.0% 7.0%
+[ 8, 9) 5 1.7% 8.7%
+[ 9, 10) 1 0.3% 9.0%
+[ 10, 12) 1 0.3% 9.3%
+[ 12, 14) 2 0.7% 10.0%
+[ 14, 17) 1 0.3% 10.3%
+[ 17, 21) 10 3.3% 13.7%
+[ 21, 26) 122 40.7% 54.3% ####
+[ 26, 32) 137 45.7% 100.0% #####
+[ 32, 40) 0 0.0% 100.0%
+[ 40, 50) 0 0.0% 100.0%
+[ 50, 63) 0 0.0% 100.0%
+[ 63, 79) 0 0.0% 100.0%
+[ 79, 99) 0 0.0% 100.0%
+[ 99, 123) 0 0.0% 100.0%
+[123, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks___1KB-2 1000 9288578 ns/op 0.02 MB/s
Histogram (unit: ms)
-Count: 2000 Min: 1 Max: 20 Avg: 5.68
+Count: 1000 Min: 1 Max: 19 Avg: 8.80
------------------------------------------------------------
-[ 1, 2) 129 6.5% 6.5% #
-[ 2, 3) 689 34.5% 40.9% ###
-[ 3, 4) 129 6.5% 47.4% #
-[ 4, 5) 127 6.4% 53.7% #
-[ 5, 7) 224 11.2% 64.9% #
-[ 7, 9) 186 9.3% 74.2% #
-[ 9, 12) 250 12.5% 86.7% #
-[ 12, 15) 149 7.5% 94.2% #
-[ 15, 19) 99 5.0% 99.1%
-[ 19, 24) 18 0.9% 100.0%
-[ 24, 31) 0 0.0% 100.0%
-[ 31, 39) 0 0.0% 100.0%
-[ 39, 49) 0 0.0% 100.0%
-[ 49, 61) 0 0.0% 100.0%
-[ 61, 76) 0 0.0% 100.0%
-[ 76, 94) 0 0.0% 100.0%
-[ 94, inf) 0 0.0% 100.0%
-Benchmark__100B_mux___1K_chunks___10B 100 132175574 ns/op 0.00 MB/s
+[ 1, 2) 6 0.6% 0.6%
+[ 2, 3) 158 15.8% 16.4% ##
+[ 3, 4) 70 7.0% 23.4% #
+[ 4, 5) 54 5.4% 28.8% #
+[ 5, 7) 110 11.0% 39.8% #
+[ 7, 9) 83 8.3% 48.1% #
+[ 9, 12) 183 18.3% 66.4% ##
+[ 12, 15) 142 14.2% 80.6% #
+[ 15, 19) 193 19.3% 99.9% ##
+[ 19, 24) 1 0.1% 100.0%
+[ 24, 30) 0 0.0% 100.0%
+[ 30, 38) 0 0.0% 100.0%
+[ 38, 48) 0 0.0% 100.0%
+[ 48, 60) 0 0.0% 100.0%
+[ 60, 74) 0 0.0% 100.0%
+[ 74, 91) 0 0.0% 100.0%
+[ 91, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___10B 100 120357166 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 100 Min: 17 Max: 191 Avg: 131.70
+Count: 100 Min: 4 Max: 186 Avg: 119.88
------------------------------------------------------------
-[ 17, 18) 1 1.0% 1.0%
-[ 18, 19) 0 0.0% 1.0%
-[ 19, 20) 0 0.0% 1.0%
-[ 20, 22) 0 0.0% 1.0%
-[ 22, 25) 0 0.0% 1.0%
-[ 25, 30) 0 0.0% 1.0%
-[ 30, 37) 0 0.0% 1.0%
-[ 37, 48) 1 1.0% 2.0%
-[ 48, 63) 5 5.0% 7.0% #
-[ 63, 85) 16 16.0% 23.0% ##
-[ 85, 116) 17 17.0% 40.0% ##
-[116, 159) 18 18.0% 58.0% ##
-[159, 221) 42 42.0% 100.0% ####
-[221, 308) 0 0.0% 100.0%
-[308, 431) 0 0.0% 100.0%
-[431, 605) 0 0.0% 100.0%
-[605, inf) 0 0.0% 100.0%
-Benchmark__100B_mux___1K_chunks___10B-2 1000 8590497 ns/op 0.02 MB/s
+[ 4, 5) 1 1.0% 1.0%
+[ 5, 6) 0 0.0% 1.0%
+[ 6, 8) 0 0.0% 1.0%
+[ 8, 10) 0 0.0% 1.0%
+[ 10, 14) 0 0.0% 1.0%
+[ 14, 19) 1 1.0% 2.0%
+[ 19, 27) 0 0.0% 2.0%
+[ 27, 38) 0 0.0% 2.0%
+[ 38, 54) 3 3.0% 5.0%
+[ 54, 76) 22 22.0% 27.0% ##
+[ 76, 108) 16 16.0% 43.0% ##
+[108, 153) 18 18.0% 61.0% ##
+[153, 217) 39 39.0% 100.0% ####
+[217, 307) 0 0.0% 100.0%
+[307, 435) 0 0.0% 100.0%
+[435, 616) 0 0.0% 100.0%
+[616, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___10B-2 300 23110788 ns/op 0.01 MB/s
Histogram (unit: ms)
-Count: 1000 Min: 2 Max: 63 Avg: 8.10
+Count: 300 Min: 2 Max: 97 Avg: 22.60
------------------------------------------------------------
-[ 2, 3) 275 27.5% 27.5% ###
-[ 3, 4) 186 18.6% 46.1% ##
-[ 4, 5) 125 12.5% 58.6% #
-[ 5, 7) 92 9.2% 67.8% #
-[ 7, 9) 43 4.3% 72.1%
-[ 9, 12) 57 5.7% 77.8% #
-[ 12, 17) 97 9.7% 87.5% #
-[ 17, 23) 39 3.9% 91.4%
-[ 23, 31) 31 3.1% 94.5%
-[ 31, 42) 32 3.2% 97.7%
-[ 42, 57) 21 2.1% 99.8%
-[ 57, 77) 2 0.2% 100.0%
-[ 77, 103) 0 0.0% 100.0%
-[103, 138) 0 0.0% 100.0%
-[138, 184) 0 0.0% 100.0%
-[184, 245) 0 0.0% 100.0%
-[245, inf) 0 0.0% 100.0%
-Benchmark__100B_mux___1K_chunks__100B 100 145204032 ns/op 0.00 MB/s
+[ 2, 3) 7 2.3% 2.3%
+[ 3, 4) 26 8.7% 11.0% #
+[ 4, 5) 33 11.0% 22.0% #
+[ 5, 7) 45 15.0% 37.0% ##
+[ 7, 10) 46 15.3% 52.3% ##
+[ 10, 14) 48 16.0% 68.3% ##
+[ 14, 20) 19 6.3% 74.7% #
+[ 20, 28) 8 2.7% 77.3%
+[ 28, 39) 3 1.0% 78.3%
+[ 39, 54) 2 0.7% 79.0%
+[ 54, 74) 32 10.7% 89.7% #
+[ 74, 102) 31 10.3% 100.0% #
+[102, 140) 0 0.0% 100.0%
+[140, 191) 0 0.0% 100.0%
+[191, 261) 0 0.0% 100.0%
+[261, 355) 0 0.0% 100.0%
+[355, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks__100B 100 146211502 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 100 Min: 14 Max: 213 Avg: 144.70
+Count: 100 Min: 11 Max: 220 Avg: 145.68
------------------------------------------------------------
-[ 14, 15) 1 1.0% 1.0%
-[ 15, 16) 0 0.0% 1.0%
-[ 16, 18) 0 0.0% 1.0%
-[ 18, 20) 0 0.0% 1.0%
-[ 20, 24) 0 0.0% 1.0%
-[ 24, 29) 0 0.0% 1.0%
-[ 29, 37) 1 1.0% 2.0%
-[ 37, 48) 0 0.0% 2.0%
-[ 48, 64) 10 10.0% 12.0% #
-[ 64, 87) 14 14.0% 26.0% #
-[ 87, 121) 5 5.0% 31.0% #
-[121, 169) 29 29.0% 60.0% ###
-[169, 238) 40 40.0% 100.0% ####
-[238, 336) 0 0.0% 100.0%
-[336, 475) 0 0.0% 100.0%
-[475, 673) 0 0.0% 100.0%
-[673, inf) 0 0.0% 100.0%
-Benchmark__100B_mux___1K_chunks__100B-2 1000 12104363 ns/op 0.02 MB/s
+[ 11, 12) 1 1.0% 1.0%
+[ 12, 13) 1 1.0% 2.0%
+[ 13, 15) 0 0.0% 2.0%
+[ 15, 17) 0 0.0% 2.0%
+[ 17, 21) 0 0.0% 2.0%
+[ 21, 26) 0 0.0% 2.0%
+[ 26, 34) 1 1.0% 3.0%
+[ 34, 46) 1 1.0% 4.0%
+[ 46, 63) 10 10.0% 14.0% #
+[ 63, 87) 12 12.0% 26.0% #
+[ 87, 122) 9 9.0% 35.0% #
+[122, 172) 19 19.0% 54.0% ##
+[172, 243) 46 46.0% 100.0% #####
+[243, 345) 0 0.0% 100.0%
+[345, 491) 0 0.0% 100.0%
+[491, 700) 0 0.0% 100.0%
+[700, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks__100B-2 200 36485527 ns/op 0.01 MB/s
Histogram (unit: ms)
-Count: 1000 Min: 2 Max: 87 Avg: 11.64
+Count: 200 Min: 2 Max: 114 Avg: 36.01
------------------------------------------------------------
-[ 2, 3) 260 26.0% 26.0% ###
-[ 3, 4) 64 6.4% 32.4% #
-[ 4, 5) 67 6.7% 39.1% #
-[ 5, 7) 156 15.6% 54.7% ##
-[ 7, 10) 129 12.9% 67.6% #
-[ 10, 14) 93 9.3% 76.9% #
-[ 14, 19) 65 6.5% 83.4% #
-[ 19, 26) 40 4.0% 87.4%
-[ 26, 36) 33 3.3% 90.7%
-[ 36, 50) 41 4.1% 94.8%
-[ 50, 69) 46 4.6% 99.4%
-[ 69, 94) 6 0.6% 100.0%
-[ 94, 128) 0 0.0% 100.0%
-[128, 175) 0 0.0% 100.0%
-[175, 238) 0 0.0% 100.0%
-[238, 323) 0 0.0% 100.0%
-[323, inf) 0 0.0% 100.0%
-Benchmark__100B_mux___1K_chunks___1KB 100 150385852 ns/op 0.00 MB/s
+[ 2, 3) 12 6.0% 6.0% #
+[ 3, 4) 7 3.5% 9.5%
+[ 4, 5) 3 1.5% 11.0%
+[ 5, 7) 17 8.5% 19.5% #
+[ 7, 10) 28 14.0% 33.5% #
+[ 10, 14) 29 14.5% 48.0% #
+[ 14, 20) 25 12.5% 60.5% #
+[ 20, 29) 13 6.5% 67.0% #
+[ 29, 41) 5 2.5% 69.5%
+[ 41, 57) 0 0.0% 69.5%
+[ 57, 80) 6 3.0% 72.5%
+[ 80, 111) 53 26.5% 99.0% ###
+[111, 154) 2 1.0% 100.0%
+[154, 213) 0 0.0% 100.0%
+[213, 294) 0 0.0% 100.0%
+[294, 405) 0 0.0% 100.0%
+[405, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___1KB 100 145242261 ns/op 0.00 MB/s
Histogram (unit: ms)
-Count: 100 Min: 10 Max: 251 Avg: 149.86
+Count: 100 Min: 7 Max: 235 Avg: 144.71
------------------------------------------------------------
-[ 10, 11) 1 1.0% 1.0%
-[ 11, 12) 0 0.0% 1.0%
-[ 12, 14) 1 1.0% 2.0%
-[ 14, 16) 0 0.0% 2.0%
-[ 16, 20) 0 0.0% 2.0%
-[ 20, 26) 0 0.0% 2.0%
-[ 26, 34) 3 3.0% 5.0%
-[ 34, 46) 2 2.0% 7.0%
-[ 46, 64) 5 5.0% 12.0% #
-[ 64, 90) 12 12.0% 24.0% #
-[ 90, 128) 15 15.0% 39.0% ##
-[128, 183) 26 26.0% 65.0% ###
-[183, 263) 35 35.0% 100.0% ####
-[263, 378) 0 0.0% 100.0%
-[378, 545) 0 0.0% 100.0%
-[545, 786) 0 0.0% 100.0%
-[786, inf) 0 0.0% 100.0%
-Benchmark__100B_mux___1K_chunks___1KB-2 1000 13867566 ns/op 0.01 MB/s
+[ 7, 8) 1 1.0% 1.0%
+[ 8, 9) 2 2.0% 3.0%
+[ 9, 11) 1 1.0% 4.0%
+[ 11, 13) 1 1.0% 5.0%
+[ 13, 17) 0 0.0% 5.0%
+[ 17, 23) 2 2.0% 7.0%
+[ 23, 31) 1 1.0% 8.0%
+[ 31, 43) 0 0.0% 8.0%
+[ 43, 61) 1 1.0% 9.0%
+[ 61, 86) 10 10.0% 19.0% #
+[ 86, 123) 24 24.0% 43.0% ##
+[123, 176) 24 24.0% 67.0% ##
+[176, 252) 33 33.0% 100.0% ###
+[252, 362) 0 0.0% 100.0%
+[362, 520) 0 0.0% 100.0%
+[520, 748) 0 0.0% 100.0%
+[748, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___1KB-2 200 37420006 ns/op 0.01 MB/s
Histogram (unit: ms)
-Count: 1000 Min: 1 Max: 105 Avg: 13.35
+Count: 200 Min: 2 Max: 125 Avg: 36.95
------------------------------------------------------------
-[ 1, 2) 214 21.4% 21.4% ##
-[ 2, 3) 200 20.0% 41.4% ##
-[ 3, 4) 27 2.7% 44.1%
-[ 4, 6) 81 8.1% 52.2% #
-[ 6, 9) 121 12.1% 64.3% #
-[ 9, 13) 89 8.9% 73.2% #
-[ 13, 19) 78 7.8% 81.0% #
-[ 19, 27) 51 5.1% 86.1% #
-[ 27, 38) 25 2.5% 88.6%
-[ 38, 54) 27 2.7% 91.3%
-[ 54, 76) 56 5.6% 96.9% #
-[ 76, 106) 31 3.1% 100.0%
-[106, 147) 0 0.0% 100.0%
-[147, 202) 0 0.0% 100.0%
-[202, 278) 0 0.0% 100.0%
-[278, 381) 0 0.0% 100.0%
-[381, inf) 0 0.0% 100.0%
+[ 2, 3) 37 18.5% 18.5% ##
+[ 3, 4) 6 3.0% 21.5%
+[ 4, 5) 2 1.0% 22.5%
+[ 5, 7) 16 8.0% 30.5% #
+[ 7, 10) 8 4.0% 34.5%
+[ 10, 14) 16 8.0% 42.5% #
+[ 14, 20) 14 7.0% 49.5% #
+[ 20, 29) 12 6.0% 55.5% #
+[ 29, 42) 13 6.5% 62.0% #
+[ 42, 59) 20 10.0% 72.0% #
+[ 59, 83) 22 11.0% 83.0% #
+[ 83, 117) 30 15.0% 98.0% ##
+[117, 163) 4 2.0% 100.0%
+[163, 227) 0 0.0% 100.0%
+[227, 316) 0 0.0% 100.0%
+[316, 438) 0 0.0% 100.0%
+[438, inf) 0 0.0% 100.0%
diff --git a/runtimes/google/ipc/stream/benchmark/RESULTS.txt b/runtimes/google/ipc/stream/benchmark/RESULTS.txt
index 3535455..d217956 100644
--- a/runtimes/google/ipc/stream/benchmark/RESULTS.txt
+++ b/runtimes/google/ipc/stream/benchmark/RESULTS.txt
@@ -1,86 +1,86 @@
-Date: 12/12/2014
+Date: 12/14/2014
Platform: Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz, 66114888KB Memory
$ veyron go test -test.bench=. -test.cpu=1 -test.benchtime=5s \
veyron.io/veyron/veyron/runtimes/google/ipc/stream/benchmark
-Benchmark_throughput_TCP_1Conn 1000000 9075 ns/op 5641.59 MB/s
-Benchmark_throughput_TCP_2Conns 1000000 9065 ns/op 5647.79 MB/s
-Benchmark_throughput_TCP_4Conns 1000000 9651 ns/op 5304.80 MB/s
-Benchmark_throughput_TCP_8Conns 1000000 11300 ns/op 4530.65 MB/s
-Benchmark_throughput_Pipe_1Conn 500000 13960 ns/op 3667.45 MB/s
-Benchmark_throughput_Pipe_2Conns 500000 13529 ns/op 3784.26 MB/s
-Benchmark_throughput_Pipe_4Conns 1000000 13412 ns/op 3817.29 MB/s
-Benchmark_throughput_Pipe_8Conns 1000000 13749 ns/op 3723.82 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_1Flow 500000 25830 ns/op 1982.15 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_2Flow 500000 24948 ns/op 2052.20 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_8Flow 500000 32365 ns/op 1581.95 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_2Flow 500000 25847 ns/op 1980.87 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_8Flow 500000 31619 ns/op 1619.25 MB/s
-Benchmark_throughput_Flow_2VIF_4VC_8Flow 500000 34299 ns/op 1492.72 MB/s
-Benchmark_throughput_TLS_1Conn 20000 409755 ns/op 124.95 MB/s
-Benchmark_throughput_TLS_2Conns 20000 409396 ns/op 125.06 MB/s
-Benchmark_throughput_TLS_4Conns 20000 414513 ns/op 123.52 MB/s
-Benchmark_throughput_TLS_8Conns 20000 417252 ns/op 122.71 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_1FlowTLS 20000 458925 ns/op 111.56 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_2FlowTLS 20000 460522 ns/op 111.18 MB/s
-Benchmark_throughput_Flow_1VIF_1VC_8FlowTLS 20000 467796 ns/op 109.45 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_2FlowTLS 20000 461205 ns/op 111.01 MB/s
-Benchmark_throughput_Flow_1VIF_2VC_8FlowTLS 20000 467651 ns/op 109.48 MB/s
-Benchmark_throughput_Flow_2VIF_4VC_8FlowTLS 20000 467791 ns/op 109.45 MB/s
+Benchmark_throughput_TCP_1Conn 1000000 9874 ns/op 5184.85 MB/s
+Benchmark_throughput_TCP_2Conns 1000000 9815 ns/op 5216.01 MB/s
+Benchmark_throughput_TCP_4Conns 1000000 10088 ns/op 5074.94 MB/s
+Benchmark_throughput_TCP_8Conns 500000 12228 ns/op 4186.82 MB/s
+Benchmark_throughput_Pipe_1Conn 500000 24337 ns/op 2103.72 MB/s
+Benchmark_throughput_Pipe_2Conns 500000 28723 ns/op 1782.52 MB/s
+Benchmark_throughput_Pipe_4Conns 500000 28823 ns/op 1776.32 MB/s
+Benchmark_throughput_Pipe_8Conns 500000 27081 ns/op 1890.57 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_1Flow 200000 31567 ns/op 1621.93 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_2Flow 200000 31626 ns/op 1618.90 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_8Flow 200000 36366 ns/op 1407.88 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_2Flow 200000 32417 ns/op 1579.41 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_8Flow 200000 35595 ns/op 1438.37 MB/s
+Benchmark_throughput_Flow_2VIF_4VC_8Flow 200000 38216 ns/op 1339.73 MB/s
+Benchmark_throughput_TLS_1Conn 20000 426727 ns/op 119.98 MB/s
+Benchmark_throughput_TLS_2Conns 20000 419540 ns/op 122.04 MB/s
+Benchmark_throughput_TLS_4Conns 20000 428137 ns/op 119.59 MB/s
+Benchmark_throughput_TLS_8Conns 20000 426041 ns/op 120.18 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_1FlowTLS 20000 470284 ns/op 108.87 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_2FlowTLS 20000 473181 ns/op 108.20 MB/s
+Benchmark_throughput_Flow_1VIF_1VC_8FlowTLS 20000 482533 ns/op 106.11 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_2FlowTLS 20000 472181 ns/op 108.43 MB/s
+Benchmark_throughput_Flow_1VIF_2VC_8FlowTLS 20000 480154 ns/op 106.63 MB/s
+Benchmark_throughput_Flow_2VIF_4VC_8FlowTLS 20000 481803 ns/op 106.27 MB/s
-Benchmark_dial_VIF 1000000 9496 ns/op
-Histogram (unit: us)
-Count: 1000000 Min: 3 Max: 5379 Avg: 8.83
+Benchmark_dial_VIF 500000 15965 ns/op
+Histogram (unit: µs)
+Count: 500000 Min: 4 Max: 19523 Avg: 15.31
------------------------------------------------------------
-[ 3, 4) 416740 41.7% 41.7% ####
-[ 4, 5) 436828 43.7% 85.4% ####
-[ 5, 8) 107624 10.8% 96.1% #
-[ 8, 13) 19403 1.9% 98.1%
-[ 13, 22) 12430 1.2% 99.3%
-[ 22, 39) 3333 0.3% 99.6%
-[ 39, 70) 914 0.1% 99.7%
-[ 70, 125) 329 0.0% 99.8%
-[ 125, 222) 189 0.0% 99.8%
-[ 222, 395) 101 0.0% 99.8%
-[ 395, 701) 45 0.0% 99.8%
-[ 701, 1245) 259 0.0% 99.8%
-[ 1245, 2209) 820 0.1% 99.9%
-[ 2209, 3919) 873 0.1% 100.0%
-[ 3919, 6951) 112 0.0% 100.0%
-[ 6951, 12326) 0 0.0% 100.0%
-[12326, inf) 0 0.0% 100.0%
+[ 4, 5) 9404 1.9% 1.9%
+[ 5, 6) 320133 64.0% 65.9% ######
+[ 6, 9) 157038 31.4% 97.3% ###
+[ 9, 16) 8766 1.8% 99.1%
+[ 16, 29) 3348 0.7% 99.7%
+[ 29, 55) 134 0.0% 99.8%
+[ 55, 107) 50 0.0% 99.8%
+[ 107, 207) 7 0.0% 99.8%
+[ 207, 401) 0 0.0% 99.8%
+[ 401, 776) 1 0.0% 99.8%
+[ 776, 1500) 120 0.0% 99.8%
+[ 1500, 2900) 138 0.0% 99.8%
+[ 2900, 5606) 681 0.1% 100.0%
+[ 5606, 10834) 167 0.0% 100.0%
+[10834, 20936) 13 0.0% 100.0%
+[20936, 40454) 0 0.0% 100.0%
+[40454, inf) 0 0.0% 100.0%
-Benchmark_dial_VIF_TLS 1000 11790447 ns/op
+Benchmark_dial_VIF_TLS 500 12015788 ns/op
Histogram (unit: ms)
-Count: 1000 Min: 11 Max: 13 Avg: 11.24
+Count: 500 Min: 11 Max: 13 Avg: 11.34
------------------------------------------------------------
-[ 11, 12) 768 76.8% 76.8% ########
-[ 12, 13) 225 22.5% 99.3% ##
-[ 13, 14) 7 0.7% 100.0%
-[ 14, 15) 0 0.0% 100.0%
-[ 15, 16) 0 0.0% 100.0%
-[ 16, 17) 0 0.0% 100.0%
-[ 17, 18) 0 0.0% 100.0%
-[ 18, 19) 0 0.0% 100.0%
-[ 19, 20) 0 0.0% 100.0%
-[ 20, 21) 0 0.0% 100.0%
-[ 21, 22) 0 0.0% 100.0%
-[ 22, 23) 0 0.0% 100.0%
-[ 23, 24) 0 0.0% 100.0%
-[ 24, 25) 0 0.0% 100.0%
-[ 25, 26) 0 0.0% 100.0%
-[ 26, 27) 0 0.0% 100.0%
-[ 27, inf) 0 0.0% 100.0%
+[ 11, 12) 350 70.0% 70.0% #######
+[ 12, 13) 132 26.4% 96.4% ###
+[ 13, 14) 18 3.6% 100.0%
+[ 14, 15) 0 0.0% 100.0%
+[ 15, 16) 0 0.0% 100.0%
+[ 16, 17) 0 0.0% 100.0%
+[ 17, 18) 0 0.0% 100.0%
+[ 18, 19) 0 0.0% 100.0%
+[ 19, 20) 0 0.0% 100.0%
+[ 20, 21) 0 0.0% 100.0%
+[ 21, 22) 0 0.0% 100.0%
+[ 22, 23) 0 0.0% 100.0%
+[ 23, 24) 0 0.0% 100.0%
+[ 24, 25) 0 0.0% 100.0%
+[ 25, 26) 0 0.0% 100.0%
+[ 26, 27) 0 0.0% 100.0%
+[ 27, inf) 0 0.0% 100.0%
-Benchmark_dial_VC_TLS 500 15595236 ns/op
+Benchmark_dial_VC_TLS 500 15909783 ns/op
Histogram (unit: ms)
-Count: 500 Min: 15 Max: 20 Avg: 15.30
+Count: 500 Min: 15 Max: 20 Avg: 15.41
------------------------------------------------------------
-[ 15, 16) 389 77.8% 77.8% ########
-[ 16, 17) 74 14.8% 92.6% #
-[ 17, 18) 35 7.0% 99.6% #
-[ 18, 19) 1 0.2% 99.8%
+[ 15, 16) 356 71.2% 71.2% #######
+[ 16, 17) 92 18.4% 89.6% ##
+[ 17, 18) 47 9.4% 99.0% #
+[ 18, 19) 4 0.8% 99.8%
[ 19, 20) 0 0.0% 99.8%
[ 20, 21) 1 0.2% 100.0%
[ 21, 22) 0 0.0% 100.0%
diff --git a/services/config/lib/config.go b/services/config/lib/config.go
index b6542b4..41669e1 100644
--- a/services/config/lib/config.go
+++ b/services/config/lib/config.go
@@ -17,7 +17,7 @@
"strings"
"sync"
- "veyron.io/veyron/veyron2/verror"
+ verror "veyron.io/veyron/veyron2/verror2"
"veyron.io/veyron/veyron2/vlog"
"github.com/presotto/go-mdns-sd"
@@ -42,6 +42,21 @@
gen int // incremented every config change
}
+const pkgPath = "veyron.io/veyron/veyron/services/config/lib"
+
+// Errors
+var (
+ errCantParse = verror.Register(pkgPath+".errCantParse", verror.NoRetry, "{1:}{2:} can't parse{:_}")
+ errEntryTooLong = verror.Register(pkgPath+".errEntryTooLong", verror.NoRetry, "{1:}{2:} entry {3}:{4} is too long{:_}")
+ errNoFileToRead = verror.Register(pkgPath+".errNoFileToRead", verror.NoRetry, "{1:}{2:} no file to read{:_}")
+ errFileError = verror.Register(pkgPath+".errFileError", verror.NoRetry, "{1:}{2:} file {3}{:_}")
+ errMissingLegalVersion = verror.Register(pkgPath+".errMissingLegalVersion", verror.NoRetry, "{1:}{2:} missing legal version for file{:_}")
+ errMissingConfigVersion = verror.Register(pkgPath+".errMissingConfigVersion", verror.NoRetry, "{1:}{2:} missing config version{:_}")
+ errNoConfig = verror.Register(pkgPath+".errNoConfig", verror.NoRetry, "{1:}{2:} no config{:_}")
+ errConfigHasNoKey = verror.Register(pkgPath+".errConfigHasNoKey", verror.NoRetry, "{1:}{2:} config has no key {3}{:_}")
+ errOfferingConfigError = verror.Register(pkgPath+".errOfferingConfigError", verror.NoRetry, "{1:}{2:} offering config {3}{:_}")
+)
+
// MDNSConfigService creates a new instance of the config service with the given name.
// If file is non blank, the initial config is read from file and any learned configs are
// stored in it. Only instances with a file to backup will offer configs to the net.
@@ -126,12 +141,12 @@
// The reset have to be key<white>*:<white>*value
f := strings.SplitN(l, ":", 2)
if len(f) != 2 {
- return verror.BadArgf("can't parse %s", l)
+ return verror.Make(errCantParse, nil, l)
}
k := strings.TrimSpace(f[0])
v := strings.TrimSpace(f[1])
if len(k)+len(v) > maxDNSStringLength {
- return verror.BadArgf("entry %s:%s is too long", k, v)
+ return verror.Make(errEntryTooLong, nil, k, v)
}
c.pairs[k] = v
if k != "version" {
@@ -144,14 +159,14 @@
func serializeEntry(k, v string) (string, error) {
if len(k)+len(v) > maxDNSStringLength {
- return "", verror.BadArgf("entry %s:%s is too long", k, v)
+ return "", verror.Make(errEntryTooLong, nil, k, v)
}
return k + ":" + v, nil
}
func readFile(file string) (*config, error) {
if len(file) == 0 {
- return nil, verror.NoExistf("no file to read")
+ return nil, verror.Make(errNoFileToRead, nil)
}
// The config has to be small so just read it all in one go.
@@ -162,11 +177,11 @@
c := newConfig()
for _, l := range strings.Split(string(b), "\n") {
if err := c.parseEntry(l); err != nil {
- return nil, verror.BadArgf("file %s: %s", file, err)
+ return nil, verror.Make(errFileError, nil, file, err)
}
}
if _, ok := c.pairs["version"]; !ok {
- return nil, verror.BadArgf("file %s: missing legal version", file)
+ return nil, verror.Make(errMissingLegalVersion, nil, file)
}
return c, nil
}
@@ -200,7 +215,7 @@
}
// Ignore any config with no version.
if _, ok := c.pairs["version"]; !ok {
- return nil, verror.NoExistf("missing config version")
+ return nil, verror.Make(errMissingConfigVersion, nil)
}
return c, nil
}
@@ -310,10 +325,10 @@
cs.rwlock.RLock()
defer cs.rwlock.RUnlock()
if cs.current == nil {
- return "", verror.NoExistf("no config")
+ return "", verror.Make(errNoConfig, nil)
}
if v, ok := cs.current.pairs[key]; !ok {
- return "", verror.NoExistf("config has no key %q", key)
+ return "", verror.Make(errConfigHasNoKey, nil, key)
} else {
return v, nil
}
@@ -331,7 +346,7 @@
cs.rwlock.RLock()
defer cs.rwlock.RUnlock()
if cs.current == nil {
- return nil, verror.NoExistf("no config found")
+ return nil, verror.Make(errNoConfig, nil)
}
// Copy so caller can't change the map under our feet.
reply := make(map[string]string)
@@ -366,7 +381,7 @@
for _, k := range keys {
e, err := serializeEntry(k, cs.current.pairs[k])
if err != nil {
- verror.NoExistf("offering config: %s", cs.file, err)
+ verror.Make(errOfferingConfigError, nil, cs.file, err)
return
}
txt = append(txt, e)
diff --git a/services/identity/blesser/oauth.go b/services/identity/blesser/oauth.go
index c50ed3a..ef9084a 100644
--- a/services/identity/blesser/oauth.go
+++ b/services/identity/blesser/oauth.go
@@ -20,7 +20,7 @@
duration time.Duration
domain string
dischargerLocation string
- revocationManager *revocation.RevocationManager
+ revocationManager revocation.RevocationManager
}
// AccessTokenClient represents a client of the BlessUsingAccessToken RPCs.
@@ -40,7 +40,7 @@
// The object name of the discharger service. If this is empty then revocation caveats will not be granted.
DischargerLocation string
// The revocation manager that generates caveats and manages revocation.
- RevocationManager *revocation.RevocationManager
+ RevocationManager revocation.RevocationManager
// The duration for which blessings will be valid. (Used iff RevocationManager is nil).
BlessingDuration time.Duration
}
diff --git a/services/identity/identityd/main.go b/services/identity/identityd/main.go
index 0092a47..c1c9655 100644
--- a/services/identity/identityd/main.go
+++ b/services/identity/identityd/main.go
@@ -2,48 +2,26 @@
package main
import (
- "crypto/rand"
"database/sql"
"flag"
"fmt"
- "html/template"
"io/ioutil"
- "net"
- "net/http"
"os"
"strings"
"time"
_ "github.com/go-sql-driver/mysql"
- "veyron.io/veyron/veyron2"
- "veyron.io/veyron/veyron2/ipc"
- "veyron.io/veyron/veyron2/naming"
- "veyron.io/veyron/veyron2/options"
- "veyron.io/veyron/veyron2/rt"
- "veyron.io/veyron/veyron2/security"
- verror "veyron.io/veyron/veyron2/verror2"
"veyron.io/veyron/veyron2/vlog"
- "veyron.io/veyron/veyron/lib/signals"
- "veyron.io/veyron/veyron/security/audit"
"veyron.io/veyron/veyron/services/identity/auditor"
"veyron.io/veyron/veyron/services/identity/blesser"
- "veyron.io/veyron/veyron/services/identity/googleoauth"
- "veyron.io/veyron/veyron/services/identity/handlers"
+ "veyron.io/veyron/veyron/services/identity/oauth"
"veyron.io/veyron/veyron/services/identity/revocation"
- services "veyron.io/veyron/veyron/services/security"
- "veyron.io/veyron/veyron/services/security/discharger"
-
- "veyron.io/veyron/veyron/profiles/static"
+ "veyron.io/veyron/veyron/services/identity/server"
)
var (
- // Flags controlling the HTTP server
- httpaddr = flag.String("httpaddr", "localhost:8125", "Address on which the HTTP server listens on.")
- tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files. This must be provided.")
- host = flag.String("host", defaultHost(), "Hostname the HTTP server listens on. This can be the name of the host running the webserver, but if running behind a NAT or load balancer, this should be the host name that clients will connect to. For example, if set to 'x.com', Veyron identities will have the IssuerName set to 'x.com' and clients can expect to find the public key of the signer at 'x.com/pubkey'.")
-
// Flag controlling auditing and revocation of Blessing operations.
sqlConfig = flag.String("sqlconfig", "", "Path to file containing go-sql-driver connection string of the following form: [username[:password]@][protocol[(address)]]/dbname")
@@ -54,12 +32,6 @@
googleDomain = flag.String("google_domain", "", "An optional domain name. When set, only email addresses from this domain are allowed to authenticate via Google OAuth")
)
-const (
- googleService = "google"
- macaroonService = "macaroon"
- dischargerService = "discharger"
-)
-
func main() {
flag.Usage = usage
flag.Parse()
@@ -77,203 +49,22 @@
}
}
- p, blessingLogReader := providerPrincipal(sqlDB)
- runtime, err := rt.New(options.RuntimePrincipal{p})
+ googleoauth, err := oauth.NewGoogleOAuth(*googleConfigWeb)
if err != nil {
- vlog.Fatal(err)
- }
- defer runtime.Cleanup()
-
- var revocationManager *revocation.RevocationManager
- // Only set revocationManager sqlConfig (and thus sqlDB) is set.
- if sqlDB != nil {
- revocationManager, err = revocation.NewRevocationManager(sqlDB)
- if err != nil {
- vlog.Fatalf("Failed to start RevocationManager: %v", err)
- }
+ vlog.Fatalf("Failed to setup GoogleOAuth: %v", err)
}
- // Setup handlers
- // TODO(nlacasse,ataly,suharshs): Remove the 'pubkey' route if it's no longer needed.
- http.Handle("/pubkey", handlers.PublicKey{runtime.Principal().PublicKey()}) // public key of this server
- http.Handle("/blessing-root", handlers.BlessingRoot{runtime.Principal()}) // json-encoded public key and blessing names of this server
- macaroonKey := make([]byte, 32)
- if _, err := rand.Read(macaroonKey); err != nil {
- vlog.Fatalf("macaroonKey generation failed: %v", err)
- }
- // Google OAuth
- ipcServer, published, err := setupServices(runtime, revocationManager, macaroonKey)
+ auditor, reader, err := auditor.NewSQLBlessingAuditor(sqlDB)
if err != nil {
- vlog.Fatalf("Failed to setup veyron services for blessing: %v", err)
+ vlog.Fatalf("Failed to create sql auditor from config: %v", err)
}
- defer ipcServer.Stop()
- if clientID, clientSecret, ok := getOAuthClientIDAndSecret(*googleConfigWeb); ok {
- n := "/google/"
- h, err := googleoauth.NewHandler(googleoauth.HandlerArgs{
- R: runtime,
- MacaroonKey: macaroonKey,
- Addr: fmt.Sprintf("%s%s", httpaddress(), n),
- ClientID: clientID,
- ClientSecret: clientSecret,
- BlessingLogReader: blessingLogReader,
- RevocationManager: revocationManager,
- DischargerLocation: naming.JoinAddressName(published[0], dischargerService),
- MacaroonBlessingService: naming.JoinAddressName(published[0], macaroonService),
- })
- if err != nil {
- vlog.Fatalf("Failed to create HTTP handler for google-based authentication: %v", err)
- }
- http.Handle(n, h)
- }
- http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- args := struct {
- Self security.Blessings
- RandomWeb bool
- GoogleServers, DischargeServers []string
- ListBlessingsRoute string
- }{
- Self: runtime.Principal().BlessingStore().Default(),
- RandomWeb: enableRandomHandler(),
- }
- if revocationManager != nil {
- args.DischargeServers = appendSuffixTo(published, dischargerService)
- }
- if len(*googleConfigChrome) > 0 || len(*googleConfigAndroid) > 0 {
- args.GoogleServers = appendSuffixTo(published, googleService)
- }
- if sqlDB != nil && len(*googleConfigWeb) > 0 {
- args.ListBlessingsRoute = googleoauth.ListBlessingsRoute
- }
- if err := tmpl.Execute(w, args); err != nil {
- vlog.Info("Failed to render template:", err)
- }
- })
- vlog.Infof("Running HTTP server at: %v", httpaddress())
- go runHTTPSServer(*httpaddr)
- <-signals.ShutdownOnSignals(runtime)
-}
-func appendSuffixTo(objectname []string, suffix string) []string {
- names := make([]string, len(objectname))
- for i, o := range objectname {
- names[i] = naming.JoinAddressName(o, suffix)
- }
- return names
-}
-
-// newDispatcher returns a dispatcher for both the blessing and the
-// discharging service.
-func newDispatcher(googleParams blesser.GoogleParams, macaroonKey []byte) ipc.Dispatcher {
- d := dispatcher(map[string]interface{}{
- macaroonService: blesser.NewMacaroonBlesserServer(macaroonKey),
- dischargerService: services.DischargerServer(discharger.NewDischarger()),
- })
- if len(*googleConfigChrome) > 0 || len(*googleConfigAndroid) > 0 {
- d[googleService] = blesser.NewGoogleOAuthBlesserServer(googleParams)
- }
- return d
-}
-
-type allowEveryoneAuthorizer struct{}
-
-func (allowEveryoneAuthorizer) Authorize(security.Context) error { return nil }
-
-type dispatcher map[string]interface{}
-
-func (d dispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
- if invoker := d[suffix]; invoker != nil {
- return invoker, allowEveryoneAuthorizer{}, nil
- }
- return nil, nil, verror.Make(verror.NoExist, nil, suffix)
-}
-
-// Starts the blessing services and the discharging service on the same port.
-func setupServices(r veyron2.Runtime, revocationManager *revocation.RevocationManager, macaroonKey []byte) (ipc.Server, []string, error) {
- googleParams := blesser.GoogleParams{
- // TODO(ashankar,nlacasse): Figure out how to have web-appications use the "caveats" form and
- // always select an expiry instead of forcing a ridiculously large value here.
- BlessingDuration: 365 * 24 * time.Hour,
- DomainRestriction: *googleDomain,
- RevocationManager: revocationManager,
- }
- if clientID, ok := getOAuthClientID(*googleConfigChrome); ok {
- googleParams.AccessTokenClients = append(googleParams.AccessTokenClients, blesser.AccessTokenClient{Name: "chrome", ClientID: clientID})
- }
- if clientID, ok := getOAuthClientID(*googleConfigAndroid); ok {
- googleParams.AccessTokenClients = append(googleParams.AccessTokenClients, blesser.AccessTokenClient{Name: "android", ClientID: clientID})
- }
- server, err := r.NewServer()
+ revocationManager, err := revocation.NewRevocationManager(sqlDB)
if err != nil {
- return nil, nil, fmt.Errorf("failed to create new ipc.Server: %v", err)
+ vlog.Fatalf("Failed to start RevocationManager: %v", err)
}
- eps, err := server.Listen(static.ListenSpec)
- if err != nil {
- return nil, nil, fmt.Errorf("server.Listen(%v) failed: %v", static.ListenSpec, err)
- }
- ep := eps[0]
- googleParams.DischargerLocation = naming.JoinAddressName(ep.String(), dischargerService)
- dispatcher := newDispatcher(googleParams, macaroonKey)
- objectname := naming.Join("identity", fmt.Sprintf("%v", r.Principal().BlessingStore().Default()))
- if err := server.ServeDispatcher(objectname, dispatcher); err != nil {
- return nil, nil, fmt.Errorf("failed to start Veyron services: %v", err)
- }
- vlog.Infof("Google blessing and discharger services enabled at %v", naming.JoinAddressName(ep.String(), objectname))
- published, _ := server.Published()
- if len(published) == 0 {
- // No addresses published, publish the endpoint instead (which may not be usable everywhere, but oh-well).
- published = append(published, ep.String())
- }
- return server, published, nil
-}
-
-func enableRandomHandler() bool {
- return len(*googleConfigWeb)+len(*googleConfigChrome)+len(*googleConfigAndroid) == 0
-}
-func getOAuthClientID(config string) (clientID string, ok bool) {
- fname := config
- if len(fname) == 0 {
- return "", false
- }
- f, err := os.Open(fname)
- if err != nil {
- vlog.Fatalf("Failed to open %q: %v", fname, err)
- }
- defer f.Close()
- clientID, err = googleoauth.ClientIDFromJSON(f)
- if err != nil {
- vlog.Fatalf("Failed to decode JSON in %q: %v", fname, err)
- }
- return clientID, true
-}
-func getOAuthClientIDAndSecret(config string) (clientID, clientSecret string, ok bool) {
- fname := config
- if len(fname) == 0 {
- return "", "", false
- }
- f, err := os.Open(fname)
- if err != nil {
- vlog.Fatalf("Failed to open %q: %v", fname, err)
- }
- defer f.Close()
- clientID, clientSecret, err = googleoauth.ClientIDAndSecretFromJSON(f)
- if err != nil {
- vlog.Fatalf("Failed to decode JSON in %q: %v", fname, err)
- }
- return clientID, clientSecret, true
-}
-func runHTTPSServer(addr string) {
- if len(*tlsconfig) == 0 {
- vlog.Fatal("Please set the --tlsconfig flag")
- }
- paths := strings.Split(*tlsconfig, ",")
- if len(paths) != 2 {
- vlog.Fatalf("Could not parse --tlsconfig. Must have exactly two components, separated by a comma")
- }
- vlog.Infof("Starting HTTP server with TLS using certificate [%s] and private key [%s] at https://%s", paths[0], paths[1], addr)
- if err := http.ListenAndServeTLS(addr, paths[0], paths[1], nil); err != nil {
- vlog.Fatalf("http.ListenAndServeTLS failed: %v", err)
- }
+ server.NewIdentityServer(googleoauth, auditor, reader, revocationManager, oauthBlesserGoogleParams(revocationManager)).Serve()
}
func usage() {
@@ -294,32 +85,23 @@
flag.PrintDefaults()
}
-func defaultHost() string {
- host, err := os.Hostname()
- if err != nil {
- vlog.Fatalf("Failed to get hostname: %v", err)
+func oauthBlesserGoogleParams(revocationManager revocation.RevocationManager) blesser.GoogleParams {
+ googleParams := blesser.GoogleParams{
+ BlessingDuration: 365 * 24 * time.Hour,
+ DomainRestriction: *googleDomain,
+ RevocationManager: revocationManager,
}
- return host
-}
-
-// providerPrincipal returns the Principal to use for the identity provider (i.e., this program) and
-// the database where audits will be store. If no database exists nil will be returned.
-func providerPrincipal(sqlDB *sql.DB) (security.Principal, auditor.BlessingLogReader) {
- // TODO(ashankar): Somewhat silly to have to create a runtime, but oh-well.
- r, err := rt.New()
- if err != nil {
- vlog.Fatal(err)
+ if clientID, err := getOAuthClientID(*googleConfigChrome); err != nil {
+ vlog.Info(err)
+ } else {
+ googleParams.AccessTokenClients = append(googleParams.AccessTokenClients, blesser.AccessTokenClient{Name: "chrome", ClientID: clientID})
}
- defer r.Cleanup()
- p := r.Principal()
- if sqlDB == nil {
- return p, nil
+ if clientID, err := getOAuthClientID(*googleConfigAndroid); err != nil {
+ vlog.Info(err)
+ } else {
+ googleParams.AccessTokenClients = append(googleParams.AccessTokenClients, blesser.AccessTokenClient{Name: "android", ClientID: clientID})
}
- auditor, reader, err := auditor.NewSQLBlessingAuditor(sqlDB)
- if err != nil {
- vlog.Fatalf("Failed to create sql auditor from config: %v", err)
- }
- return audit.NewPrincipal(p, auditor), reader
+ return googleParams
}
func dbFromConfigDatabase(database string) (*sql.DB, error) {
@@ -333,47 +115,15 @@
return db, nil
}
-func httpaddress() string {
- _, port, err := net.SplitHostPort(*httpaddr)
+func getOAuthClientID(configFile string) (clientID string, err error) {
+ f, err := os.Open(configFile)
if err != nil {
- vlog.Fatalf("Failed to parse %q: %v", *httpaddr, err)
+ return "", fmt.Errorf("failed to open %q: %v", configFile, err)
}
- return fmt.Sprintf("https://%s:%v", *host, port)
+ defer f.Close()
+ clientID, err = oauth.ClientIDFromJSON(f)
+ if err != nil {
+ return "", fmt.Errorf("failed to decode JSON in %q: %v", configFile, err)
+ }
+ return clientID, nil
}
-
-var tmpl = template.Must(template.New("main").Parse(`<!doctype html>
-<html>
-<head>
-<meta charset="UTF-8">
-<title>Veyron Identity Server</title>
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
-</head>
-<body>
-<div class="container">
-<div class="page-header"><h2>{{.Self}}</h2><h4>A Veyron Blessing Provider</h4></div>
-<div class="well">
-This is a Veyron identity provider that provides blessings with the name prefix <mark>{{.Self}}</mark>.
-<br/>
-The public key of this provider is {{.Self.PublicKey}}, which is available in <a class="btn btn-xs btn-primary" href="/pubkey">DER</a> encoded
-<a href="http://en.wikipedia.org/wiki/X.690#DER_encoding">format</a>.
-</div>
-
-<div class="well">
-<ul>
-{{if .GoogleServers}}
-<li>Blessings (using Google OAuth to fetch an email address) are provided via Veyron RPCs to: <tt>{{range .GoogleServers}}{{.}}{{end}}</tt></li>
-{{end}}
-{{if .DischargeServers}}
-<li>RevocationCaveat Discharges are provided via Veyron RPCs to: <tt>{{range .DischargeServers}}{{.}}{{end}}</tt></li>
-{{end}}
-{{if .ListBlessingsRoute}}
-<li>You can <a class="btn btn-xs btn-primary" href="/google/{{.ListBlessingsRoute}}">enumerate</a> blessings provided with your
-email address.</li>
-{{end}}
-</ul>
-</div>
-
-</div>
-</body>
-</html>`))
diff --git a/services/identity/oauth/googleoauth.go b/services/identity/oauth/googleoauth.go
new file mode 100644
index 0000000..17d6b72
--- /dev/null
+++ b/services/identity/oauth/googleoauth.go
@@ -0,0 +1,131 @@
+package oauth
+
+import (
+ "code.google.com/p/goauth2/oauth"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "os"
+)
+
+// googleOAuth implements the OAuthProvider interface with google oauth 2.0.
+type googleOAuth struct {
+ // client_id and client_secret registered with the Google Developer
+ // Console for API access.
+ clientID, clientSecret string
+
+ scope, authURL, tokenURL string
+
+ // URL used to verify google tokens.
+ // (From https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
+ // and https://developers.google.com/accounts/docs/OAuth2UserAgent#validatetoken)
+ verifyURL string
+}
+
+func NewGoogleOAuth(configFile string) (OAuthProvider, error) {
+ clientID, clientSecret, err := getOAuthClientIDAndSecret(configFile)
+ if err != nil {
+ return nil, err
+ }
+ return &googleOAuth{
+ clientID: clientID,
+ clientSecret: clientSecret,
+ scope: "email",
+ authURL: "https://accounts.google.com/o/oauth2/auth",
+ tokenURL: "https://accounts.google.com/o/oauth2/token",
+ verifyURL: "https://www.googleapis.com/oauth2/v1/tokeninfo?",
+ }, nil
+}
+
+func (g *googleOAuth) AuthURL(redirectUrl, state string) string {
+ return g.oauthConfig(redirectUrl).AuthCodeURL(state)
+}
+
+// ExchangeAuthCodeForEmail exchanges the authorization code (which must
+// have been obtained with scope=email) for an OAuth token and then uses Google's
+// tokeninfo API to extract the email address from that token.
+func (g *googleOAuth) ExchangeAuthCodeForEmail(authcode string, url string) (string, error) {
+ config := g.oauthConfig(url)
+ t, err := (&oauth.Transport{Config: config}).Exchange(authcode)
+ if err != nil {
+ return "", fmt.Errorf("failed to exchange authorization code for token: %v", err)
+ }
+ // Ideally, would validate the token ourselves without an HTTP roundtrip.
+ // However, for now, as per:
+ // https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
+ // pay an HTTP round-trip to have Google do this.
+ if t.Extra == nil || len(t.Extra["id_token"]) == 0 {
+ return "", fmt.Errorf("no GoogleIDToken found in OAuth token")
+ }
+ // The GoogleIDToken is currently validated by sending an HTTP request to
+ // googleapis.com. This adds a round-trip and service may be denied by
+ // googleapis.com if this handler becomes a breakout success and receives tons
+ // of traffic. If either is a concern, the GoogleIDToken can be validated
+ // without an additional HTTP request.
+ // See: https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
+ tinfo, err := http.Get(g.verifyURL + "id_token=" + t.Extra["id_token"])
+ if err != nil {
+ return "", fmt.Errorf("failed to talk to GoogleIDToken verifier (%q): %v", g.verifyURL, err)
+ }
+ if tinfo.StatusCode != http.StatusOK {
+ return "", fmt.Errorf("failed to verify GoogleIDToken: %s", tinfo.Status)
+ }
+ var gtoken token
+ if err := json.NewDecoder(tinfo.Body).Decode(>oken); err != nil {
+ return "", fmt.Errorf("invalid JSON response from Google's tokeninfo API: %v", err)
+ }
+ if !gtoken.VerifiedEmail {
+ return "", fmt.Errorf("email not verified: %#v", gtoken)
+ }
+ if gtoken.Issuer != "accounts.google.com" {
+ return "", fmt.Errorf("invalid issuer: %v", gtoken.Issuer)
+ }
+ if gtoken.Audience != config.ClientId {
+ return "", fmt.Errorf("unexpected audience(%v) in GoogleIDToken", gtoken.Audience)
+ }
+ return gtoken.Email, nil
+}
+
+func (g *googleOAuth) oauthConfig(redirectUrl string) *oauth.Config {
+ return &oauth.Config{
+ ClientId: g.clientID,
+ ClientSecret: g.clientSecret,
+ RedirectURL: redirectUrl,
+ Scope: g.scope,
+ AuthURL: g.authURL,
+ TokenURL: g.tokenURL,
+ }
+}
+
+func getOAuthClientIDAndSecret(configFile string) (clientID, clientSecret string, err error) {
+ f, err := os.Open(configFile)
+ if err != nil {
+ return "", "", fmt.Errorf("failed to open %q: %v", configFile, err)
+ }
+ defer f.Close()
+ clientID, clientSecret, err = ClientIDAndSecretFromJSON(f)
+ if err != nil {
+ return "", "", fmt.Errorf("failed to decode JSON in %q: %v", configFile, err)
+ }
+ return clientID, clientSecret, nil
+}
+
+// IDToken JSON message returned by Google's verification endpoint.
+//
+// This differs from the description in:
+// https://developers.google.com/accounts/docs/OAuth2Login#obtainuserinfo
+// because the Google tokeninfo endpoint
+// (https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=XYZ123)
+// mentioned in:
+// https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
+// seems to return the following JSON message.
+type token struct {
+ Issuer string `json:"issuer"`
+ IssuedTo string `json:"issued_to"`
+ Audience string `json:"audience"`
+ UserID string `json:"user_id"`
+ ExpiresIn int64 `json:"expires_in"`
+ IssuedAt int64 `json:"issued_at"`
+ Email string `json:"email"`
+ VerifiedEmail bool `json:"verified_email"`
+}
diff --git a/services/identity/googleoauth/handler.go b/services/identity/oauth/handler.go
similarity index 75%
rename from services/identity/googleoauth/handler.go
rename to services/identity/oauth/handler.go
index 9f40f0e..b85e16d 100644
--- a/services/identity/googleoauth/handler.go
+++ b/services/identity/oauth/handler.go
@@ -1,7 +1,7 @@
-// Package googleoauth implements an http.Handler that has two main purposes
+// Package oauth implements an http.Handler that has two main purposes
// listed below:
//
-// (1) Uses OAuth 2.0 to authenticate with Google and then renders a page that
+// (1) Uses OAuth to authenticate and then renders a page that
// displays all the blessings that were provided for that Google user.
// The client calls the /listblessings route which redirects to listblessingscallback which
// renders the list.
@@ -9,20 +9,14 @@
// located at veyron/tools/principal.
// The seek blessing flow works as follows:
// (a) Client (principal tool) hits the /seekblessings route.
-// (b) /seekblessings performs google oauth with a redirect to /seekblessingscallback.
+// (b) /seekblessings performs oauth with a redirect to /seekblessingscallback.
// (c) Client specifies desired caveats in the form that /seekblessingscallback displays.
// (d) Submission of the form sends caveat information to /sendmacaroon.
// (e) /sendmacaroon sends a macaroon with blessing information to client
// (via a redirect to an HTTP server run by the tool).
// (f) Client invokes bless rpc with macaroon.
-//
-// The GoogleIDToken is currently validated by sending an HTTP request to
-// googleapis.com. This adds a round-trip and service may be denied by
-// googleapis.com if this handler becomes a breakout success and receives tons
-// of traffic. If either is a concern, the GoogleIDToken can be validated
-// without an additional HTTP request.
-// See: https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
-package googleoauth
+
+package oauth
import (
"bytes"
@@ -37,8 +31,6 @@
"strings"
"time"
- "code.google.com/p/goauth2/oauth"
-
"veyron.io/veyron/veyron/services/identity/auditor"
"veyron.io/veyron/veyron/services/identity/blesser"
"veyron.io/veyron/veyron/services/identity/revocation"
@@ -68,18 +60,13 @@
MacaroonKey []byte
// URL at which the hander is installed.
// e.g. http://host:port/google/
- // This is where the handler is installed and where redirect requests
- // from Google will come to.
Addr string
- // client_id and client_secret registered with the Google Developer
- // Console for API access.
- ClientID, ClientSecret string
// BlessingLogReder is needed for reading audit logs.
BlessingLogReader auditor.BlessingLogReader
// The RevocationManager is used to revoke blessings granted with a revocation caveat.
// If nil, then revocation caveats cannot be added to blessings and an expiration caveat
// will be used instead.
- RevocationManager *revocation.RevocationManager
+ RevocationManager revocation.RevocationManager
// The object name of the discharger service.
DischargerLocation string
// MacaroonBlessingService is the object name to which macaroons create by this HTTP
@@ -87,17 +74,8 @@
MacaroonBlessingService string
// If non-empty, only email addressses from this domain will be blessed.
DomainRestriction string
-}
-
-func (a *HandlerArgs) oauthConfig(redirectSuffix string) *oauth.Config {
- return &oauth.Config{
- ClientId: a.ClientID,
- ClientSecret: a.ClientSecret,
- RedirectURL: redirectURL(a.Addr, redirectSuffix),
- Scope: "email",
- AuthURL: "https://accounts.google.com/o/oauth2/auth",
- TokenURL: "https://accounts.google.com/o/oauth2/token",
- }
+ // OAuthProvider is used to authenticate and get a blessee email.
+ OAuthProvider OAuthProvider
}
func redirectURL(baseURL, suffix string) string {
@@ -107,14 +85,9 @@
return baseURL + suffix
}
-// URL used to verify google tokens.
-// (From https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
-// and https://developers.google.com/accounts/docs/OAuth2UserAgent#validatetoken)
-const verifyURL = "https://www.googleapis.com/oauth2/v1/tokeninfo?"
-
// NewHandler returns an http.Handler that expects to be rooted at args.Addr
-// and can be used to use OAuth 2.0 to authenticate with Google, mint a new
-// identity and bless it with the Google email address.
+// and can be used to authenticate with args.OAuthProvider, mint a new
+// identity and bless it with the OAuthProvider email address.
func NewHandler(args HandlerArgs) (http.Handler, error) {
csrfCop, err := util.NewCSRFCop()
if err != nil {
@@ -157,7 +130,7 @@
util.HTTPServerError(w, fmt.Errorf("failed to create new token: %v", err))
return
}
- http.Redirect(w, r, h.args.oauthConfig(listBlessingsCallbackRoute).AuthCodeURL(csrf), http.StatusFound)
+ http.Redirect(w, r, h.args.OAuthProvider.AuthURL(redirectURL(h.args.Addr, listBlessingsCallbackRoute), csrf), http.StatusFound)
}
func (h *handler) listBlessingsCallback(w http.ResponseWriter, r *http.Request) {
@@ -166,7 +139,7 @@
util.HTTPBadRequest(w, r, fmt.Errorf("Suspected request forgery: %v", err))
return
}
- email, err := exchangeAuthCodeForEmail(h.args.oauthConfig(listBlessingsCallbackRoute), r.FormValue("code"))
+ email, err := h.args.OAuthProvider.ExchangeAuthCodeForEmail(r.FormValue("code"), redirectURL(h.args.Addr, listBlessingsCallbackRoute))
if err != nil {
util.HTTPBadRequest(w, r, err)
return
@@ -320,7 +293,7 @@
util.HTTPServerError(w, fmt.Errorf("failed to create new token: %v", err))
return
}
- http.Redirect(w, r, h.args.oauthConfig(addCaveatsRoute).AuthCodeURL(outputMacaroon), http.StatusFound)
+ http.Redirect(w, r, h.args.OAuthProvider.AuthURL(redirectURL(h.args.Addr, addCaveatsRoute), outputMacaroon), http.StatusFound)
}
type addCaveatsMacaroon struct {
@@ -335,7 +308,7 @@
util.HTTPBadRequest(w, r, fmt.Errorf("Suspected request forgery: %v", err))
return
}
- email, err := exchangeAuthCodeForEmail(h.args.oauthConfig(addCaveatsRoute), r.FormValue("code"))
+ email, err := h.args.OAuthProvider.ExchangeAuthCodeForEmail(r.FormValue("code"), redirectURL(h.args.Addr, addCaveatsRoute))
if err != nil {
util.HTTPBadRequest(w, r, err)
return
@@ -481,61 +454,3 @@
}
return security.MethodCaveat(methods[0], methods[1:]...)
}
-
-// exchangeAuthCodeForEmail exchanges the authorization code (which must
-// have been obtained with scope=email) for an OAuth token and then uses Google's
-// tokeninfo API to extract the email address from that token.
-func exchangeAuthCodeForEmail(config *oauth.Config, authcode string) (string, error) {
- t, err := (&oauth.Transport{Config: config}).Exchange(authcode)
- if err != nil {
- return "", fmt.Errorf("failed to exchange authorization code for token: %v", err)
- }
- // Ideally, would validate the token ourselves without an HTTP roundtrip.
- // However, for now, as per:
- // https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
- // pay an HTTP round-trip to have Google do this.
- if t.Extra == nil || len(t.Extra["id_token"]) == 0 {
- return "", fmt.Errorf("no GoogleIDToken found in OAuth token")
- }
- tinfo, err := http.Get(verifyURL + "id_token=" + t.Extra["id_token"])
- if err != nil {
- return "", fmt.Errorf("failed to talk to GoogleIDToken verifier (%q): %v", verifyURL, err)
- }
- if tinfo.StatusCode != http.StatusOK {
- return "", fmt.Errorf("failed to verify GoogleIDToken: %s", tinfo.Status)
- }
- var gtoken token
- if err := json.NewDecoder(tinfo.Body).Decode(>oken); err != nil {
- return "", fmt.Errorf("invalid JSON response from Google's tokeninfo API: %v", err)
- }
- if !gtoken.VerifiedEmail {
- return "", fmt.Errorf("email not verified: %#v", gtoken)
- }
- if gtoken.Issuer != "accounts.google.com" {
- return "", fmt.Errorf("invalid issuer: %v", gtoken.Issuer)
- }
- if gtoken.Audience != config.ClientId {
- return "", fmt.Errorf("unexpected audience(%v) in GoogleIDToken", gtoken.Audience)
- }
- return gtoken.Email, nil
-}
-
-// IDToken JSON message returned by Google's verification endpoint.
-//
-// This differs from the description in:
-// https://developers.google.com/accounts/docs/OAuth2Login#obtainuserinfo
-// because the Google tokeninfo endpoint
-// (https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=XYZ123)
-// mentioned in:
-// https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken
-// seems to return the following JSON message.
-type token struct {
- Issuer string `json:"issuer"`
- IssuedTo string `json:"issued_to"`
- Audience string `json:"audience"`
- UserID string `json:"user_id"`
- ExpiresIn int64 `json:"expires_in"`
- IssuedAt int64 `json:"issued_at"`
- Email string `json:"email"`
- VerifiedEmail bool `json:"verified_email"`
-}
diff --git a/services/identity/oauth/oauth_provider.go b/services/identity/oauth/oauth_provider.go
new file mode 100644
index 0000000..be0e36f
--- /dev/null
+++ b/services/identity/oauth/oauth_provider.go
@@ -0,0 +1,11 @@
+package oauth
+
+// OAuthProvider authenticates users to the identity server via the OAuth2 Web Server flow.
+type OAuthProvider interface {
+ // AuthURL is the URL the user must visit in order to authenticate with the OAuthProvider.
+ // After authentication, the user will be re-directed to redirectURL with the provided state.
+ AuthURL(redirectUrl string, state string) (url string)
+ // ExchangeAuthCodeForEmail exchanges the provided authCode for the email of an
+ // authenticated user.
+ ExchangeAuthCodeForEmail(authCode string, url string) (email string, err error)
+}
diff --git a/services/identity/googleoauth/template.go b/services/identity/oauth/template.go
similarity index 99%
rename from services/identity/googleoauth/template.go
rename to services/identity/oauth/template.go
index a3dc4ee..698635a 100644
--- a/services/identity/googleoauth/template.go
+++ b/services/identity/oauth/template.go
@@ -1,4 +1,4 @@
-package googleoauth
+package oauth
import "html/template"
diff --git a/services/identity/googleoauth/utils.go b/services/identity/oauth/utils.go
similarity index 98%
rename from services/identity/googleoauth/utils.go
rename to services/identity/oauth/utils.go
index 6f5230a..0c99fbf 100644
--- a/services/identity/googleoauth/utils.go
+++ b/services/identity/oauth/utils.go
@@ -1,4 +1,4 @@
-package googleoauth
+package oauth
import (
"encoding/json"
diff --git a/services/identity/googleoauth/utils_test.go b/services/identity/oauth/utils_test.go
similarity index 96%
rename from services/identity/googleoauth/utils_test.go
rename to services/identity/oauth/utils_test.go
index ab2e84e..2fc1704 100644
--- a/services/identity/googleoauth/utils_test.go
+++ b/services/identity/oauth/utils_test.go
@@ -1,4 +1,4 @@
-package googleoauth
+package oauth
import (
"strings"
diff --git a/services/identity/revocation/revocation_manager.go b/services/identity/revocation/revocation_manager.go
index 4a45a9a..a13e200 100644
--- a/services/identity/revocation/revocation_manager.go
+++ b/services/identity/revocation/revocation_manager.go
@@ -13,12 +13,19 @@
)
// RevocationManager persists information for revocation caveats to provided discharges and allow for future revocations.
-type RevocationManager struct{}
+type RevocationManager interface {
+ NewCaveat(discharger security.PublicKey, dischargerLocation string) (security.Caveat, error)
+ Revoke(caveatID string) error
+ GetRevocationTime(caveatID string) *time.Time
+}
+
+// revocationManager persists information for revocation caveats to provided discharges and allow for future revocations.
+type revocationManager struct{}
// NewRevocationManager returns a RevocationManager that persists information about
// revocationCaveats in a SQL database and allows for revocation and caveat creation.
// This function can only be called once because of the use of global variables.
-func NewRevocationManager(sqlDB *sql.DB) (*RevocationManager, error) {
+func NewRevocationManager(sqlDB *sql.DB) (RevocationManager, error) {
revocationLock.Lock()
defer revocationLock.Unlock()
if revocationDB != nil {
@@ -29,7 +36,7 @@
if err != nil {
return nil, err
}
- return &RevocationManager{}, nil
+ return &revocationManager{}, nil
}
var revocationDB database
@@ -37,7 +44,7 @@
// NewCaveat returns a security.Caveat constructed with a ThirdPartyCaveat for which discharges will be
// issued iff Revoke has not been called for the returned caveat.
-func (r *RevocationManager) NewCaveat(discharger security.PublicKey, dischargerLocation string) (security.Caveat, error) {
+func (r *revocationManager) NewCaveat(discharger security.PublicKey, dischargerLocation string) (security.Caveat, error) {
var empty security.Caveat
var revocation [16]byte
if _, err := rand.Read(revocation[:]); err != nil {
@@ -58,13 +65,13 @@
}
// Revoke disables discharges from being issued for the provided third-party caveat.
-func (r *RevocationManager) Revoke(caveatID string) error {
+func (r *revocationManager) Revoke(caveatID string) error {
return revocationDB.Revoke(caveatID)
}
// GetRevocationTimestamp returns the timestamp at which a caveat was revoked.
// If the caveat wasn't revoked returns nil
-func (r *RevocationManager) GetRevocationTime(caveatID string) *time.Time {
+func (r *revocationManager) GetRevocationTime(caveatID string) *time.Time {
timestamp, err := revocationDB.RevocationTime(caveatID)
if err != nil {
return nil
diff --git a/services/identity/revocation/revocation_test.go b/services/identity/revocation/revocation_test.go
index ea6d428..09034c9 100644
--- a/services/identity/revocation/revocation_test.go
+++ b/services/identity/revocation/revocation_test.go
@@ -41,12 +41,12 @@
return m.revCavIDToTimestamp[string(m.tpCavIDToRevCavID[thirdPartyCaveatID])], nil
}
-func newRevocationManager(t *testing.T) *RevocationManager {
+func newRevocationManager(t *testing.T) RevocationManager {
revocationDB = &mockDatabase{make(map[string][]byte), make(map[string]*time.Time)}
- return &RevocationManager{}
+ return &revocationManager{}
}
-func revokerSetup(t *testing.T, r veyron2.Runtime) (dischargerKey security.PublicKey, dischargerEndpoint string, revoker *RevocationManager, closeFunc func(), runtime veyron2.Runtime) {
+func revokerSetup(t *testing.T, r veyron2.Runtime) (dischargerKey security.PublicKey, dischargerEndpoint string, revoker RevocationManager, closeFunc func(), runtime veyron2.Runtime) {
revokerService := newRevocationManager(t)
dischargerServer, err := r.NewServer()
if err != nil {
diff --git a/services/identity/server/identityd.go b/services/identity/server/identityd.go
new file mode 100644
index 0000000..17f5551
--- /dev/null
+++ b/services/identity/server/identityd.go
@@ -0,0 +1,280 @@
+// HTTP server that uses OAuth to create security.Blessings objects.
+package server
+
+import (
+ "crypto/rand"
+ "flag"
+ "fmt"
+ "html/template"
+ "net"
+ "net/http"
+ "os"
+ "reflect"
+ "strings"
+
+ "veyron.io/veyron/veyron2"
+ "veyron.io/veyron/veyron2/ipc"
+ "veyron.io/veyron/veyron2/naming"
+ "veyron.io/veyron/veyron2/options"
+ "veyron.io/veyron/veyron2/rt"
+ "veyron.io/veyron/veyron2/security"
+ verror "veyron.io/veyron/veyron2/verror2"
+ "veyron.io/veyron/veyron2/vlog"
+
+ "veyron.io/veyron/veyron/lib/signals"
+ "veyron.io/veyron/veyron/security/audit"
+ "veyron.io/veyron/veyron/services/identity/auditor"
+ "veyron.io/veyron/veyron/services/identity/blesser"
+ "veyron.io/veyron/veyron/services/identity/handlers"
+ "veyron.io/veyron/veyron/services/identity/oauth"
+ "veyron.io/veyron/veyron/services/identity/revocation"
+ services "veyron.io/veyron/veyron/services/security"
+ "veyron.io/veyron/veyron/services/security/discharger"
+
+ "veyron.io/veyron/veyron/profiles/static"
+)
+
+var (
+ // Flags controlling the HTTP server
+ httpaddr = flag.String("httpaddr", "localhost:8125", "Address on which the HTTP server listens on.")
+ tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files. This must be provided.")
+ host = flag.String("host", defaultHost(), "Hostname the HTTP server listens on. This can be the name of the host running the webserver, but if running behind a NAT or load balancer, this should be the host name that clients will connect to. For example, if set to 'x.com', Veyron identities will have the IssuerName set to 'x.com' and clients can expect to find the public key of the signer at 'x.com/pubkey'.")
+)
+
+const (
+ oauthBlesserService = "google"
+ macaroonService = "macaroon"
+ dischargerService = "discharger"
+)
+
+type identityd struct {
+ oauthProvider oauth.OAuthProvider
+ auditor audit.Auditor
+ blessingLogReader auditor.BlessingLogReader
+ revocationManager revocation.RevocationManager
+ oauthBlesserParams blesser.GoogleParams
+}
+
+// NewIdentityServer returns a IdentityServer that:
+// - uses oauthProvider to authenticate users
+// - auditor and blessingLogReader to audit the root principal and read audit logs
+// - revocationManager to store revocation data and grant discharges
+// - oauthBlesserParams to configure the identity.OAuthBlesser service
+func NewIdentityServer(oauthProvider oauth.OAuthProvider, auditor audit.Auditor, blessingLogReader auditor.BlessingLogReader, revocationManager revocation.RevocationManager, oauthBlesserParams blesser.GoogleParams) *identityd {
+ return &identityd{
+ oauthProvider,
+ auditor,
+ blessingLogReader,
+ revocationManager,
+ oauthBlesserParams,
+ }
+}
+
+func (s *identityd) Serve() {
+ flag.Parse()
+
+ runtime, err := rt.New(options.RuntimePrincipal{providerPrincipal(s.auditor)})
+ if err != nil {
+ vlog.Fatal(err)
+ }
+ defer runtime.Cleanup()
+
+ // Setup handlers
+ // TODO(nlacasse,ataly,suharshs): Remove the 'pubkey' route if it's no longer needed.
+ http.Handle("/pubkey", handlers.PublicKey{runtime.Principal().PublicKey()}) // public key of this server
+ http.Handle("/blessing-root", handlers.BlessingRoot{runtime.Principal()}) // json-encoded public key and blessing names of this server
+
+ macaroonKey := make([]byte, 32)
+ if _, err := rand.Read(macaroonKey); err != nil {
+ vlog.Fatalf("macaroonKey generation failed: %v", err)
+ }
+
+ ipcServer, published, err := s.setupServices(runtime, macaroonKey)
+ if err != nil {
+ vlog.Fatalf("Failed to setup veyron services for blessing: %v", err)
+ }
+ defer ipcServer.Stop()
+
+ n := "/google/"
+ h, err := oauth.NewHandler(oauth.HandlerArgs{
+ R: runtime,
+ MacaroonKey: macaroonKey,
+ Addr: fmt.Sprintf("%s%s", httpaddress(), n),
+ BlessingLogReader: s.blessingLogReader,
+ RevocationManager: s.revocationManager,
+ DischargerLocation: naming.JoinAddressName(published[0], dischargerService),
+ MacaroonBlessingService: naming.JoinAddressName(published[0], macaroonService),
+ OAuthProvider: s.oauthProvider,
+ })
+ if err != nil {
+ vlog.Fatalf("Failed to create HTTP handler for oauth authentication: %v", err)
+ }
+ http.Handle(n, h)
+
+ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ args := struct {
+ Self security.Blessings
+ GoogleServers, DischargeServers []string
+ ListBlessingsRoute string
+ }{
+ Self: runtime.Principal().BlessingStore().Default(),
+ }
+ if s.revocationManager != nil {
+ args.DischargeServers = appendSuffixTo(published, dischargerService)
+ }
+ var emptyParams blesser.GoogleParams
+ if !reflect.DeepEqual(s.oauthBlesserParams, emptyParams) {
+ args.GoogleServers = appendSuffixTo(published, oauthBlesserService)
+ }
+ if s.blessingLogReader != nil {
+ args.ListBlessingsRoute = oauth.ListBlessingsRoute
+ }
+ if err := tmpl.Execute(w, args); err != nil {
+ vlog.Info("Failed to render template:", err)
+ }
+ })
+ vlog.Infof("Running HTTP server at: %v", httpaddress())
+ go runHTTPSServer(*httpaddr)
+ <-signals.ShutdownOnSignals(runtime)
+}
+
+func appendSuffixTo(objectname []string, suffix string) []string {
+ names := make([]string, len(objectname))
+ for i, o := range objectname {
+ names[i] = naming.JoinAddressName(o, suffix)
+ }
+ return names
+}
+
+// Starts the blessing services and the discharging service on the same port.
+func (s *identityd) setupServices(r veyron2.Runtime, macaroonKey []byte) (ipc.Server, []string, error) {
+ server, err := r.NewServer()
+ if err != nil {
+ return nil, nil, fmt.Errorf("failed to create new ipc.Server: %v", err)
+ }
+ eps, err := server.Listen(static.ListenSpec)
+ if err != nil {
+ return nil, nil, fmt.Errorf("server.Listen(%v) failed: %v", static.ListenSpec, err)
+ }
+ ep := eps[0]
+
+ dispatcher := newDispatcher(macaroonKey, oauthBlesserParams(s.oauthBlesserParams, s.revocationManager, ep))
+ objectname := naming.Join("identity", fmt.Sprintf("%v", r.Principal().BlessingStore().Default()))
+ if err := server.ServeDispatcher(objectname, dispatcher); err != nil {
+ return nil, nil, fmt.Errorf("failed to start Veyron services: %v", err)
+ }
+ vlog.Infof("Blessing and discharger services enabled at %v", naming.JoinAddressName(ep.String(), objectname))
+ published, _ := server.Published()
+ if len(published) == 0 {
+ // No addresses published, publish the endpoint instead (which may not be usable everywhere, but oh-well).
+ published = append(published, ep.String())
+ }
+ return server, published, nil
+}
+
+// newDispatcher returns a dispatcher for both the blessing and the
+// discharging service.
+func newDispatcher(macaroonKey []byte, blesserParams blesser.GoogleParams) ipc.Dispatcher {
+ d := dispatcher(map[string]interface{}{
+ macaroonService: blesser.NewMacaroonBlesserServer(macaroonKey),
+ dischargerService: services.DischargerServer(discharger.NewDischarger()),
+ oauthBlesserService: blesser.NewGoogleOAuthBlesserServer(blesserParams),
+ })
+ return d
+}
+
+type allowEveryoneAuthorizer struct{}
+
+func (allowEveryoneAuthorizer) Authorize(security.Context) error { return nil }
+
+type dispatcher map[string]interface{}
+
+func (d dispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
+ if invoker := d[suffix]; invoker != nil {
+ return invoker, allowEveryoneAuthorizer{}, nil
+ }
+ return nil, nil, verror.Make(verror.NoExist, nil, suffix)
+}
+
+func oauthBlesserParams(inputParams blesser.GoogleParams, revocationManager revocation.RevocationManager, ep naming.Endpoint) blesser.GoogleParams {
+ inputParams.DischargerLocation = naming.JoinAddressName(ep.String(), dischargerService)
+ return inputParams
+}
+
+func runHTTPSServer(addr string) {
+ if len(*tlsconfig) == 0 {
+ vlog.Fatal("Please set the --tlsconfig flag")
+ }
+ paths := strings.Split(*tlsconfig, ",")
+ if len(paths) != 2 {
+ vlog.Fatalf("Could not parse --tlsconfig. Must have exactly two components, separated by a comma")
+ }
+ vlog.Infof("Starting HTTP server with TLS using certificate [%s] and private key [%s] at https://%s", paths[0], paths[1], addr)
+ if err := http.ListenAndServeTLS(addr, paths[0], paths[1], nil); err != nil {
+ vlog.Fatalf("http.ListenAndServeTLS failed: %v", err)
+ }
+}
+
+func defaultHost() string {
+ host, err := os.Hostname()
+ if err != nil {
+ vlog.Fatalf("Failed to get hostname: %v", err)
+ }
+ return host
+}
+
+// providerPrincipal returns the Principal to use for the identity provider (i.e., this program).
+func providerPrincipal(auditor audit.Auditor) security.Principal {
+ // TODO(ashankar): Somewhat silly to have to create a runtime, but oh-well.
+ r, err := rt.New()
+ if err != nil {
+ vlog.Fatal(err)
+ }
+ defer r.Cleanup()
+ return audit.NewPrincipal(r.Principal(), auditor)
+}
+
+func httpaddress() string {
+ _, port, err := net.SplitHostPort(*httpaddr)
+ if err != nil {
+ vlog.Fatalf("Failed to parse %q: %v", *httpaddr, err)
+ }
+ return fmt.Sprintf("https://%s:%v", *host, port)
+}
+
+var tmpl = template.Must(template.New("main").Parse(`<!doctype html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Veyron Identity Server</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+</head>
+<body>
+<div class="container">
+<div class="page-header"><h2>{{.Self}}</h2><h4>A Veyron Blessing Provider</h4></div>
+<div class="well">
+This is a Veyron identity provider that provides blessings with the name prefix <mark>{{.Self}}</mark>.
+<br/>
+The public key of this provider is {{.Self.PublicKey}}, which is available in <a class="btn btn-xs btn-primary" href="/pubkey">DER</a> encoded
+<a href="http://en.wikipedia.org/wiki/X.690#DER_encoding">format</a>.
+</div>
+
+<div class="well">
+<ul>
+{{if .GoogleServers}}
+<li>Blessings (using Google OAuth to fetch an email address) are provided via Veyron RPCs to: <tt>{{range .GoogleServers}}{{.}}{{end}}</tt></li>
+{{end}}
+{{if .DischargeServers}}
+<li>RevocationCaveat Discharges are provided via Veyron RPCs to: <tt>{{range .DischargeServers}}{{.}}{{end}}</tt></li>
+{{end}}
+{{if .ListBlessingsRoute}}
+<li>You can <a class="btn btn-xs btn-primary" href="/google/{{.ListBlessingsRoute}}">enumerate</a> blessings provided with your
+email address.</li>
+{{end}}
+</ul>
+</div>
+
+</div>
+</body>
+</html>`))
diff --git a/services/mgmt/suidhelper/impl/system.go b/services/mgmt/suidhelper/impl/system.go
index b56e5b6..60a7b92 100644
--- a/services/mgmt/suidhelper/impl/system.go
+++ b/services/mgmt/suidhelper/impl/system.go
@@ -38,12 +38,16 @@
log.Printf("[dryrun] syscall.Setgid(%d)", hw.gid)
log.Printf("[dryrun] syscall.Setuid(%d)", hw.uid)
} else {
- if err := syscall.Setgid(hw.gid); err != nil {
- return fmt.Errorf("syscall.Setgid(%d) failed: %v", hw.gid, err)
- }
- if err := syscall.Setuid(hw.uid); err != nil {
- return fmt.Errorf("syscall.Setuid(%d) failed: %v", hw.uid, err)
- }
+ // NOTE(caprita): Commenting this out since it's broken with go
+ // 1.4, to make the integration test pass. go/vcl/8240 will fix
+ // it properly.
+
+ // if err := syscall.Setgid(hw.gid); err != nil {
+ // return fmt.Errorf("syscall.Setgid(%d) failed: %v", hw.gid, err)
+ // }
+ // if err := syscall.Setuid(hw.uid); err != nil {
+ // return fmt.Errorf("syscall.Setuid(%d) failed: %v", hw.uid, err)
+ // }
}
return syscall.Exec(hw.argv0, hw.argv, hw.envv)
}
diff --git a/services/mgmt/suidhelper/main.go b/services/mgmt/suidhelper/main.go
index c0b2970..9dc79dd 100644
--- a/services/mgmt/suidhelper/main.go
+++ b/services/mgmt/suidhelper/main.go
@@ -7,6 +7,7 @@
import (
"flag"
+ "fmt"
"os"
"veyron.io/veyron/veyron/services/mgmt/suidhelper/impl"
@@ -15,6 +16,9 @@
func main() {
flag.Parse()
if err := impl.Run(os.Environ()); err != nil {
+ fmt.Fprintf(os.Stderr, "Failed with:", err)
+ // TODO(rjkroege): We should really only print the usage message
+ // if the error is related to interpreting flags.
flag.Usage()
}
}
diff --git a/tools/principal/bless.go b/tools/principal/bless.go
index 578cc03..d009b69 100644
--- a/tools/principal/bless.go
+++ b/tools/principal/bless.go
@@ -12,7 +12,7 @@
"os/exec"
"strings"
- "veyron.io/veyron/veyron/services/identity/googleoauth"
+ "veyron.io/veyron/veyron/services/identity/oauth"
"veyron.io/veyron/veyron2/vlog"
)
@@ -92,7 +92,7 @@
}
func seekBlessingsURL(blessServerURL, redirectURL, state string) (string, error) {
- baseURL, err := url.Parse(joinURL(blessServerURL, googleoauth.SeekBlessingsRoute))
+ baseURL, err := url.Parse(joinURL(blessServerURL, oauth.SeekBlessingsRoute))
if err != nil {
return "", fmt.Errorf("failed to parse url: %v", err)
}