Merge "runtimes/google/ipc: another attempt to fix flaky tests"
diff --git a/lib/testutil/stats.go b/lib/testutil/stats.go
index 976696a..54297df 100644
--- a/lib/testutil/stats.go
+++ b/lib/testutil/stats.go
@@ -43,6 +43,12 @@
stats.dirty = true
}
+// Clear resets the stats, removing all values.
+func (stats *BenchStats) Clear() {
+ stats.durations = stats.durations[:0]
+ stats.dirty = true
+}
+
// maybeUpdate updates internal stat data if there was any newly added
// stats since this was updated.
func (stats *BenchStats) maybeUpdate() {
diff --git a/runtimes/google/ipc/benchmarks/README.txt b/runtimes/google/ipc/benchmarks/README.txt
index f480100..a63e453 100644
--- a/runtimes/google/ipc/benchmarks/README.txt
+++ b/runtimes/google/ipc/benchmarks/README.txt
@@ -1,6 +1,8 @@
This directory contains code uses to measure the performance of the Veyron IPC
stack.
+================================================================================
+
The ipc_test.go file uses GO's testing package to run benchmarks. Each
benchmark involves one server and one client. The server has two very simple
methods that echo the data received from the client back to the client.
@@ -13,49 +15,63 @@
- EchoStream() <[]byte,[]byte> error
The first benchmarks use the non-streaming version of Echo with a varying
-payload size. The other benchmarks use the streaming version with varying
-number of chunks and payload sizes.
+payload size. The second benchmarks use the streaming version with varying
+number of chunks and payload sizes. The third one is for measuring the
+performance with multiple clients hosted in the same process.
All these benchmarks create a VC before measurements begin. So, the VC creation
overhead is excluded.
-On a ThinkPad X1 Carbon (2 × Intel(R) Core(TM) i7-3667U CPU @ 2.00GHz), we get:
+$ veyron go test -test.bench=. -timeout=1h -test.cpu=1 -test.benchtime=5s \
+ veyron/runtimes/google/ipc/benchmarks
-$ veyron go test -test.bench=. -test.cpu=1 \
- -test.benchtime=5s veyron/runtimes/google/ipc/benchmarks 2> /dev/null
-PASS
-Benchmark____1B 10000 545077 ns/op
-Benchmark___10B 10000 587312 ns/op
-Benchmark__100B 10000 523019 ns/op
-Benchmark___1KB 10000 605235 ns/op
-Benchmark__10KB 10000 957467 ns/op
-Benchmark_100KB 5000 4101891 ns/op
-Benchmark_N_RPCs____1_chunk_____1B 10000 554063 ns/op
-Benchmark_N_RPCs____1_chunk____10B 10000 551424 ns/op
-Benchmark_N_RPCs____1_chunk___100B 10000 538308 ns/op
-Benchmark_N_RPCs____1_chunk____1KB 10000 585579 ns/op
-Benchmark_N_RPCs____1_chunk___10KB 10000 904789 ns/op
-Benchmark_N_RPCs___10_chunks___1KB 10000 1460984 ns/op
-Benchmark_N_RPCs__100_chunks___1KB 1000 8491514 ns/op
-Benchmark_N_RPCs_1000_chunks___1KB 100 105269359 ns/op
-Benchmark_1_RPC_N_chunks_____1B 200000 763769 ns/op
-Benchmark_1_RPC_N_chunks____10B 100000 583134 ns/op
-Benchmark_1_RPC_N_chunks___100B 100000 80849 ns/op
-Benchmark_1_RPC_N_chunks____1KB 100000 88820 ns/op
-Benchmark_1_RPC_N_chunks___10KB 50000 361596 ns/op
-Benchmark_1_RPC_N_chunks__100KB 5000 3127193 ns/op
-ok veyron/runtimes/google/ipc/benchmarks 525.095s
+Benchmark____1B 2000 3895391 ns/op 0.00 MB/s
+Benchmark___10B 2000 3982372 ns/op 0.01 MB/s
+Benchmark___1KB 5000 3251297 ns/op 0.62 MB/s
+Benchmark_100KB 2000 6244664 ns/op 32.03 MB/s
+Benchmark____1_chunk_____1B 5000 4070866 ns/op 0.00 MB/s
+Benchmark____1_chunk____10B 2000 4242328 ns/op 0.00 MB/s
+Benchmark____1_chunk____1KB 2000 3679679 ns/op 0.54 MB/s
+Benchmark____1_chunk___10KB 2000 4070936 ns/op 4.91 MB/s
+Benchmark___10_chunks____1B 2000 3828552 ns/op 0.01 MB/s
+Benchmark___10_chunks___10B 5000 3685269 ns/op 0.05 MB/s
+Benchmark___10_chunks___1KB 2000 6831116 ns/op 2.93 MB/s
+Benchmark___10_chunks__10KB 1000 9662880 ns/op 20.70 MB/s
+Benchmark__100_chunks____1B 2000 8938980 ns/op 0.02 MB/s
+Benchmark__100_chunks___10B 2000 5924969 ns/op 0.34 MB/s
+Benchmark__100_chunks___1KB 500 37264103 ns/op 5.37 MB/s
+Benchmark__100_chunks__10KB 100 64999728 ns/op 30.77 MB/s
+Benchmark__per_chunk____1B 500000 1535312 ns/op 0.00 MB/s
+Benchmark__per_chunk___10B 2000 9416017 ns/op 0.00 MB/s
+Benchmark__per_chunk___1KB 1000 7803789 ns/op 0.26 MB/s
+Benchmark__per_chunk__10KB 1000 7828585 ns/op 2.55 MB/s
+Benchmark____1B_mux___10_chunks___10B 1000 9233379 ns/op 0.00 MB/s
+Benchmark____1B_mux___10_chunks___1KB 1000 8639613 ns/op 0.00 MB/s
+Benchmark____1B_mux__100_chunks___10B 500 30530925 ns/op 0.00 MB/s
+Benchmark____1B_mux__100_chunks___1KB 200 40886630 ns/op 0.00 MB/s
-
-The Benchmark_Simple_____1KB line shows that it takes an average of 0.605 ms to
+'Benchmark___1KB' shows that it takes an average of 3.251 ms to
execute a simple Echo RPC with a 1 KB payload.
-The Benchmark_N_RPCs____1_chunk____1KB line shows that a streaming RPC with the
-same payload (i.e. 1 chunk of 1 KB) takes about 0.586 ms on average.
+'Benchmark___10_chunks___1KB' shows that a streaming RPC with the
+same payload (i.e. 10 chunks of 1 KB) takes about 6.831 ms on average.
-And Benchmark_1_RPC_N_chunks____1KB shows that sending a stream of 1 KB chunks
-takes an average of 0.088 ms per chunk.
+'Benchmark__per_chunk___1KB' shows that sending a stream of 1 KB chunks
+takes an average of 7.804 ms per chunk.
+'Benchmark____1B_mux___10_chunks___1KB' shows that it takes an average
+of 9.233 ms to execute a simple Echo RPC with a 1 B payload while streaming
+10 chunks of 1 KB payloads continuously in the same process.
+
+bm/main.go does the same benchmarks as ipc_test.go but with more varying
+configurations and optional histogram outputs.
+
+$ veyron go run veyron/runtimes/google/ipc/benchmarks/bm/main.go \
+ -test.cpu=1,2 -test.benchtime=5s -histogram
+
+RESULTS.txt has the latest benchmark results with main.go
+
+================================================================================
Running the client and server as separate processes.
@@ -127,4 +143,3 @@
CallEcho 9 53166000
On the pi, the first RPC takes ~2.5 sec to execute.
-
diff --git a/runtimes/google/ipc/benchmarks/RESULTS.txt b/runtimes/google/ipc/benchmarks/RESULTS.txt
new file mode 100644
index 0000000..c04a1ea
--- /dev/null
+++ b/runtimes/google/ipc/benchmarks/RESULTS.txt
@@ -0,0 +1,2136 @@
+Date: 10/12/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 10000 1347426 ns/op 0.00 MB/s
+Benchmark____1B-2 10000 1241765 ns/op 0.00 MB/s
+Benchmark___10B 5000 1521595 ns/op 0.01 MB/s
+Benchmark___10B-2 10000 1345906 ns/op 0.01 MB/s
+Benchmark__100B 5000 1627288 ns/op 0.12 MB/s
+Benchmark__100B-2 10000 1395559 ns/op 0.14 MB/s
+Benchmark___1KB 5000 1548449 ns/op 1.29 MB/s
+Benchmark___1KB-2 10000 1296259 ns/op 1.54 MB/s
+Benchmark__10KB 5000 1960759 ns/op 10.20 MB/s
+Benchmark__10KB-2 10000 1516984 ns/op 13.18 MB/s
+Benchmark_100KB 2000 4950737 ns/op 40.40 MB/s
+Benchmark_100KB-2 5000 3536973 ns/op 56.55 MB/s
+Benchmark____1_chunk_____1B 5000 1733706 ns/op 0.00 MB/s
+Benchmark____1_chunk_____1B-2 10000 1549342 ns/op 0.00 MB/s
+Benchmark____1_chunk____10B 5000 1841027 ns/op 0.01 MB/s
+Benchmark____1_chunk____10B-2 5000 1645809 ns/op 0.01 MB/s
+Benchmark____1_chunk___100B 5000 1891259 ns/op 0.11 MB/s
+Benchmark____1_chunk___100B-2 5000 1720838 ns/op 0.12 MB/s
+Benchmark____1_chunk____1KB 5000 1834957 ns/op 1.09 MB/s
+Benchmark____1_chunk____1KB-2 5000 1641668 ns/op 1.22 MB/s
+Benchmark____1_chunk___10KB 5000 2169053 ns/op 9.22 MB/s
+Benchmark____1_chunk___10KB-2 5000 1825946 ns/op 10.95 MB/s
+Benchmark____1_chunk__100KB 2000 4712135 ns/op 42.44 MB/s
+Benchmark____1_chunk__100KB-2 5000 3674554 ns/op 54.43 MB/s
+Benchmark___10_chunks____1B 5000 2281402 ns/op 0.01 MB/s
+Benchmark___10_chunks____1B-2 5000 1959491 ns/op 0.01 MB/s
+Benchmark___10_chunks___10B 5000 2539394 ns/op 0.08 MB/s
+Benchmark___10_chunks___10B-2 5000 2019503 ns/op 0.10 MB/s
+Benchmark___10_chunks__100B 5000 2950881 ns/op 0.68 MB/s
+Benchmark___10_chunks__100B-2 5000 2239554 ns/op 0.89 MB/s
+Benchmark___10_chunks___1KB 5000 3151938 ns/op 6.35 MB/s
+Benchmark___10_chunks___1KB-2 5000 2323991 ns/op 8.61 MB/s
+Benchmark___10_chunks__10KB 2000 6023388 ns/op 33.20 MB/s
+Benchmark___10_chunks__10KB-2 2000 3955363 ns/op 50.56 MB/s
+Benchmark___10_chunks_100KB 500 31665379 ns/op 63.16 MB/s
+Benchmark___10_chunks_100KB-2 500 18414841 ns/op 108.61 MB/s
+Benchmark__100_chunks____1B 5000 4505724 ns/op 0.04 MB/s
+Benchmark__100_chunks____1B-2 5000 3512335 ns/op 0.06 MB/s
+Benchmark__100_chunks___10B 1000 8713484 ns/op 0.23 MB/s
+Benchmark__100_chunks___10B-2 2000 4561723 ns/op 0.44 MB/s
+Benchmark__100_chunks__100B 1000 10864592 ns/op 1.84 MB/s
+Benchmark__100_chunks__100B-2 2000 6852262 ns/op 2.92 MB/s
+Benchmark__100_chunks___1KB 1000 13501720 ns/op 14.81 MB/s
+Benchmark__100_chunks___1KB-2 1000 8613532 ns/op 23.22 MB/s
+Benchmark__100_chunks__10KB 200 39616552 ns/op 50.48 MB/s
+Benchmark__100_chunks__10KB-2 500 23658254 ns/op 84.54 MB/s
+Benchmark__100_chunks_100KB 50 276789691 ns/op 72.26 MB/s
+Benchmark__100_chunks_100KB-2 100 154635652 ns/op 129.34 MB/s
+Benchmark___1K_chunks____1B 500 39420649 ns/op 0.05 MB/s
+Benchmark___1K_chunks____1B-2 500 29693618 ns/op 0.07 MB/s
+Benchmark___1K_chunks___10B 100 83758352 ns/op 0.24 MB/s
+Benchmark___1K_chunks___10B-2 200 48382055 ns/op 0.41 MB/s
+Benchmark___1K_chunks__100B 100 106033135 ns/op 1.89 MB/s
+Benchmark___1K_chunks__100B-2 100 62612895 ns/op 3.19 MB/s
+Benchmark___1K_chunks___1KB 100 137482628 ns/op 14.55 MB/s
+Benchmark___1K_chunks___1KB-2 100 79534604 ns/op 25.15 MB/s
+Benchmark___1K_chunks__10KB 20 405074363 ns/op 49.37 MB/s
+Benchmark___1K_chunks__10KB-2 50 219752224 ns/op 91.01 MB/s
+Benchmark___1K_chunks_100KB 2 2735626324 ns/op 73.11 MB/s
+Benchmark___1K_chunks_100KB-2 5 1536631217 ns/op 130.15 MB/s
+Benchmark__per_chunk____1B 200000 1142388 ns/op 0.00 MB/s
+Benchmark__per_chunk____1B-2 10000 2615337 ns/op 0.00 MB/s
+Benchmark__per_chunk___10B 5000 5240078 ns/op 0.00 MB/s
+Benchmark__per_chunk___10B-2 5000 3873372 ns/op 0.01 MB/s
+Benchmark__per_chunk__100B 2000 4133802 ns/op 0.05 MB/s
+Benchmark__per_chunk__100B-2 5000 4392527 ns/op 0.05 MB/s
+Benchmark__per_chunk___1KB 2000 4073315 ns/op 0.49 MB/s
+Benchmark__per_chunk___1KB-2 2000 4173645 ns/op 0.48 MB/s
+Benchmark__per_chunk__10KB 1000 6355059 ns/op 3.15 MB/s
+Benchmark__per_chunk__10KB-2 2000 4659057 ns/op 4.29 MB/s
+Benchmark__per_chunk_100KB 1000 9065425 ns/op 22.06 MB/s
+Benchmark__per_chunk_100KB-2 2000 5900078 ns/op 33.90 MB/s
+Benchmark___10B_mux__100_chunks___10B 1000 8940566 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___10B-2 5000 3061921 ns/op 0.01 MB/s
+Benchmark___10B_mux__100_chunks__100B 1000 10060243 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks__100B-2 2000 4415919 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___1KB 1000 11654085 ns/op 0.00 MB/s
+Benchmark___10B_mux__100_chunks___1KB-2 2000 4707737 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___10B 100 62531874 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___10B-2 500 17551728 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks__100B 100 75553069 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks__100B-2 500 24959801 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___1KB 100 79070593 ns/op 0.00 MB/s
+Benchmark___10B_mux___1K_chunks___1KB-2 500 20596205 ns/op 0.00 MB/s
+Benchmark__100B_mux__100_chunks___10B 2000 10355660 ns/op 0.02 MB/s
+Benchmark__100B_mux__100_chunks___10B-2 5000 3570382 ns/op 0.06 MB/s
+Benchmark__100B_mux__100_chunks__100B 1000 12339288 ns/op 0.02 MB/s
+Benchmark__100B_mux__100_chunks__100B-2 2000 5116350 ns/op 0.04 MB/s
+Benchmark__100B_mux__100_chunks___1KB 1000 14696248 ns/op 0.01 MB/s
+Benchmark__100B_mux__100_chunks___1KB-2 2000 5375339 ns/op 0.04 MB/s
+Benchmark__100B_mux___1K_chunks___10B 100 70735100 ns/op 0.00 MB/s
+Benchmark__100B_mux___1K_chunks___10B-2 500 17267283 ns/op 0.01 MB/s
+Benchmark__100B_mux___1K_chunks__100B 100 72232967 ns/op 0.00 MB/s
+Benchmark__100B_mux___1K_chunks__100B-2 500 25789652 ns/op 0.01 MB/s
+Benchmark__100B_mux___1K_chunks___1KB 100 87959533 ns/op 0.00 MB/s
+Benchmark__100B_mux___1K_chunks___1KB-2 500 22515508 ns/op 0.01 MB/s
+
+% The followings are the full output with histograms.
+
+================================================================================
+Echo RPC
+================================================================================
+Benchmark____1B 10000 1347426 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 10000 Min: 1 Max: 4 Avg: 1.16
+------------------------------------------------------------
+[ 1, 2) 8730 87.3% 87.3% #########
+[ 2, 3) 910 9.1% 96.4% #
+[ 3, 4) 359 3.6% 100.0%
+[ 4, 5) 1 0.0% 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____1B-2 10000 1241765 ns/op 0.00 MB/s
+Histogram (unit: us)
+Count: 10000 Min: 908 Max: 4837 Avg: 1240.94
+------------------------------------------------------------
+[ 908, 909) 1 0.0% 0.0%
+[ 909, 910) 1 0.0% 0.0%
+[ 910, 913) 2 0.0% 0.0%
+[ 913, 918) 1 0.0% 0.1%
+[ 918, 927) 6 0.1% 0.1%
+[ 927, 942) 29 0.3% 0.4%
+[ 942, 969) 182 1.8% 2.2%
+[ 969, 1016) 1701 17.0% 19.2% ##
+[ 1016, 1098) 4180 41.8% 61.0% ####
+[ 1098, 1241) 2657 26.6% 87.6% ###
+[ 1241, 1489) 464 4.6% 92.2%
+[ 1489, 1921) 36 0.4% 92.6%
+[ 1921, 2671) 101 1.0% 93.6%
+[ 2671, 3974) 531 5.3% 98.9% #
+[ 3974, 6236) 108 1.1% 100.0%
+[ 6236, 10165) 0 0.0% 100.0%
+[10165, inf) 0 0.0% 100.0%
+Benchmark___10B 5000 1521595 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 10 Avg: 1.28
+------------------------------------------------------------
+[ 1, 2) 4713 94.3% 94.3% #########
+[ 2, 3) 9 0.2% 94.4%
+[ 3, 4) 1 0.0% 94.5%
+[ 4, 5) 2 0.0% 94.5%
+[ 5, 6) 67 1.3% 95.8%
+[ 6, 8) 201 4.0% 99.9%
+[ 8, 10) 6 0.1% 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___10B-2 10000 1345906 ns/op 0.01 MB/s
+Histogram (unit: us)
+Count: 10000 Min: 933 Max: 7348 Avg: 1345.04
+------------------------------------------------------------
+[ 933, 934) 1 0.0% 0.0%
+[ 934, 935) 0 0.0% 0.0%
+[ 935, 938) 0 0.0% 0.0%
+[ 938, 943) 1 0.0% 0.0%
+[ 943, 953) 9 0.1% 0.1%
+[ 953, 971) 34 0.3% 0.5%
+[ 971, 1004) 359 3.6% 4.0%
+[ 1004, 1063) 1750 17.5% 21.5% ##
+[ 1063, 1170) 3524 35.2% 56.8% ####
+[ 1170, 1362) 3531 35.3% 92.1% ####
+[ 1362, 1707) 326 3.3% 95.4%
+[ 1707, 2326) 13 0.1% 95.5%
+[ 2326, 3437) 0 0.0% 95.5%
+[ 3437, 5430) 251 2.5% 98.0%
+[ 5430, 9005) 201 2.0% 100.0%
+[ 9005, 15419) 0 0.0% 100.0%
+[15419, inf) 0 0.0% 100.0%
+Benchmark__100B 5000 1627288 ns/op 0.12 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 12 Avg: 1.37
+------------------------------------------------------------
+[ 1, 2) 4795 95.9% 95.9% ##########
+[ 2, 3) 7 0.1% 96.0%
+[ 3, 4) 11 0.2% 96.3%
+[ 4, 5) 0 0.0% 96.3%
+[ 5, 6) 0 0.0% 96.3%
+[ 6, 8) 0 0.0% 96.3%
+[ 8, 10) 14 0.3% 96.5%
+[ 10, 13) 173 3.5% 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__100B-2 10000 1395559 ns/op 0.14 MB/s
+Histogram (unit: us)
+Count: 10000 Min: 943 Max: 10888 Avg: 1394.71
+------------------------------------------------------------
+[ 943, 944) 1 0.0% 0.0%
+[ 944, 945) 0 0.0% 0.0%
+[ 945, 948) 0 0.0% 0.0%
+[ 948, 954) 0 0.0% 0.0%
+[ 954, 965) 2 0.0% 0.0%
+[ 965, 986) 14 0.1% 0.2%
+[ 986, 1025) 261 2.6% 2.8%
+[ 1025, 1098) 2684 26.8% 29.6% ###
+[ 1098, 1233) 4347 43.5% 73.1% ####
+[ 1233, 1483) 2135 21.4% 94.4% ##
+[ 1483, 1945) 225 2.2% 96.7%
+[ 1945, 2799) 3 0.0% 96.7%
+[ 2799, 4376) 0 0.0% 96.7%
+[ 4376, 7290) 105 1.1% 97.8%
+[ 7290, 12673) 223 2.2% 100.0%
+[12673, 22618) 0 0.0% 100.0%
+[22618, inf) 0 0.0% 100.0%
+Benchmark___1KB 5000 1548449 ns/op 1.29 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 18 Avg: 1.44
+------------------------------------------------------------
+[ 1, 2) 4854 97.1% 97.1% ##########
+[ 2, 3) 0 0.0% 97.1%
+[ 3, 4) 0 0.0% 97.1%
+[ 4, 5) 5 0.1% 97.2%
+[ 5, 7) 0 0.0% 97.2%
+[ 7, 9) 0 0.0% 97.2%
+[ 9, 12) 0 0.0% 97.2%
+[ 12, 15) 5 0.1% 97.3%
+[ 15, 19) 136 2.7% 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, 71) 0 0.0% 100.0%
+[ 71, 88) 0 0.0% 100.0%
+[ 88, inf) 0 0.0% 100.0%
+Benchmark___1KB-2 10000 1296259 ns/op 1.54 MB/s
+Histogram (unit: us)
+Count: 10000 Min: 889 Max: 13746 Avg: 1295.42
+------------------------------------------------------------
+[ 889, 890) 1 0.0% 0.0%
+[ 890, 891) 0 0.0% 0.0%
+[ 891, 894) 2 0.0% 0.0%
+[ 894, 900) 2 0.0% 0.1%
+[ 900, 912) 16 0.2% 0.2%
+[ 912, 935) 205 2.0% 2.3%
+[ 935, 979) 2047 20.5% 22.7% ##
+[ 979, 1061) 3556 35.6% 58.3% ####
+[ 1061, 1216) 3264 32.6% 90.9% ###
+[ 1216, 1508) 633 6.3% 97.3% #
+[ 1508, 2056) 19 0.2% 97.5%
+[ 2056, 3087) 1 0.0% 97.5%
+[ 3087, 5024) 0 0.0% 97.5%
+[ 5024, 8665) 0 0.0% 97.5%
+[ 8665, 15507) 254 2.5% 100.0%
+[15507, 28364) 0 0.0% 100.0%
+[28364, inf) 0 0.0% 100.0%
+Benchmark__10KB 5000 1960759 ns/op 10.20 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 31 Avg: 1.68
+------------------------------------------------------------
+[ 1, 2) 4844 96.9% 96.9% ##########
+[ 2, 3) 0 0.0% 96.9%
+[ 3, 4) 0 0.0% 96.9%
+[ 4, 5) 2 0.0% 96.9%
+[ 5, 7) 10 0.2% 97.1%
+[ 7, 10) 0 0.0% 97.1%
+[ 10, 13) 0 0.0% 97.1%
+[ 13, 17) 0 0.0% 97.1%
+[ 17, 23) 50 1.0% 98.1%
+[ 23, 30) 93 1.9% 100.0%
+[ 30, 39) 1 0.0% 100.0%
+[ 39, 51) 0 0.0% 100.0%
+[ 51, 66) 0 0.0% 100.0%
+[ 66, 85) 0 0.0% 100.0%
+[ 85, 108) 0 0.0% 100.0%
+[108, 137) 0 0.0% 100.0%
+[137, inf) 0 0.0% 100.0%
+Benchmark__10KB-2 10000 1516984 ns/op 13.18 MB/s
+Histogram (unit: us)
+Count: 10000 Min: 953 Max: 18285 Avg: 1516.12
+------------------------------------------------------------
+[ 953, 954) 1 0.0% 0.0%
+[ 954, 955) 0 0.0% 0.0%
+[ 955, 958) 0 0.0% 0.0%
+[ 958, 965) 1 0.0% 0.0%
+[ 965, 978) 17 0.2% 0.2%
+[ 978, 1003) 129 1.3% 1.5%
+[ 1003, 1052) 1126 11.3% 12.7% #
+[ 1052, 1147) 3525 35.2% 48.0% ####
+[ 1147, 1329) 4301 43.0% 91.0% ####
+[ 1329, 1678) 509 5.1% 96.1% #
+[ 1678, 2347) 120 1.2% 97.3%
+[ 2347, 3630) 5 0.1% 97.3%
+[ 3630, 6090) 0 0.0% 97.3%
+[ 6090, 10807) 0 0.0% 97.3%
+[10807, 19848) 266 2.7% 100.0%
+[19848, 37179) 0 0.0% 100.0%
+[37179, inf) 0 0.0% 100.0%
+Benchmark_100KB 2000 4950737 ns/op 40.40 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 35 Avg: 4.12
+------------------------------------------------------------
+[ 2, 3) 1723 86.2% 86.2% #########
+[ 3, 4) 123 6.2% 92.3% #
+[ 4, 5) 0 0.0% 92.3%
+[ 5, 7) 7 0.4% 92.7%
+[ 7, 9) 15 0.8% 93.4%
+[ 9, 12) 0 0.0% 93.4%
+[ 12, 16) 0 0.0% 93.4%
+[ 16, 21) 0 0.0% 93.4%
+[ 21, 27) 0 0.0% 93.4%
+[ 27, 35) 130 6.5% 99.9% #
+[ 35, 45) 2 0.1% 100.0%
+[ 45, 57) 0 0.0% 100.0%
+[ 57, 73) 0 0.0% 100.0%
+[ 73, 93) 0 0.0% 100.0%
+[ 93, 119) 0 0.0% 100.0%
+[119, 152) 0 0.0% 100.0%
+[152, inf) 0 0.0% 100.0%
+Benchmark_100KB-2 5000 3536973 ns/op 56.55 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 2 Max: 20 Avg: 2.99
+------------------------------------------------------------
+[ 2, 3) 4473 89.5% 89.5% #########
+[ 3, 4) 209 4.2% 93.6%
+[ 4, 5) 1 0.0% 93.7%
+[ 5, 6) 0 0.0% 93.7%
+[ 6, 8) 0 0.0% 93.7%
+[ 8, 10) 0 0.0% 93.7%
+[ 10, 13) 0 0.0% 93.7%
+[ 13, 16) 89 1.8% 95.4%
+[ 16, 20) 227 4.5% 100.0%
+[ 20, 25) 1 0.0% 100.0%
+[ 25, 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, 75) 0 0.0% 100.0%
+[ 75, 92) 0 0.0% 100.0%
+[ 92, inf) 0 0.0% 100.0%
+
+================================================================================
+Echo streaming RPC
+================================================================================
+Benchmark____1_chunk_____1B 5000 1733706 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 3 Avg: 1.19
+------------------------------------------------------------
+[ 1, 2) 4198 84.0% 84.0% ########
+[ 2, 3) 670 13.4% 97.4% #
+[ 3, 4) 132 2.6% 100.0%
+[ 4, 5) 0 0.0% 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____1_chunk_____1B-2 10000 1549342 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 10000 Min: 1 Max: 4 Avg: 1.13
+------------------------------------------------------------
+[ 1, 2) 9051 90.5% 90.5% #########
+[ 2, 3) 638 6.4% 96.9% #
+[ 3, 4) 251 2.5% 99.4%
+[ 4, 5) 60 0.6% 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 5000 1841027 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 6 Avg: 1.26
+------------------------------------------------------------
+[ 1, 2) 4657 93.1% 93.1% #########
+[ 2, 3) 14 0.3% 93.4%
+[ 3, 4) 0 0.0% 93.4%
+[ 4, 5) 21 0.4% 93.8%
+[ 5, 6) 298 6.0% 99.8% #
+[ 6, 7) 10 0.2% 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____10B-2 5000 1645809 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 6 Avg: 1.19
+------------------------------------------------------------
+[ 1, 2) 4710 94.2% 94.2% #########
+[ 2, 3) 11 0.2% 94.4%
+[ 3, 4) 12 0.2% 94.7%
+[ 4, 5) 175 3.5% 98.2%
+[ 5, 6) 89 1.8% 99.9%
+[ 6, 7) 3 0.1% 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___100B 5000 1891259 ns/op 0.11 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 10 Avg: 1.33
+------------------------------------------------------------
+[ 1, 2) 4748 95.0% 95.0% #########
+[ 2, 3) 5 0.1% 95.1%
+[ 3, 4) 8 0.2% 95.2%
+[ 4, 5) 0 0.0% 95.2%
+[ 5, 6) 0 0.0% 95.2%
+[ 6, 8) 54 1.1% 96.3%
+[ 8, 10) 182 3.6% 99.9%
+[ 10, 12) 3 0.1% 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____1_chunk___100B-2 5000 1720838 ns/op 0.12 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 8 Avg: 1.22
+------------------------------------------------------------
+[ 1, 2) 4746 94.9% 94.9% #########
+[ 2, 3) 40 0.8% 95.7%
+[ 3, 4) 0 0.0% 95.7%
+[ 4, 5) 0 0.0% 95.7%
+[ 5, 6) 86 1.7% 97.4%
+[ 6, 7) 79 1.6% 99.0%
+[ 7, 9) 49 1.0% 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____1KB 5000 1834957 ns/op 1.09 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 17 Avg: 1.43
+------------------------------------------------------------
+[ 1, 2) 4809 96.2% 96.2% ##########
+[ 2, 3) 0 0.0% 96.2%
+[ 3, 4) 4 0.1% 96.3%
+[ 4, 5) 1 0.0% 96.3%
+[ 5, 7) 0 0.0% 96.3%
+[ 7, 9) 0 0.0% 96.3%
+[ 9, 12) 13 0.3% 96.5%
+[ 12, 15) 172 3.4% 100.0%
+[ 15, 19) 1 0.0% 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____1_chunk____1KB-2 5000 1641668 ns/op 1.22 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 9 Avg: 1.23
+------------------------------------------------------------
+[ 1, 2) 4825 96.5% 96.5% ##########
+[ 2, 3) 4 0.1% 96.6%
+[ 3, 4) 0 0.0% 96.6%
+[ 4, 5) 0 0.0% 96.6%
+[ 5, 6) 0 0.0% 96.6%
+[ 6, 8) 72 1.4% 98.0%
+[ 8, 10) 99 2.0% 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____1_chunk___10KB 5000 2169053 ns/op 9.22 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 18 Avg: 1.60
+------------------------------------------------------------
+[ 1, 2) 4777 95.5% 95.5% ##########
+[ 2, 3) 4 0.1% 95.6%
+[ 3, 4) 0 0.0% 95.6%
+[ 4, 5) 23 0.5% 96.1%
+[ 5, 7) 2 0.0% 96.1%
+[ 7, 9) 0 0.0% 96.1%
+[ 9, 12) 0 0.0% 96.1%
+[ 12, 15) 23 0.5% 96.6%
+[ 15, 19) 171 3.4% 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, 71) 0 0.0% 100.0%
+[ 71, 88) 0 0.0% 100.0%
+[ 88, inf) 0 0.0% 100.0%
+Benchmark____1_chunk___10KB-2 5000 1825946 ns/op 10.95 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 12 Avg: 1.33
+------------------------------------------------------------
+[ 1, 2) 4780 95.6% 95.6% ##########
+[ 2, 3) 40 0.8% 96.4%
+[ 3, 4) 0 0.0% 96.4%
+[ 4, 5) 0 0.0% 96.4%
+[ 5, 6) 0 0.0% 96.4%
+[ 6, 8) 0 0.0% 96.4%
+[ 8, 10) 42 0.8% 97.2%
+[ 10, 13) 138 2.8% 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____1_chunk__100KB 2000 4712135 ns/op 42.44 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 21 Avg: 4.41
+------------------------------------------------------------
+[ 3, 4) 1779 89.0% 89.0% #########
+[ 4, 5) 1 0.1% 89.0%
+[ 5, 6) 44 2.2% 91.2%
+[ 6, 7) 2 0.1% 91.3%
+[ 7, 9) 0 0.0% 91.3%
+[ 9, 11) 0 0.0% 91.3%
+[ 11, 14) 0 0.0% 91.3%
+[ 14, 17) 1 0.1% 91.4%
+[ 17, 21) 171 8.6% 99.9% #
+[ 21, 26) 2 0.1% 100.0%
+[ 26, 32) 0 0.0% 100.0%
+[ 32, 40) 0 0.0% 100.0%
+[ 40, 50) 0 0.0% 100.0%
+[ 50, 62) 0 0.0% 100.0%
+[ 62, 76) 0 0.0% 100.0%
+[ 76, 93) 0 0.0% 100.0%
+[ 93, inf) 0 0.0% 100.0%
+Benchmark____1_chunk__100KB-2 5000 3674554 ns/op 54.43 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 2 Max: 15 Avg: 2.93
+------------------------------------------------------------
+[ 2, 3) 4335 86.7% 86.7% #########
+[ 3, 4) 244 4.9% 91.6%
+[ 4, 5) 0 0.0% 91.6%
+[ 5, 6) 0 0.0% 91.6%
+[ 6, 7) 0 0.0% 91.6%
+[ 7, 9) 0 0.0% 91.6%
+[ 9, 11) 1 0.0% 91.6%
+[ 11, 14) 370 7.4% 99.0% #
+[ 14, 17) 50 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%
+[ 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___10_chunks____1B 5000 2281402 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 28 Avg: 1.62
+------------------------------------------------------------
+[ 1, 2) 4869 97.4% 97.4% ##########
+[ 2, 3) 2 0.0% 97.4%
+[ 3, 4) 0 0.0% 97.4%
+[ 4, 5) 0 0.0% 97.4%
+[ 5, 7) 0 0.0% 97.4%
+[ 7, 10) 5 0.1% 97.5%
+[ 10, 13) 0 0.0% 97.5%
+[ 13, 17) 0 0.0% 97.5%
+[ 17, 22) 5 0.1% 97.6%
+[ 22, 29) 119 2.4% 100.0%
+[ 29, 38) 0 0.0% 100.0%
+[ 38, 49) 0 0.0% 100.0%
+[ 49, 62) 0 0.0% 100.0%
+[ 62, 79) 0 0.0% 100.0%
+[ 79, 100) 0 0.0% 100.0%
+[100, 127) 0 0.0% 100.0%
+[127, inf) 0 0.0% 100.0%
+Benchmark___10_chunks____1B-2 5000 1959491 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 16 Avg: 1.36
+------------------------------------------------------------
+[ 1, 2) 4632 92.6% 92.6% #########
+[ 2, 3) 249 5.0% 97.6%
+[ 3, 4) 0 0.0% 97.6%
+[ 4, 5) 0 0.0% 97.6%
+[ 5, 7) 0 0.0% 97.6%
+[ 7, 9) 0 0.0% 97.6%
+[ 9, 11) 0 0.0% 97.6%
+[ 11, 14) 33 0.7% 98.3%
+[ 14, 18) 86 1.7% 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___10_chunks___10B 5000 2539394 ns/op 0.08 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 33 Avg: 1.70
+------------------------------------------------------------
+[ 1, 2) 4831 96.6% 96.6% ##########
+[ 2, 3) 52 1.0% 97.7%
+[ 3, 4) 0 0.0% 97.7%
+[ 4, 5) 0 0.0% 97.7%
+[ 5, 7) 0 0.0% 97.7%
+[ 7, 10) 4 0.1% 97.7%
+[ 10, 13) 0 0.0% 97.7%
+[ 13, 18) 0 0.0% 97.7%
+[ 18, 24) 0 0.0% 97.7%
+[ 24, 31) 20 0.4% 98.1%
+[ 31, 41) 93 1.9% 100.0%
+[ 41, 53) 0 0.0% 100.0%
+[ 53, 68) 0 0.0% 100.0%
+[ 68, 88) 0 0.0% 100.0%
+[ 88, 113) 0 0.0% 100.0%
+[113, 144) 0 0.0% 100.0%
+[144, inf) 0 0.0% 100.0%
+Benchmark___10_chunks___10B-2 5000 2019503 ns/op 0.10 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 20 Avg: 1.38
+------------------------------------------------------------
+[ 1, 2) 4651 93.0% 93.0% #########
+[ 2, 3) 233 4.7% 97.7%
+[ 3, 4) 10 0.2% 97.9%
+[ 4, 5) 0 0.0% 97.9%
+[ 5, 7) 0 0.0% 97.9%
+[ 7, 9) 0 0.0% 97.9%
+[ 9, 12) 0 0.0% 97.9%
+[ 12, 15) 12 0.2% 98.1%
+[ 15, 19) 92 1.8% 100.0%
+[ 19, 24) 2 0.0% 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___10_chunks__100B 5000 2950881 ns/op 0.68 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 2 Max: 38 Avg: 2.67
+------------------------------------------------------------
+[ 2, 3) 4890 97.8% 97.8% ##########
+[ 3, 4) 0 0.0% 97.8%
+[ 4, 5) 0 0.0% 97.8%
+[ 5, 7) 0 0.0% 97.8%
+[ 7, 9) 0 0.0% 97.8%
+[ 9, 12) 4 0.1% 97.9%
+[ 12, 16) 0 0.0% 97.9%
+[ 16, 21) 0 0.0% 97.9%
+[ 21, 27) 3 0.1% 97.9%
+[ 27, 35) 80 1.6% 99.5%
+[ 35, 45) 23 0.5% 100.0%
+[ 45, 58) 0 0.0% 100.0%
+[ 58, 75) 0 0.0% 100.0%
+[ 75, 97) 0 0.0% 100.0%
+[ 97, 125) 0 0.0% 100.0%
+[125, 161) 0 0.0% 100.0%
+[161, inf) 0 0.0% 100.0%
+Benchmark___10_chunks__100B-2 5000 2239554 ns/op 0.89 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 21 Avg: 1.45
+------------------------------------------------------------
+[ 1, 2) 4502 90.0% 90.0% #########
+[ 2, 3) 333 6.7% 96.7% #
+[ 3, 4) 63 1.3% 98.0%
+[ 4, 5) 0 0.0% 98.0%
+[ 5, 7) 0 0.0% 98.0%
+[ 7, 9) 0 0.0% 98.0%
+[ 9, 12) 0 0.0% 98.0%
+[ 12, 16) 0 0.0% 98.0%
+[ 16, 20) 64 1.3% 99.2%
+[ 20, 26) 38 0.8% 100.0%
+[ 26, 33) 0 0.0% 100.0%
+[ 33, 41) 0 0.0% 100.0%
+[ 41, 51) 0 0.0% 100.0%
+[ 51, 64) 0 0.0% 100.0%
+[ 64, 80) 0 0.0% 100.0%
+[ 80, 99) 0 0.0% 100.0%
+[ 99, inf) 0 0.0% 100.0%
+Benchmark___10_chunks___1KB 5000 3151938 ns/op 6.35 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 2 Max: 43 Avg: 2.88
+------------------------------------------------------------
+[ 2, 3) 4877 97.5% 97.5% ##########
+[ 3, 4) 0 0.0% 97.5%
+[ 4, 5) 0 0.0% 97.5%
+[ 5, 7) 0 0.0% 97.5%
+[ 7, 9) 0 0.0% 97.5%
+[ 9, 12) 10 0.2% 97.7%
+[ 12, 16) 0 0.0% 97.7%
+[ 16, 21) 0 0.0% 97.7%
+[ 21, 28) 0 0.0% 97.7%
+[ 28, 37) 16 0.3% 98.1%
+[ 37, 48) 97 1.9% 100.0%
+[ 48, 63) 0 0.0% 100.0%
+[ 63, 82) 0 0.0% 100.0%
+[ 82, 106) 0 0.0% 100.0%
+[106, 138) 0 0.0% 100.0%
+[138, 178) 0 0.0% 100.0%
+[178, inf) 0 0.0% 100.0%
+Benchmark___10_chunks___1KB-2 5000 2323991 ns/op 8.61 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 24 Avg: 1.56
+------------------------------------------------------------
+[ 1, 2) 4439 88.8% 88.8% #########
+[ 2, 3) 364 7.3% 96.1% #
+[ 3, 4) 87 1.7% 97.8%
+[ 4, 5) 1 0.0% 97.8%
+[ 5, 7) 0 0.0% 97.8%
+[ 7, 9) 0 0.0% 97.8%
+[ 9, 12) 0 0.0% 97.8%
+[ 12, 16) 0 0.0% 97.8%
+[ 16, 21) 20 0.4% 98.2%
+[ 21, 27) 89 1.8% 100.0%
+[ 27, 35) 0 0.0% 100.0%
+[ 35, 44) 0 0.0% 100.0%
+[ 44, 56) 0 0.0% 100.0%
+[ 56, 71) 0 0.0% 100.0%
+[ 71, 89) 0 0.0% 100.0%
+[ 89, 111) 0 0.0% 100.0%
+[111, inf) 0 0.0% 100.0%
+Benchmark___10_chunks__10KB 2000 6023388 ns/op 33.20 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 47 Avg: 5.22
+------------------------------------------------------------
+[ 3, 4) 1770 88.5% 88.5% #########
+[ 4, 5) 83 4.2% 92.7%
+[ 5, 6) 1 0.1% 92.7%
+[ 6, 8) 0 0.0% 92.7%
+[ 8, 10) 38 1.9% 94.6%
+[ 10, 13) 2 0.1% 94.7%
+[ 13, 17) 0 0.0% 94.7%
+[ 17, 22) 0 0.0% 94.7%
+[ 22, 29) 0 0.0% 94.7%
+[ 29, 38) 0 0.0% 94.7%
+[ 38, 50) 106 5.3% 100.0% #
+[ 50, 66) 0 0.0% 100.0%
+[ 66, 86) 0 0.0% 100.0%
+[ 86, 112) 0 0.0% 100.0%
+[112, 146) 0 0.0% 100.0%
+[146, 190) 0 0.0% 100.0%
+[190, inf) 0 0.0% 100.0%
+Benchmark___10_chunks__10KB-2 2000 3955363 ns/op 50.56 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 27 Avg: 3.20
+------------------------------------------------------------
+[ 2, 3) 1814 90.7% 90.7% #########
+[ 3, 4) 18 0.9% 91.6%
+[ 4, 5) 10 0.5% 92.1%
+[ 5, 6) 52 2.6% 94.7%
+[ 6, 8) 1 0.1% 94.8%
+[ 8, 10) 0 0.0% 94.8%
+[ 10, 13) 0 0.0% 94.8%
+[ 13, 17) 0 0.0% 94.8%
+[ 17, 22) 26 1.3% 96.1%
+[ 22, 28) 79 4.0% 100.0%
+[ 28, 36) 0 0.0% 100.0%
+[ 36, 46) 0 0.0% 100.0%
+[ 46, 59) 0 0.0% 100.0%
+[ 59, 75) 0 0.0% 100.0%
+[ 75, 95) 0 0.0% 100.0%
+[ 95, 119) 0 0.0% 100.0%
+[119, inf) 0 0.0% 100.0%
+Benchmark___10_chunks_100KB 500 31665379 ns/op 63.16 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 20 Max: 64 Avg: 31.39
+------------------------------------------------------------
+[ 20, 21) 282 56.4% 56.4% ######
+[ 21, 22) 6 1.2% 57.6%
+[ 22, 23) 1 0.2% 57.8%
+[ 23, 25) 68 13.6% 71.4% #
+[ 25, 27) 1 0.2% 71.6%
+[ 27, 30) 0 0.0% 71.6%
+[ 30, 34) 0 0.0% 71.6%
+[ 34, 39) 0 0.0% 71.6%
+[ 39, 46) 0 0.0% 71.6%
+[ 46, 55) 0 0.0% 71.6%
+[ 55, 67) 142 28.4% 100.0% ###
+[ 67, 83) 0 0.0% 100.0%
+[ 83, 103) 0 0.0% 100.0%
+[103, 129) 0 0.0% 100.0%
+[129, 163) 0 0.0% 100.0%
+[163, 207) 0 0.0% 100.0%
+[207, inf) 0 0.0% 100.0%
+Benchmark___10_chunks_100KB-2 500 18414841 ns/op 108.61 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 11 Max: 37 Avg: 17.92
+------------------------------------------------------------
+[ 11, 12) 152 30.4% 30.4% ###
+[ 12, 13) 189 37.8% 68.2% ####
+[ 13, 14) 13 2.6% 70.8%
+[ 14, 15) 5 1.0% 71.8%
+[ 15, 17) 0 0.0% 71.8%
+[ 17, 19) 0 0.0% 71.8%
+[ 19, 22) 0 0.0% 71.8%
+[ 22, 26) 0 0.0% 71.8%
+[ 26, 31) 6 1.2% 73.0%
+[ 31, 38) 135 27.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, 105) 0 0.0% 100.0%
+[105, 130) 0 0.0% 100.0%
+[130, inf) 0 0.0% 100.0%
+Benchmark__100_chunks____1B 5000 4505724 ns/op 0.04 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 2 Max: 55 Avg: 3.80
+------------------------------------------------------------
+[ 2, 3) 3905 78.1% 78.1% ########
+[ 3, 4) 22 0.4% 78.5%
+[ 4, 5) 914 18.3% 96.8% ##
+[ 5, 7) 10 0.2% 97.0%
+[ 7, 9) 0 0.0% 97.0%
+[ 9, 12) 0 0.0% 97.0%
+[ 12, 16) 4 0.1% 97.1%
+[ 16, 22) 3 0.1% 97.2%
+[ 22, 30) 0 0.0% 97.2%
+[ 30, 40) 3 0.1% 97.2%
+[ 40, 54) 131 2.6% 99.8%
+[ 54, 72) 8 0.2% 100.0%
+[ 72, 95) 0 0.0% 100.0%
+[ 95, 126) 0 0.0% 100.0%
+[126, 166) 0 0.0% 100.0%
+[166, 219) 0 0.0% 100.0%
+[219, inf) 0 0.0% 100.0%
+Benchmark__100_chunks____1B-2 5000 3512335 ns/op 0.06 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 2 Max: 33 Avg: 2.87
+------------------------------------------------------------
+[ 2, 3) 4535 90.7% 90.7% #########
+[ 3, 4) 228 4.6% 95.3%
+[ 4, 5) 9 0.2% 95.4%
+[ 5, 6) 0 0.0% 95.4%
+[ 6, 8) 12 0.2% 95.7%
+[ 8, 11) 74 1.5% 97.2%
+[ 11, 14) 0 0.0% 97.2%
+[ 14, 18) 0 0.0% 97.2%
+[ 18, 24) 17 0.3% 97.5%
+[ 24, 31) 89 1.8% 99.3%
+[ 31, 40) 36 0.7% 100.0%
+[ 40, 52) 0 0.0% 100.0%
+[ 52, 67) 0 0.0% 100.0%
+[ 67, 86) 0 0.0% 100.0%
+[ 86, 110) 0 0.0% 100.0%
+[110, 140) 0 0.0% 100.0%
+[140, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___10B 1000 8713484 ns/op 0.23 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 6 Max: 63 Avg: 8.15
+------------------------------------------------------------
+[ 6, 7) 524 52.4% 52.4% #####
+[ 7, 8) 433 43.3% 95.7% ####
+[ 8, 9) 7 0.7% 96.4%
+[ 9, 11) 3 0.3% 96.7%
+[ 11, 13) 0 0.0% 96.7%
+[ 13, 16) 0 0.0% 96.7%
+[ 16, 21) 1 0.1% 96.8%
+[ 21, 27) 0 0.0% 96.8%
+[ 27, 35) 0 0.0% 96.8%
+[ 35, 46) 0 0.0% 96.8%
+[ 46, 60) 19 1.9% 98.7%
+[ 60, 79) 13 1.3% 100.0%
+[ 79, 104) 0 0.0% 100.0%
+[104, 137) 0 0.0% 100.0%
+[137, 180) 0 0.0% 100.0%
+[180, 237) 0 0.0% 100.0%
+[237, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___10B-2 2000 4561723 ns/op 0.44 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 2 Max: 34 Avg: 4.05
+------------------------------------------------------------
+[ 2, 3) 45 2.2% 2.2%
+[ 3, 4) 1493 74.7% 76.9% #######
+[ 4, 5) 346 17.3% 94.2% ##
+[ 5, 6) 10 0.5% 94.7%
+[ 6, 8) 8 0.4% 95.1%
+[ 8, 11) 39 2.0% 97.1%
+[ 11, 14) 0 0.0% 97.1%
+[ 14, 19) 0 0.0% 97.1%
+[ 19, 25) 5 0.2% 97.3%
+[ 25, 32) 43 2.1% 99.5%
+[ 32, 42) 11 0.6% 100.0%
+[ 42, 54) 0 0.0% 100.0%
+[ 54, 69) 0 0.0% 100.0%
+[ 69, 89) 0 0.0% 100.0%
+[ 89, 114) 0 0.0% 100.0%
+[114, 145) 0 0.0% 100.0%
+[145, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__100B 1000 10864592 ns/op 1.84 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 8 Max: 61 Avg: 10.22
+------------------------------------------------------------
+[ 8, 9) 553 55.3% 55.3% ######
+[ 9, 10) 391 39.1% 94.4% ####
+[ 10, 11) 2 0.2% 94.6%
+[ 11, 13) 11 1.1% 95.7%
+[ 13, 15) 1 0.1% 95.8%
+[ 15, 18) 2 0.2% 96.0%
+[ 18, 22) 0 0.0% 96.0%
+[ 22, 28) 4 0.4% 96.4%
+[ 28, 36) 0 0.0% 96.4%
+[ 36, 46) 3 0.3% 96.7%
+[ 46, 60) 31 3.1% 99.8%
+[ 60, 78) 2 0.2% 100.0%
+[ 78, 101) 0 0.0% 100.0%
+[101, 132) 0 0.0% 100.0%
+[132, 172) 0 0.0% 100.0%
+[172, 225) 0 0.0% 100.0%
+[225, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__100B-2 2000 6852262 ns/op 2.92 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 5 Max: 37 Avg: 6.29
+------------------------------------------------------------
+[ 5, 6) 1488 74.4% 74.4% #######
+[ 6, 7) 386 19.3% 93.7% ##
+[ 7, 8) 2 0.1% 93.8%
+[ 8, 9) 14 0.7% 94.5%
+[ 9, 11) 23 1.2% 95.7%
+[ 11, 14) 15 0.8% 96.4%
+[ 14, 17) 0 0.0% 96.4%
+[ 17, 22) 0 0.0% 96.4%
+[ 22, 28) 3 0.2% 96.6%
+[ 28, 35) 55 2.8% 99.3%
+[ 35, 45) 14 0.7% 100.0%
+[ 45, 57) 0 0.0% 100.0%
+[ 57, 72) 0 0.0% 100.0%
+[ 72, 92) 0 0.0% 100.0%
+[ 92, 117) 0 0.0% 100.0%
+[117, 148) 0 0.0% 100.0%
+[148, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___1KB 1000 13501720 ns/op 14.81 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 10 Max: 58 Avg: 12.97
+------------------------------------------------------------
+[ 10, 11) 772 77.2% 77.2% ########
+[ 11, 12) 141 14.1% 91.3% #
+[ 12, 13) 8 0.8% 92.1%
+[ 13, 15) 4 0.4% 92.5%
+[ 15, 17) 0 0.0% 92.5%
+[ 17, 20) 0 0.0% 92.5%
+[ 20, 24) 14 1.4% 93.9%
+[ 24, 30) 0 0.0% 93.9%
+[ 30, 37) 0 0.0% 93.9%
+[ 37, 47) 14 1.4% 95.3%
+[ 47, 60) 47 4.7% 100.0%
+[ 60, 77) 0 0.0% 100.0%
+[ 77, 99) 0 0.0% 100.0%
+[ 99, 127) 0 0.0% 100.0%
+[127, 164) 0 0.0% 100.0%
+[164, 211) 0 0.0% 100.0%
+[211, inf) 0 0.0% 100.0%
+Benchmark__100_chunks___1KB-2 1000 8613532 ns/op 23.22 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 6 Max: 38 Avg: 8.10
+------------------------------------------------------------
+[ 6, 7) 649 64.9% 64.9% ######
+[ 7, 8) 255 25.5% 90.4% ###
+[ 8, 9) 3 0.3% 90.7%
+[ 9, 10) 16 1.6% 92.3%
+[ 10, 12) 12 1.2% 93.5%
+[ 12, 15) 2 0.2% 93.7%
+[ 15, 18) 0 0.0% 93.7%
+[ 18, 23) 0 0.0% 93.7%
+[ 23, 29) 1 0.1% 93.8%
+[ 29, 36) 52 5.2% 99.0% #
+[ 36, 46) 10 1.0% 100.0%
+[ 46, 58) 0 0.0% 100.0%
+[ 58, 73) 0 0.0% 100.0%
+[ 73, 93) 0 0.0% 100.0%
+[ 93, 118) 0 0.0% 100.0%
+[118, 149) 0 0.0% 100.0%
+[149, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__10KB 200 39616552 ns/op 50.48 MB/s
+Histogram (unit: ms)
+Count: 200 Min: 26 Max: 74 Avg: 39.05
+------------------------------------------------------------
+[ 26, 27) 80 40.0% 40.0% ####
+[ 27, 28) 30 15.0% 55.0% ##
+[ 28, 29) 6 3.0% 58.0%
+[ 29, 31) 0 0.0% 58.0%
+[ 31, 33) 22 11.0% 69.0% #
+[ 33, 36) 5 2.5% 71.5%
+[ 36, 40) 0 0.0% 71.5%
+[ 40, 46) 0 0.0% 71.5%
+[ 46, 53) 0 0.0% 71.5%
+[ 53, 63) 7 3.5% 75.0%
+[ 63, 76) 50 25.0% 100.0% ###
+[ 76, 93) 0 0.0% 100.0%
+[ 93, 115) 0 0.0% 100.0%
+[115, 143) 0 0.0% 100.0%
+[143, 180) 0 0.0% 100.0%
+[180, 227) 0 0.0% 100.0%
+[227, inf) 0 0.0% 100.0%
+Benchmark__100_chunks__10KB-2 500 23658254 ns/op 84.54 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 14 Max: 45 Avg: 23.17
+------------------------------------------------------------
+[ 14, 15) 35 7.0% 7.0% #
+[ 15, 16) 257 51.4% 58.4% #####
+[ 16, 17) 30 6.0% 64.4% #
+[ 17, 18) 14 2.8% 67.2%
+[ 18, 20) 13 2.6% 69.8%
+[ 20, 23) 0 0.0% 69.8%
+[ 23, 26) 0 0.0% 69.8%
+[ 26, 30) 0 0.0% 69.8%
+[ 30, 36) 1 0.2% 70.0%
+[ 36, 43) 85 17.0% 87.0% ##
+[ 43, 52) 65 13.0% 100.0% #
+[ 52, 64) 0 0.0% 100.0%
+[ 64, 79) 0 0.0% 100.0%
+[ 79, 98) 0 0.0% 100.0%
+[ 98, 122) 0 0.0% 100.0%
+[122, 152) 0 0.0% 100.0%
+[152, inf) 0 0.0% 100.0%
+Benchmark__100_chunks_100KB 50 276789691 ns/op 72.26 MB/s
+Histogram (unit: ms)
+Count: 50 Min: 272 Max: 283 Avg: 276.24
+------------------------------------------------------------
+[272, 273) 2 4.0% 4.0%
+[273, 274) 5 10.0% 14.0% #
+[274, 275) 3 6.0% 20.0% #
+[275, 276) 4 8.0% 28.0% #
+[276, 277) 16 32.0% 60.0% ###
+[277, 279) 15 30.0% 90.0% ###
+[279, 281) 2 4.0% 94.0%
+[281, 284) 3 6.0% 100.0% #
+[284, 287) 0 0.0% 100.0%
+[287, 291) 0 0.0% 100.0%
+[291, 295) 0 0.0% 100.0%
+[295, 300) 0 0.0% 100.0%
+[300, 306) 0 0.0% 100.0%
+[306, 313) 0 0.0% 100.0%
+[313, 322) 0 0.0% 100.0%
+[322, 333) 0 0.0% 100.0%
+[333, inf) 0 0.0% 100.0%
+Benchmark__100_chunks_100KB-2 100 154635652 ns/op 129.34 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 143 Max: 163 Avg: 154.17
+------------------------------------------------------------
+[143, 144) 1 1.0% 1.0%
+[144, 145) 0 0.0% 1.0%
+[145, 146) 0 0.0% 1.0%
+[146, 147) 0 0.0% 1.0%
+[147, 149) 3 3.0% 4.0%
+[149, 151) 5 5.0% 9.0% #
+[151, 154) 19 19.0% 28.0% ##
+[154, 158) 67 67.0% 95.0% #######
+[158, 162) 3 3.0% 98.0%
+[162, 168) 2 2.0% 100.0%
+[168, 175) 0 0.0% 100.0%
+[175, 183) 0 0.0% 100.0%
+[183, 193) 0 0.0% 100.0%
+[193, 206) 0 0.0% 100.0%
+[206, 222) 0 0.0% 100.0%
+[222, 241) 0 0.0% 100.0%
+[241, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks____1B 500 39420649 ns/op 0.05 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 14 Max: 93 Avg: 38.93
+------------------------------------------------------------
+[ 14, 15) 10 2.0% 2.0%
+[ 15, 16) 91 18.2% 20.2% ##
+[ 16, 17) 15 3.0% 23.2%
+[ 17, 19) 4 0.8% 24.0%
+[ 19, 22) 0 0.0% 24.0%
+[ 22, 26) 0 0.0% 24.0%
+[ 26, 31) 0 0.0% 24.0%
+[ 31, 38) 117 23.4% 47.4% ##
+[ 38, 48) 168 33.6% 81.0% ###
+[ 48, 61) 23 4.6% 85.6%
+[ 61, 79) 37 7.4% 93.0% #
+[ 79, 103) 35 7.0% 100.0% #
+[103, 135) 0 0.0% 100.0%
+[135, 179) 0 0.0% 100.0%
+[179, 238) 0 0.0% 100.0%
+[238, 317) 0 0.0% 100.0%
+[317, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks____1B-2 500 29693618 ns/op 0.07 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 15 Max: 69 Avg: 29.17
+------------------------------------------------------------
+[ 15, 16) 3 0.6% 0.6%
+[ 16, 17) 2 0.4% 1.0%
+[ 17, 18) 4 0.8% 1.8%
+[ 18, 20) 36 7.2% 9.0% #
+[ 20, 22) 69 13.8% 22.8% #
+[ 22, 25) 138 27.6% 50.4% ###
+[ 25, 29) 133 26.6% 77.0% ###
+[ 29, 35) 28 5.6% 82.6% #
+[ 35, 43) 9 1.8% 84.4%
+[ 43, 53) 19 3.8% 88.2%
+[ 53, 67) 58 11.6% 99.8% #
+[ 67, 85) 1 0.2% 100.0%
+[ 85, 109) 0 0.0% 100.0%
+[109, 140) 0 0.0% 100.0%
+[140, 181) 0 0.0% 100.0%
+[181, 235) 0 0.0% 100.0%
+[235, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___10B 100 83758352 ns/op 0.24 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 69 Max: 128 Avg: 83.29
+------------------------------------------------------------
+[ 69, 70) 1 1.0% 1.0%
+[ 70, 71) 2 2.0% 3.0%
+[ 71, 72) 3 3.0% 6.0%
+[ 72, 74) 33 33.0% 39.0% ###
+[ 74, 76) 22 22.0% 61.0% ##
+[ 76, 79) 9 9.0% 70.0% #
+[ 79, 84) 1 1.0% 71.0%
+[ 84, 90) 9 9.0% 80.0% #
+[ 90, 98) 1 1.0% 81.0%
+[ 98, 109) 0 0.0% 81.0%
+[109, 124) 13 13.0% 94.0% #
+[124, 143) 6 6.0% 100.0% #
+[143, 169) 0 0.0% 100.0%
+[169, 203) 0 0.0% 100.0%
+[203, 247) 0 0.0% 100.0%
+[247, 305) 0 0.0% 100.0%
+[305, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___10B-2 200 48382055 ns/op 0.41 MB/s
+Histogram (unit: ms)
+Count: 200 Min: 34 Max: 80 Avg: 47.87
+------------------------------------------------------------
+[ 34, 35) 1 0.5% 0.5%
+[ 35, 36) 0 0.0% 0.5%
+[ 36, 37) 2 1.0% 1.5%
+[ 37, 39) 17 8.5% 10.0% #
+[ 39, 41) 33 16.5% 26.5% ##
+[ 41, 44) 74 37.0% 63.5% ####
+[ 44, 48) 30 15.0% 78.5% ##
+[ 48, 53) 5 2.5% 81.0%
+[ 53, 60) 0 0.0% 81.0%
+[ 60, 69) 3 1.5% 82.5%
+[ 69, 81) 35 17.5% 100.0% ##
+[ 81, 97) 0 0.0% 100.0%
+[ 97, 118) 0 0.0% 100.0%
+[118, 145) 0 0.0% 100.0%
+[145, 180) 0 0.0% 100.0%
+[180, 225) 0 0.0% 100.0%
+[225, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__100B 100 106033135 ns/op 1.89 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 91 Max: 155 Avg: 105.49
+------------------------------------------------------------
+[ 91, 92) 5 5.0% 5.0% #
+[ 92, 93) 40 40.0% 45.0% ####
+[ 93, 94) 13 13.0% 58.0% #
+[ 94, 96) 4 4.0% 62.0%
+[ 96, 99) 2 2.0% 64.0%
+[ 99, 102) 2 2.0% 66.0%
+[102, 107) 12 12.0% 78.0% #
+[107, 113) 0 0.0% 78.0%
+[113, 122) 0 0.0% 78.0%
+[122, 134) 1 1.0% 79.0%
+[134, 149) 13 13.0% 92.0% #
+[149, 170) 8 8.0% 100.0% #
+[170, 197) 0 0.0% 100.0%
+[197, 233) 0 0.0% 100.0%
+[233, 281) 0 0.0% 100.0%
+[281, 344) 0 0.0% 100.0%
+[344, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__100B-2 100 62612895 ns/op 3.19 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 52 Max: 95 Avg: 62.12
+------------------------------------------------------------
+[ 52, 53) 8 8.0% 8.0% #
+[ 53, 54) 13 13.0% 21.0% #
+[ 54, 55) 18 18.0% 39.0% ##
+[ 55, 57) 28 28.0% 67.0% ###
+[ 57, 59) 10 10.0% 77.0% #
+[ 59, 62) 1 1.0% 78.0%
+[ 62, 66) 0 0.0% 78.0%
+[ 66, 71) 0 0.0% 78.0%
+[ 71, 78) 0 0.0% 78.0%
+[ 78, 87) 4 4.0% 82.0%
+[ 87, 99) 18 18.0% 100.0% ##
+[ 99, 114) 0 0.0% 100.0%
+[114, 134) 0 0.0% 100.0%
+[134, 160) 0 0.0% 100.0%
+[160, 193) 0 0.0% 100.0%
+[193, 236) 0 0.0% 100.0%
+[236, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___1KB 100 137482628 ns/op 14.55 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 110 Max: 177 Avg: 136.97
+------------------------------------------------------------
+[110, 111) 2 2.0% 2.0%
+[111, 112) 7 7.0% 9.0% #
+[112, 113) 11 11.0% 20.0% #
+[113, 115) 10 10.0% 30.0% #
+[115, 118) 9 9.0% 39.0% #
+[118, 122) 6 6.0% 45.0% #
+[122, 127) 6 6.0% 51.0% #
+[127, 134) 5 5.0% 56.0% #
+[134, 143) 0 0.0% 56.0%
+[143, 155) 5 5.0% 61.0% #
+[155, 171) 34 34.0% 95.0% ###
+[171, 192) 5 5.0% 100.0% #
+[192, 220) 0 0.0% 100.0%
+[220, 258) 0 0.0% 100.0%
+[258, 308) 0 0.0% 100.0%
+[308, 374) 0 0.0% 100.0%
+[374, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks___1KB-2 100 79534604 ns/op 25.15 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 60 Max: 107 Avg: 78.97
+------------------------------------------------------------
+[ 60, 61) 1 1.0% 1.0%
+[ 61, 62) 4 4.0% 5.0%
+[ 62, 63) 4 4.0% 9.0%
+[ 63, 65) 14 14.0% 23.0% #
+[ 65, 67) 26 26.0% 49.0% ###
+[ 67, 70) 5 5.0% 54.0% #
+[ 70, 74) 0 0.0% 54.0%
+[ 74, 80) 0 0.0% 54.0%
+[ 80, 87) 1 1.0% 55.0%
+[ 87, 97) 23 23.0% 78.0% ##
+[ 97, 110) 22 22.0% 100.0% ##
+[110, 126) 0 0.0% 100.0%
+[126, 147) 0 0.0% 100.0%
+[147, 175) 0 0.0% 100.0%
+[175, 211) 0 0.0% 100.0%
+[211, 257) 0 0.0% 100.0%
+[257, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__10KB 20 405074363 ns/op 49.37 MB/s
+Histogram (unit: ms)
+Count: 20 Min: 374 Max: 429 Avg: 404.60
+------------------------------------------------------------
+[374, 375) 1 5.0% 5.0% #
+[375, 376) 2 10.0% 15.0% #
+[376, 377) 1 5.0% 20.0% #
+[377, 379) 3 15.0% 35.0% ##
+[379, 381) 1 5.0% 40.0% #
+[381, 384) 0 0.0% 40.0%
+[384, 388) 0 0.0% 40.0%
+[388, 394) 0 0.0% 40.0%
+[394, 402) 0 0.0% 40.0%
+[402, 413) 0 0.0% 40.0%
+[413, 427) 11 55.0% 95.0% ######
+[427, 445) 1 5.0% 100.0% #
+[445, 469) 0 0.0% 100.0%
+[469, 501) 0 0.0% 100.0%
+[501, 543) 0 0.0% 100.0%
+[543, 598) 0 0.0% 100.0%
+[598, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks__10KB-2 50 219752224 ns/op 91.01 MB/s
+Histogram (unit: ms)
+Count: 50 Min: 198 Max: 237 Avg: 219.22
+------------------------------------------------------------
+[198, 199) 1 2.0% 2.0%
+[199, 200) 0 0.0% 2.0%
+[200, 201) 0 0.0% 2.0%
+[201, 203) 4 8.0% 10.0% #
+[203, 205) 8 16.0% 26.0% ##
+[205, 208) 8 16.0% 42.0% ##
+[208, 212) 2 4.0% 46.0%
+[212, 217) 0 0.0% 46.0%
+[217, 224) 0 0.0% 46.0%
+[224, 233) 14 28.0% 74.0% ###
+[233, 244) 13 26.0% 100.0% ###
+[244, 258) 0 0.0% 100.0%
+[258, 276) 0 0.0% 100.0%
+[276, 299) 0 0.0% 100.0%
+[299, 329) 0 0.0% 100.0%
+[329, 367) 0 0.0% 100.0%
+[367, inf) 0 0.0% 100.0%
+Benchmark___1K_chunks_100KB 2 2735626324 ns/op 73.11 MB/s
+Histogram (unit: s)
+Count: 2 Min: 2 Max: 2 Avg: 2.00
+------------------------------------------------------------
+[ 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%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 3, 3) 0 0.0% 100.0%
+[ 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 1536631217 ns/op 130.15 MB/s
+Histogram (unit: s)
+Count: 5 Min: 1 Max: 1 Avg: 1.00
+------------------------------------------------------------
+[ 1, 2) 5 100.0% 100.0% ##########
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, 2) 0 0.0% 100.0%
+[ 2, inf) 0 0.0% 100.0%
+
+================================================================================
+Echo streaming RPC (Per chunk)
+================================================================================
+Benchmark__per_chunk____1B 200000 1142388 ns/op 0.00 MB/s
+Histogram (unit: s)
+Count: 1 Min: 228 Max: 228 Avg: 228.00
+------------------------------------------------------------
+[228, 229) 1 100.0% 100.0% ##########
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, 229) 0 0.0% 100.0%
+[229, inf) 0 0.0% 100.0%
+Benchmark__per_chunk____1B-2 10000 2615337 ns/op 0.00 MB/s
+Histogram (unit: s)
+Count: 1 Min: 26 Max: 26 Avg: 26.00
+------------------------------------------------------------
+[ 26, 27) 1 100.0% 100.0% ##########
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, inf) 0 0.0% 100.0%
+Benchmark__per_chunk___10B 5000 5240078 ns/op 0.00 MB/s
+Histogram (unit: s)
+Count: 1 Min: 26 Max: 26 Avg: 26.00
+------------------------------------------------------------
+[ 26, 27) 1 100.0% 100.0% ##########
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, 27) 0 0.0% 100.0%
+[ 27, inf) 0 0.0% 100.0%
+Benchmark__per_chunk___10B-2 5000 3873372 ns/op 0.01 MB/s
+Histogram (unit: s)
+Count: 1 Min: 19 Max: 19 Avg: 19.00
+------------------------------------------------------------
+[ 19, 20) 1 100.0% 100.0% ##########
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, 20) 0 0.0% 100.0%
+[ 20, inf) 0 0.0% 100.0%
+Benchmark__per_chunk__100B 2000 4133802 ns/op 0.05 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__100B-2 5000 4392527 ns/op 0.05 MB/s
+Histogram (unit: s)
+Count: 1 Min: 21 Max: 21 Avg: 21.00
+------------------------------------------------------------
+[ 21, 22) 1 100.0% 100.0% ##########
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, 22) 0 0.0% 100.0%
+[ 22, inf) 0 0.0% 100.0%
+Benchmark__per_chunk___1KB 2000 4073315 ns/op 0.49 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 2000 4173645 ns/op 0.48 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__10KB 1000 6355059 ns/op 3.15 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 2000 4659057 ns/op 4.29 MB/s
+Histogram (unit: s)
+Count: 1 Min: 9 Max: 9 Avg: 9.00
+------------------------------------------------------------
+[ 9, 10) 1 100.0% 100.0% ##########
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, inf) 0 0.0% 100.0%
+Benchmark__per_chunk_100KB 1000 9065425 ns/op 22.06 MB/s
+Histogram (unit: s)
+Count: 1 Min: 9 Max: 9 Avg: 9.00
+------------------------------------------------------------
+[ 9, 10) 1 100.0% 100.0% ##########
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, 10) 0 0.0% 100.0%
+[ 10, inf) 0 0.0% 100.0%
+Benchmark__per_chunk_100KB-2 2000 5900078 ns/op 33.90 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%
+
+================================================================================
+Echo RPC when multiplexing with Echo streaming RPC
+================================================================================
+Benchmark___10B_mux__100_chunks___10B 1000 8940566 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 3 Max: 11 Avg: 8.50
+------------------------------------------------------------
+[ 3, 4) 68 6.8% 6.8% #
+[ 4, 5) 23 2.3% 9.1%
+[ 5, 6) 3 0.3% 9.4%
+[ 6, 7) 3 0.3% 9.7%
+[ 7, 8) 35 3.5% 13.2%
+[ 8, 10) 526 52.6% 65.8% #####
+[ 10, 12) 342 34.2% 100.0% ###
+[ 12, 14) 0 0.0% 100.0%
+[ 14, 17) 0 0.0% 100.0%
+[ 17, 20) 0 0.0% 100.0%
+[ 20, 24) 0 0.0% 100.0%
+[ 24, 28) 0 0.0% 100.0%
+[ 28, 33) 0 0.0% 100.0%
+[ 33, 39) 0 0.0% 100.0%
+[ 39, 45) 0 0.0% 100.0%
+[ 45, 53) 0 0.0% 100.0%
+[ 53, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks___10B-2 5000 3061921 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 8 Avg: 2.55
+------------------------------------------------------------
+[ 1, 2) 1029 20.6% 20.6% ##
+[ 2, 3) 1860 37.2% 57.8% ####
+[ 3, 4) 1083 21.7% 79.4% ##
+[ 4, 5) 577 11.5% 91.0% #
+[ 5, 6) 303 6.1% 97.0% #
+[ 6, 7) 118 2.4% 99.4%
+[ 7, 9) 30 0.6% 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___10B_mux__100_chunks__100B 1000 10060243 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 3 Max: 14 Avg: 9.46
+------------------------------------------------------------
+[ 3, 4) 25 2.5% 2.5%
+[ 4, 5) 44 4.4% 6.9%
+[ 5, 6) 3 0.3% 7.2%
+[ 6, 7) 6 0.6% 7.8%
+[ 7, 8) 10 1.0% 8.8%
+[ 8, 10) 585 58.5% 67.3% ######
+[ 10, 12) 104 10.4% 77.7% #
+[ 12, 15) 223 22.3% 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, 44) 0 0.0% 100.0%
+[ 44, 53) 0 0.0% 100.0%
+[ 53, 64) 0 0.0% 100.0%
+[ 64, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks__100B-2 2000 4415919 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 1 Max: 10 Avg: 3.92
+------------------------------------------------------------
+[ 1, 2) 169 8.5% 8.5% #
+[ 2, 3) 315 15.8% 24.2% ##
+[ 3, 4) 500 25.0% 49.2% ###
+[ 4, 5) 320 16.0% 65.2% ##
+[ 5, 6) 314 15.7% 80.9% ##
+[ 6, 8) 257 12.9% 93.8% #
+[ 8, 10) 121 6.1% 99.8% #
+[ 10, 12) 4 0.2% 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___10B_mux__100_chunks___1KB 1000 11654085 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 3 Max: 18 Avg: 11.22
+------------------------------------------------------------
+[ 3, 4) 67 6.7% 6.7% #
+[ 4, 5) 32 3.2% 9.9%
+[ 5, 6) 3 0.3% 10.2%
+[ 6, 7) 1 0.1% 10.3%
+[ 7, 9) 8 0.8% 11.1%
+[ 9, 11) 148 14.8% 25.9% #
+[ 11, 13) 424 42.4% 68.3% ####
+[ 13, 16) 284 28.4% 96.7% ###
+[ 16, 20) 33 3.3% 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, 68) 0 0.0% 100.0%
+[ 68, 82) 0 0.0% 100.0%
+[ 82, inf) 0 0.0% 100.0%
+Benchmark___10B_mux__100_chunks___1KB-2 2000 4707737 ns/op 0.00 MB/s
+Histogram (unit: us)
+Count: 2000 Min: 964 Max: 11881 Avg: 4706.78
+------------------------------------------------------------
+[ 964, 965) 1 0.1% 0.1%
+[ 965, 966) 0 0.0% 0.1%
+[ 966, 969) 0 0.0% 0.1%
+[ 969, 975) 0 0.0% 0.1%
+[ 975, 986) 0 0.0% 0.1%
+[ 986, 1008) 0 0.0% 0.1%
+[ 1008, 1049) 3 0.2% 0.2%
+[ 1049, 1125) 53 2.7% 2.9%
+[ 1125, 1267) 141 7.1% 9.9% #
+[ 1267, 1531) 137 6.9% 16.8% #
+[ 1531, 2023) 103 5.2% 21.9% #
+[ 2023, 2937) 161 8.1% 30.0% #
+[ 2937, 4637) 503 25.2% 55.1% ###
+[ 4637, 7797) 631 31.6% 86.7% ###
+[ 7797, 13670) 267 13.4% 100.0% #
+[13670, 24586) 0 0.0% 100.0%
+[24586, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___10B 100 62531874 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 9 Max: 88 Avg: 62.03
+------------------------------------------------------------
+[ 9, 10) 1 1.0% 1.0%
+[ 10, 11) 1 1.0% 2.0%
+[ 11, 12) 0 0.0% 2.0%
+[ 12, 14) 0 0.0% 2.0%
+[ 14, 17) 0 0.0% 2.0%
+[ 17, 21) 0 0.0% 2.0%
+[ 21, 26) 3 3.0% 5.0%
+[ 26, 33) 3 3.0% 8.0%
+[ 33, 43) 10 10.0% 18.0% #
+[ 43, 56) 12 12.0% 30.0% #
+[ 56, 74) 34 34.0% 64.0% ###
+[ 74, 98) 36 36.0% 100.0% ####
+[ 98, 130) 0 0.0% 100.0%
+[130, 174) 0 0.0% 100.0%
+[174, 233) 0 0.0% 100.0%
+[233, 312) 0 0.0% 100.0%
+[312, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___10B-2 500 17551728 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 1 Max: 44 Avg: 17.05
+------------------------------------------------------------
+[ 1, 2) 6 1.2% 1.2%
+[ 2, 3) 27 5.4% 6.6% #
+[ 3, 4) 27 5.4% 12.0% #
+[ 4, 6) 45 9.0% 21.0% #
+[ 6, 8) 39 7.8% 28.8% #
+[ 8, 11) 41 8.2% 37.0% #
+[ 11, 15) 54 10.8% 47.8% #
+[ 15, 20) 52 10.4% 58.2% #
+[ 20, 27) 86 17.2% 75.4% ##
+[ 27, 36) 93 18.6% 94.0% ##
+[ 36, 48) 30 6.0% 100.0% #
+[ 48, 63) 0 0.0% 100.0%
+[ 63, 83) 0 0.0% 100.0%
+[ 83, 109) 0 0.0% 100.0%
+[109, 142) 0 0.0% 100.0%
+[142, 185) 0 0.0% 100.0%
+[185, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks__100B 100 75553069 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 31 Max: 97 Avg: 75.03
+------------------------------------------------------------
+[ 31, 32) 6 6.0% 6.0% #
+[ 32, 33) 1 1.0% 7.0%
+[ 33, 34) 0 0.0% 7.0%
+[ 34, 36) 5 5.0% 12.0% #
+[ 36, 39) 1 1.0% 13.0%
+[ 39, 43) 1 1.0% 14.0%
+[ 43, 48) 2 2.0% 16.0%
+[ 48, 55) 4 4.0% 20.0%
+[ 55, 64) 6 6.0% 26.0% #
+[ 64, 76) 9 9.0% 35.0% #
+[ 76, 92) 32 32.0% 67.0% ###
+[ 92, 113) 33 33.0% 100.0% ###
+[113, 141) 0 0.0% 100.0%
+[141, 178) 0 0.0% 100.0%
+[178, 227) 0 0.0% 100.0%
+[227, 292) 0 0.0% 100.0%
+[292, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks__100B-2 500 24959801 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 1 Max: 58 Avg: 24.46
+------------------------------------------------------------
+[ 1, 2) 21 4.2% 4.2%
+[ 2, 3) 29 5.8% 10.0% #
+[ 3, 4) 19 3.8% 13.8%
+[ 4, 6) 39 7.8% 21.6% #
+[ 6, 8) 34 6.8% 28.4% #
+[ 8, 11) 39 7.8% 36.2% #
+[ 11, 16) 42 8.4% 44.6% #
+[ 16, 22) 30 6.0% 50.6% #
+[ 22, 30) 35 7.0% 57.6% #
+[ 30, 41) 63 12.6% 70.2% #
+[ 41, 55) 142 28.4% 98.6% ###
+[ 55, 74) 7 1.4% 100.0%
+[ 74, 99) 0 0.0% 100.0%
+[ 99, 132) 0 0.0% 100.0%
+[132, 175) 0 0.0% 100.0%
+[175, 232) 0 0.0% 100.0%
+[232, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___1KB 100 79070593 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 31 Max: 122 Avg: 78.61
+------------------------------------------------------------
+[ 31, 32) 1 1.0% 1.0%
+[ 32, 33) 0 0.0% 1.0%
+[ 33, 34) 0 0.0% 1.0%
+[ 34, 36) 0 0.0% 1.0%
+[ 36, 39) 0 0.0% 1.0%
+[ 39, 43) 1 1.0% 2.0%
+[ 43, 49) 8 8.0% 10.0% #
+[ 49, 57) 6 6.0% 16.0% #
+[ 57, 68) 17 17.0% 33.0% ##
+[ 68, 82) 26 26.0% 59.0% ###
+[ 82, 102) 14 14.0% 73.0% #
+[102, 129) 27 27.0% 100.0% ###
+[129, 165) 0 0.0% 100.0%
+[165, 214) 0 0.0% 100.0%
+[214, 281) 0 0.0% 100.0%
+[281, 371) 0 0.0% 100.0%
+[371, inf) 0 0.0% 100.0%
+Benchmark___10B_mux___1K_chunks___1KB-2 500 20596205 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 1 Max: 59 Avg: 20.11
+------------------------------------------------------------
+[ 1, 2) 60 12.0% 12.0% #
+[ 2, 3) 10 2.0% 14.0%
+[ 3, 4) 8 1.6% 15.6%
+[ 4, 6) 28 5.6% 21.2% #
+[ 6, 8) 18 3.6% 24.8%
+[ 8, 11) 33 6.6% 31.4% #
+[ 11, 16) 40 8.0% 39.4% #
+[ 16, 22) 58 11.6% 51.0% #
+[ 22, 30) 103 20.6% 71.6% ##
+[ 30, 41) 112 22.4% 94.0% ##
+[ 41, 55) 29 5.8% 99.8% #
+[ 55, 74) 1 0.2% 100.0%
+[ 74, 99) 0 0.0% 100.0%
+[ 99, 132) 0 0.0% 100.0%
+[132, 176) 0 0.0% 100.0%
+[176, 233) 0 0.0% 100.0%
+[233, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks___10B 2000 10355660 ns/op 0.02 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 3 Max: 21 Avg: 9.76
+------------------------------------------------------------
+[ 3, 4) 109 5.5% 5.5% #
+[ 4, 5) 23 1.2% 6.6%
+[ 5, 6) 5 0.2% 6.9%
+[ 6, 7) 1 0.1% 6.9%
+[ 7, 9) 187 9.3% 16.2% #
+[ 9, 11) 1358 67.9% 84.2% #######
+[ 11, 14) 34 1.7% 85.9%
+[ 14, 17) 59 3.0% 88.8%
+[ 17, 21) 221 11.1% 99.9% #
+[ 21, 26) 3 0.2% 100.0%
+[ 26, 32) 0 0.0% 100.0%
+[ 32, 40) 0 0.0% 100.0%
+[ 40, 50) 0 0.0% 100.0%
+[ 50, 62) 0 0.0% 100.0%
+[ 62, 76) 0 0.0% 100.0%
+[ 76, 93) 0 0.0% 100.0%
+[ 93, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks___10B-2 5000 3570382 ns/op 0.06 MB/s
+Histogram (unit: ms)
+Count: 5000 Min: 1 Max: 14 Avg: 3.06
+------------------------------------------------------------
+[ 1, 2) 505 10.1% 10.1% #
+[ 2, 3) 2329 46.6% 56.7% #####
+[ 3, 4) 1243 24.9% 81.5% ##
+[ 4, 5) 337 6.7% 88.3% #
+[ 5, 6) 81 1.6% 89.9%
+[ 6, 8) 92 1.8% 91.7%
+[ 8, 10) 183 3.7% 95.4%
+[ 10, 13) 210 4.2% 99.6%
+[ 13, 16) 20 0.4% 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, 47) 0 0.0% 100.0%
+[ 47, 57) 0 0.0% 100.0%
+[ 57, 69) 0 0.0% 100.0%
+[ 69, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks__100B 1000 12339288 ns/op 0.02 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 3 Max: 29 Avg: 11.94
+------------------------------------------------------------
+[ 3, 4) 4 0.4% 0.4%
+[ 4, 5) 64 6.4% 6.8% #
+[ 5, 6) 6 0.6% 7.4%
+[ 6, 7) 0 0.0% 7.4%
+[ 7, 9) 4 0.4% 7.8%
+[ 9, 11) 197 19.7% 27.5% ##
+[ 11, 14) 596 59.6% 87.1% ######
+[ 14, 18) 6 0.6% 87.7%
+[ 18, 23) 14 1.4% 89.1%
+[ 23, 30) 109 10.9% 100.0% #
+[ 30, 38) 0 0.0% 100.0%
+[ 38, 48) 0 0.0% 100.0%
+[ 48, 61) 0 0.0% 100.0%
+[ 61, 77) 0 0.0% 100.0%
+[ 77, 97) 0 0.0% 100.0%
+[ 97, 122) 0 0.0% 100.0%
+[122, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks__100B-2 2000 5116350 ns/op 0.04 MB/s
+Histogram (unit: ms)
+Count: 2000 Min: 1 Max: 16 Avg: 4.61
+------------------------------------------------------------
+[ 1, 2) 71 3.6% 3.6%
+[ 2, 3) 252 12.6% 16.2% #
+[ 3, 4) 497 24.9% 41.0% ##
+[ 4, 5) 468 23.4% 64.4% ##
+[ 5, 7) 512 25.6% 90.0% ###
+[ 7, 9) 24 1.2% 91.2%
+[ 9, 11) 30 1.5% 92.7%
+[ 11, 14) 66 3.3% 96.0%
+[ 14, 18) 80 4.0% 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__100B_mux__100_chunks___1KB 1000 14696248 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 1000 Min: 3 Max: 32 Avg: 14.10
+------------------------------------------------------------
+[ 3, 4) 18 1.8% 1.8%
+[ 4, 5) 39 3.9% 5.7%
+[ 5, 6) 6 0.6% 6.3%
+[ 6, 7) 1 0.1% 6.4%
+[ 7, 9) 1 0.1% 6.5%
+[ 9, 12) 112 11.2% 17.7% #
+[ 12, 15) 643 64.3% 82.0% ######
+[ 15, 19) 13 1.3% 83.3%
+[ 19, 25) 10 1.0% 84.3%
+[ 25, 32) 155 15.5% 99.8% ##
+[ 32, 41) 2 0.2% 100.0%
+[ 41, 52) 0 0.0% 100.0%
+[ 52, 66) 0 0.0% 100.0%
+[ 66, 84) 0 0.0% 100.0%
+[ 84, 107) 0 0.0% 100.0%
+[107, 135) 0 0.0% 100.0%
+[135, inf) 0 0.0% 100.0%
+Benchmark__100B_mux__100_chunks___1KB-2 2000 5375339 ns/op 0.04 MB/s
+Histogram (unit: us)
+Count: 2000 Min: 990 Max: 20242 Avg: 5374.31
+------------------------------------------------------------
+[ 990, 991) 1 0.1% 0.1%
+[ 991, 992) 0 0.0% 0.1%
+[ 992, 995) 0 0.0% 0.1%
+[ 995, 1002) 0 0.0% 0.1%
+[ 1002, 1015) 0 0.0% 0.1%
+[ 1015, 1041) 2 0.1% 0.2%
+[ 1041, 1092) 5 0.2% 0.4%
+[ 1092, 1191) 72 3.6% 4.0%
+[ 1191, 1383) 215 10.8% 14.8% #
+[ 1383, 1755) 108 5.4% 20.2% #
+[ 1755, 2473) 117 5.9% 26.0% #
+[ 2473, 3859) 280 14.0% 40.0% #
+[ 3859, 6535) 609 30.5% 70.5% ###
+[ 6535, 11701) 392 19.6% 90.1% ##
+[11701, 21674) 199 10.0% 100.0% #
+[21674, 40926) 0 0.0% 100.0%
+[40926, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___10B 100 70735100 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 9 Max: 102 Avg: 70.26
+------------------------------------------------------------
+[ 9, 10) 1 1.0% 1.0%
+[ 10, 11) 0 0.0% 1.0%
+[ 11, 12) 0 0.0% 1.0%
+[ 12, 14) 0 0.0% 1.0%
+[ 14, 17) 0 0.0% 1.0%
+[ 17, 21) 2 2.0% 3.0%
+[ 21, 27) 1 1.0% 4.0%
+[ 27, 35) 2 2.0% 6.0%
+[ 35, 46) 12 12.0% 18.0% #
+[ 46, 61) 12 12.0% 30.0% #
+[ 61, 81) 39 39.0% 69.0% ####
+[ 81, 108) 31 31.0% 100.0% ###
+[108, 145) 0 0.0% 100.0%
+[145, 195) 0 0.0% 100.0%
+[195, 263) 0 0.0% 100.0%
+[263, 355) 0 0.0% 100.0%
+[355, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___10B-2 500 17267283 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 1 Max: 49 Avg: 16.74
+------------------------------------------------------------
+[ 1, 2) 8 1.6% 1.6%
+[ 2, 3) 40 8.0% 9.6% #
+[ 3, 4) 33 6.6% 16.2% #
+[ 4, 6) 56 11.2% 27.4% #
+[ 6, 8) 33 6.6% 34.0% #
+[ 8, 11) 44 8.8% 42.8% #
+[ 11, 15) 42 8.4% 51.2% #
+[ 15, 21) 57 11.4% 62.6% #
+[ 21, 28) 79 15.8% 78.4% ##
+[ 28, 38) 67 13.4% 91.8% #
+[ 38, 51) 41 8.2% 100.0% #
+[ 51, 68) 0 0.0% 100.0%
+[ 68, 90) 0 0.0% 100.0%
+[ 90, 118) 0 0.0% 100.0%
+[118, 155) 0 0.0% 100.0%
+[155, 202) 0 0.0% 100.0%
+[202, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks__100B 100 72232967 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 18 Max: 107 Avg: 71.73
+------------------------------------------------------------
+[ 18, 19) 1 1.0% 1.0%
+[ 19, 20) 0 0.0% 1.0%
+[ 20, 21) 0 0.0% 1.0%
+[ 21, 23) 0 0.0% 1.0%
+[ 23, 26) 0 0.0% 1.0%
+[ 26, 30) 0 0.0% 1.0%
+[ 30, 36) 2 2.0% 3.0%
+[ 36, 44) 6 6.0% 9.0% #
+[ 44, 54) 15 15.0% 24.0% ##
+[ 54, 68) 16 16.0% 40.0% ##
+[ 68, 87) 30 30.0% 70.0% ###
+[ 87, 113) 30 30.0% 100.0% ###
+[113, 149) 0 0.0% 100.0%
+[149, 197) 0 0.0% 100.0%
+[197, 262) 0 0.0% 100.0%
+[262, 350) 0 0.0% 100.0%
+[350, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks__100B-2 500 25789652 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 1 Max: 63 Avg: 25.29
+------------------------------------------------------------
+[ 1, 2) 12 2.4% 2.4%
+[ 2, 3) 18 3.6% 6.0%
+[ 3, 4) 26 5.2% 11.2% #
+[ 4, 6) 42 8.4% 19.6% #
+[ 6, 9) 52 10.4% 30.0% #
+[ 9, 12) 38 7.6% 37.6% #
+[ 12, 17) 32 6.4% 44.0% #
+[ 17, 23) 28 5.6% 49.6% #
+[ 23, 32) 45 9.0% 58.6% #
+[ 32, 43) 90 18.0% 76.6% ##
+[ 43, 58) 101 20.2% 96.8% ##
+[ 58, 78) 16 3.2% 100.0%
+[ 78, 105) 0 0.0% 100.0%
+[105, 140) 0 0.0% 100.0%
+[140, 187) 0 0.0% 100.0%
+[187, 249) 0 0.0% 100.0%
+[249, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___1KB 100 87959533 ns/op 0.00 MB/s
+Histogram (unit: ms)
+Count: 100 Min: 35 Max: 144 Avg: 87.48
+------------------------------------------------------------
+[ 35, 36) 1 1.0% 1.0%
+[ 36, 37) 3 3.0% 4.0%
+[ 37, 38) 1 1.0% 5.0%
+[ 38, 40) 0 0.0% 5.0%
+[ 40, 43) 1 1.0% 6.0%
+[ 43, 47) 0 0.0% 6.0%
+[ 47, 53) 0 0.0% 6.0%
+[ 53, 61) 7 7.0% 13.0% #
+[ 61, 73) 22 22.0% 35.0% ##
+[ 73, 89) 19 19.0% 54.0% ##
+[ 89, 111) 14 14.0% 68.0% #
+[111, 142) 31 31.0% 99.0% ###
+[142, 184) 1 1.0% 100.0%
+[184, 242) 0 0.0% 100.0%
+[242, 321) 0 0.0% 100.0%
+[321, 430) 0 0.0% 100.0%
+[430, inf) 0 0.0% 100.0%
+Benchmark__100B_mux___1K_chunks___1KB-2 500 22515508 ns/op 0.01 MB/s
+Histogram (unit: ms)
+Count: 500 Min: 1 Max: 58 Avg: 22.02
+------------------------------------------------------------
+[ 1, 2) 71 14.2% 14.2% #
+[ 2, 3) 12 2.4% 16.6%
+[ 3, 4) 11 2.2% 18.8%
+[ 4, 6) 27 5.4% 24.2% #
+[ 6, 8) 14 2.8% 27.0%
+[ 8, 11) 23 4.6% 31.6%
+[ 11, 16) 31 6.2% 37.8% #
+[ 16, 22) 57 11.4% 49.2% #
+[ 22, 30) 85 17.0% 66.2% ##
+[ 30, 41) 92 18.4% 84.6% ##
+[ 41, 55) 68 13.6% 98.2% #
+[ 55, 74) 9 1.8% 100.0%
+[ 74, 99) 0 0.0% 100.0%
+[ 99, 132) 0 0.0% 100.0%
+[132, 175) 0 0.0% 100.0%
+[175, 232) 0 0.0% 100.0%
+[232, inf) 0 0.0% 100.0%
diff --git a/runtimes/google/ipc/benchmarks/bm/main.go b/runtimes/google/ipc/benchmarks/bm/main.go
new file mode 100644
index 0000000..c769a7d
--- /dev/null
+++ b/runtimes/google/ipc/benchmarks/bm/main.go
@@ -0,0 +1,185 @@
+// A simple command-line tool to run IPC benchmarks.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "os"
+ "runtime"
+ "strconv"
+ "strings"
+ "testing"
+
+ "veyron.io/veyron/veyron/lib/testutil"
+ "veyron.io/veyron/veyron/profiles"
+ "veyron.io/veyron/veyron/runtimes/google/ipc/benchmarks"
+
+ "veyron.io/veyron/veyron2"
+ "veyron.io/veyron/veyron2/rt"
+)
+
+var (
+ vrt veyron2.Runtime
+ address string
+
+ cpuList []int
+
+ histogram = flag.Bool("histogram", false, "If ture, output histogram of the benchmark results.")
+)
+
+func runBenchmarkEcho() {
+ payloadSizes := []int{1, 10, 100, 1000, 10000, 100000}
+
+ for _, size := range payloadSizes {
+ name := fmt.Sprintf("%sB", formatNum(size))
+ runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
+ benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, size, stats)
+ })
+ }
+}
+
+func runBenchmarkEchoStream() {
+ chunkCnts := []int{1, 10, 100, 1000}
+ payloadSizes := []int{1, 10, 100, 1000, 10000, 100000}
+
+ for _, cnt := range chunkCnts {
+ for _, size := range payloadSizes {
+ name := formatNum(cnt)
+ if cnt == 1 {
+ name += "_chunk_"
+ } else {
+ name += "_chunks"
+ }
+ name += fmt.Sprintf("%sB", formatNum(size))
+ runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
+ benchmarks.CallEchoStream(b, vrt.NewContext(), address, b.N, cnt, size, stats)
+ })
+ }
+ }
+}
+
+func runBenchmarkEchoStreamPerChunk() {
+ payloadSizes := []int{1, 10, 100, 1000, 10000, 100000}
+
+ for _, size := range payloadSizes {
+ name := fmt.Sprintf("__per_chunk%sB", formatNum(size))
+ runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
+ benchmarks.CallEchoStream(b, vrt.NewContext(), address, 1, b.N, size, stats)
+ })
+ }
+}
+
+func runBenchmarkMux() {
+ payloadSizes := []int{10, 100}
+
+ chunkCntsB := []int{100, 1000}
+ payloadSizesB := []int{10, 100, 1000}
+
+ for _, size := range payloadSizes {
+ for _, cntB := range chunkCntsB {
+ for _, sizeB := range payloadSizesB {
+ name := fmt.Sprintf("%sB_mux%s", formatNum(size), formatNum(cntB))
+ if cntB == 1 {
+ name += "_chunk_"
+ } else {
+ name += "_chunks"
+ }
+ name += fmt.Sprintf("%sB", formatNum(sizeB))
+ runBenchmark(name, func(b *testing.B, stats *testutil.BenchStats) {
+ dummyB := testing.B{}
+ _, stop := benchmarks.StartEchoStream(&dummyB, vrt.NewContext(), address, 0, cntB, sizeB, nil)
+
+ b.ResetTimer()
+ benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, size, stats)
+ b.StopTimer()
+
+ stop()
+ })
+ }
+ }
+ }
+}
+
+// runBenchmark runs a single bencmark function 'f'.
+func runBenchmark(name string, f func(*testing.B, *testutil.BenchStats)) {
+ for _, cpu := range cpuList {
+ runtime.GOMAXPROCS(cpu)
+
+ benchName := "Benchmark" + name
+ if cpu != 1 {
+ benchName += fmt.Sprintf("-%d", cpu)
+ }
+
+ var stats *testutil.BenchStats
+ if *histogram {
+ stats = testutil.NewBenchStats(16)
+ }
+
+ r := testing.Benchmark(func(b *testing.B) {
+ f(b, stats)
+ })
+
+ fmt.Printf("%s\t%s\n", benchName, r)
+ if stats != nil {
+ stats.Print(os.Stdout)
+ }
+ }
+}
+
+// formatNum formats the given number n with an optional metric prefix
+// and padding with underscores if necessary.
+func formatNum(n int) string {
+ value := float32(n)
+ var prefix string
+ for _, p := range []string{"", "K", "M", "G", "T"} {
+ if value < 1000 {
+ prefix = p
+ break
+ }
+ value /= 1000
+ }
+
+ return strings.Replace(fmt.Sprintf("%*.0f%s", 5-len(prefix), value, prefix), " ", "_", -1)
+}
+
+// parseCpuList looks up the existing '-test.cpu' flag value and parses it into
+// the list of cpus.
+func parseCpuList() {
+ for _, v := range strings.Split(flag.Lookup("test.cpu").Value.String(), ",") {
+ v = strings.TrimSpace(v)
+ if v == "" {
+ continue
+ }
+ cpu, err := strconv.Atoi(v)
+ if err != nil || cpu <= 0 {
+ fmt.Fprintf(os.Stderr, "invalid -test.cpu %q\n", v)
+ os.Exit(1)
+ }
+ cpuList = append(cpuList, cpu)
+ }
+ if cpuList == nil {
+ cpuList = append(cpuList, runtime.GOMAXPROCS(-1))
+ }
+}
+
+func main() {
+ flag.Parse()
+ parseCpuList()
+
+ var err error
+ vrt, err = rt.New()
+ if err != nil {
+ panic(err)
+ }
+ defer vrt.Cleanup()
+
+ var stop func()
+ address, stop = benchmarks.StartServer(vrt, profiles.LocalListenSpec)
+
+ runBenchmarkEcho()
+ runBenchmarkEchoStream()
+ runBenchmarkEchoStreamPerChunk()
+ runBenchmarkMux()
+
+ stop()
+}
diff --git a/runtimes/google/ipc/benchmarks/bmclient/main.go b/runtimes/google/ipc/benchmarks/bmclient/main.go
index 03bd219..5ad7c0f 100644
--- a/runtimes/google/ipc/benchmarks/bmclient/main.go
+++ b/runtimes/google/ipc/benchmarks/bmclient/main.go
@@ -3,9 +3,6 @@
import (
"flag"
- "os"
-
- "veyron.io/veyron/veyron/runtimes/google/ipc/benchmarks"
"veyron.io/veyron/veyron2/rt"
)
@@ -24,10 +21,13 @@
}
defer runtime.Cleanup()
- ctx := runtime.NewContext()
- if *chunkCount == 0 {
- benchmarks.CallEcho(ctx, *server, *count, *payloadSize, os.Stdout)
- } else {
- benchmarks.CallEchoStream(runtime, *server, *count, *chunkCount, *payloadSize, os.Stdout)
- }
+ // TODO(jhahn): Fix this.
+ /*
+ ctx := runtime.NewContext()
+ if *chunkCount == 0 {
+ benchmarks.CallEcho(ctx, *server, *count, *payloadSize, os.Stdout)
+ } else {
+ benchmarks.CallEchoStream(runtime, *server, *count, *chunkCount, *payloadSize, os.Stdout)
+ }
+ */
}
diff --git a/runtimes/google/ipc/benchmarks/client.go b/runtimes/google/ipc/benchmarks/client.go
index b9fe30c..bad7225 100644
--- a/runtimes/google/ipc/benchmarks/client.go
+++ b/runtimes/google/ipc/benchmarks/client.go
@@ -3,96 +3,168 @@
import (
"bytes"
"fmt"
- "io"
+ "testing"
"time"
- "veyron.io/veyron/veyron2"
+ "veyron.io/veyron/veyron/lib/testutil"
+
"veyron.io/veyron/veyron2/context"
"veyron.io/veyron/veyron2/vlog"
)
-// CallEcho calls the Echo method 'iterations' times with the given payload
-// size, and optionally logs the result.
-func CallEcho(ctx context.T, address string, iterations, payloadSize int, log io.Writer) {
+// CallEcho calls 'Echo' method 'iterations' times with the given payload
+// size, and optionally updates the stats.
+func CallEcho(b *testing.B, ctx context.T, address string, iterations, payloadSize int, stats *testutil.BenchStats) {
+ stub := BenchmarkClient(address)
+ _, err := stub.Echo(ctx, make([]byte, 0)) // Create VC.
+ if err != nil {
+ vlog.Fatalf("Echo failed: %v", err)
+ }
+
payload := make([]byte, payloadSize)
- for _, i := range payload {
+ for i := range payload {
payload[i] = byte(i & 0xff)
}
- stub := BenchmarkClient(address)
+ if stats != nil {
+ stats.Clear()
+ }
+
+ b.SetBytes(int64(payloadSize) * 2) // 2 for round trip of each payload.
+ b.ResetTimer() // Exclude setup time from measurement.
+
for i := 0; i < iterations; i++ {
+ b.StartTimer()
start := time.Now()
- result, err := stub.Echo(ctx, payload)
+
+ r, err := stub.Echo(ctx, payload)
+
elapsed := time.Since(start)
+ b.StopTimer()
+
if err != nil {
vlog.Fatalf("Echo failed: %v", err)
}
- if !bytes.Equal(payload, result) {
- vlog.Fatalf("Echo return different payload: got %v, expected %v", result, payload)
+ if !bytes.Equal(r, payload) {
+ vlog.Fatalf("Echo returned %v, but expected %v", r, payload)
}
- if log != nil {
- log.Write([]byte(fmt.Sprintf("CallEcho %d %d\n", i, elapsed)))
+
+ if stats != nil {
+ stats.Add(elapsed)
}
}
}
-// CallEchoStream calls the EchoStream method 'rpcCount' times. Each iteration
-// sends 'messageCount' messages on the stream and receives the same number
-// back. Each message has the given payload size. Optionally logs the result.
-func CallEchoStream(runtime veyron2.Runtime, address string, rpcCount, messageCount, payloadSize int, log io.Writer) {
+// CallEchoStream calls 'EchoStream' method 'iterations' times. Each iteration
+// sends 'chunkCnt' chunks on the stream and receives the same number of chunks
+// back. Each chunk has the given payload size. Optionally updates the stats.
+func CallEchoStream(b *testing.B, ctx context.T, address string, iterations, chunkCnt, payloadSize int, stats *testutil.BenchStats) {
+ done, _ := StartEchoStream(b, ctx, address, iterations, chunkCnt, payloadSize, stats)
+ <-done
+}
+
+// StartEchoStream starts to call 'EchoStream' method 'iterations' times.
+// This does not block, and returns a channel that will receive the number
+// of iterations when it's done. It also returns a callback function to stop
+// the streaming. Each iteration requests 'chunkCnt' chunks on the stream and
+// receives that number of chunks back. Each chunk has the given payload size.
+// Optionally updates the stats. Zero 'iterations' means unlimited.
+func StartEchoStream(b *testing.B, ctx context.T, address string, iterations, chunkCnt, payloadSize int, stats *testutil.BenchStats) (<-chan int, func()) {
+ stub := BenchmarkClient(address)
+ _, err := stub.Echo(ctx, make([]byte, 0)) // Create VC.
+ if err != nil {
+ vlog.Fatalf("Echo failed: %v", err)
+ }
+
payload := make([]byte, payloadSize)
- for _, i := range payload {
+ for i := range payload {
payload[i] = byte(i & 0xff)
}
- stub := BenchmarkClient(address)
- for i := 0; i < rpcCount; i++ {
- start := time.Now()
- ctx, _ := runtime.NewContext().WithTimeout(time.Hour)
- stream, err := stub.EchoStream(ctx)
- if err != nil {
- vlog.Fatalf("EchoStream failed: %v", err)
+ if stats != nil {
+ stats.Clear()
+ }
+
+ done, stop := make(chan int, 1), make(chan struct{})
+ stopped := func() bool {
+ select {
+ case <-stop:
+ return true
+ default:
+ return false
}
- done := make(chan error, 1)
- go func() {
- rStream := stream.RecvStream()
- for rStream.Advance() {
- chunk := rStream.Value()
- if err == io.EOF {
- done <- nil
- return
- }
- if err != nil {
- done <- err
- return
- }
- if !bytes.Equal(payload, chunk) {
- done <- fmt.Errorf("Recv got different payload: got %v, expected %v", chunk, payload)
- return
- }
+ }
+
+ if b.N > 0 {
+ // 2 for round trip of each payload.
+ b.SetBytes(int64((iterations*chunkCnt/b.N)*payloadSize) * 2)
+ }
+ b.ResetTimer() // Exclude setup time from measurement.
+
+ go func() {
+ defer close(done)
+
+ n := 0
+ for ; !stopped() && (iterations == 0 || n < iterations); n++ {
+ b.StartTimer()
+ start := time.Now()
+
+ stream, err := stub.EchoStream(ctx)
+ if err != nil {
+ vlog.Fatalf("EchoStream failed: %v", err)
}
- done <- rStream.Err()
- }()
- sender := stream.SendStream()
- for j := 0; j < messageCount; j++ {
- if err = sender.Send(payload); err != nil {
- vlog.Fatalf("Send failed: %v", err)
+ rDone := make(chan error, 1)
+ go func() {
+ defer close(rDone)
+
+ rStream := stream.RecvStream()
+ i := 0
+ for ; rStream.Advance(); i++ {
+ r := rStream.Value()
+ if !bytes.Equal(r, payload) {
+ rDone <- fmt.Errorf("EchoStream returned %v, but expected %v", r, payload)
+ return
+ }
+ }
+ if i != chunkCnt {
+ rDone <- fmt.Errorf("EchoStream returned %d chunks, but expected %d", n, chunkCnt)
+ return
+ }
+ rDone <- rStream.Err()
+ }()
+
+ sStream := stream.SendStream()
+ for i := 0; i < chunkCnt; i++ {
+ if err = sStream.Send(payload); err != nil {
+ vlog.Fatalf("EchoStream Send failed: %v", err)
+ }
+ }
+ if err = sStream.Close(); err != nil {
+ vlog.Fatalf("EchoStream Send failed: %v", err)
+ }
+
+ if err = <-rDone; err != nil {
+ vlog.Fatalf("%v", err)
+ }
+
+ if err = stream.Finish(); err != nil {
+ vlog.Fatalf("Finish failed: %v", err)
+ }
+
+ elapsed := time.Since(start)
+ b.StopTimer()
+
+ if stats != nil {
+ stats.Add(elapsed)
}
}
- if err = sender.Close(); err != nil {
- vlog.Fatalf("Close() failed: %v", err)
- }
- if err = <-done; err != nil {
- vlog.Fatalf("%v", err)
- }
- if err = stream.Finish(); err != nil {
- vlog.Fatalf("Finish failed: %v", err)
- }
- elapsed := time.Since(start)
- if log != nil {
- log.Write([]byte(fmt.Sprintf("CallEchoStream %d %d\n", i, elapsed)))
- }
+ done <- n
+ }()
+
+ return done, func() {
+ close(stop)
+ <-done
}
}
diff --git a/runtimes/google/ipc/benchmarks/ipc_test.go b/runtimes/google/ipc/benchmarks/ipc_test.go
index bfd14ad..947c972 100644
--- a/runtimes/google/ipc/benchmarks/ipc_test.go
+++ b/runtimes/google/ipc/benchmarks/ipc_test.go
@@ -3,116 +3,141 @@
import (
"testing"
- "veyron.io/veyron/veyron2"
- "veyron.io/veyron/veyron2/rt"
-
"veyron.io/veyron/veyron/profiles"
"veyron.io/veyron/veyron/runtimes/google/ipc/benchmarks"
+
+ "veyron.io/veyron/veyron2"
+ "veyron.io/veyron/veyron2/rt"
)
-var runtime veyron2.Runtime
+var vrt veyron2.Runtime
+var address string
func init() {
var err error
- runtime, err = rt.New()
+ vrt, err = rt.New()
if err != nil {
panic(err)
}
+
+ address, _ = benchmarks.StartServer(vrt, profiles.LocalListenSpec)
}
-func RunBenchmark(b *testing.B, payloadSize int) {
- address, stop := benchmarks.StartServer(runtime, profiles.LocalListenSpec)
- ctx := runtime.NewContext()
- defer stop()
- benchmarks.CallEcho(ctx, address, 1, 1, nil) // Create VC
+func runBenchmarkEcho(b *testing.B, payloadSize int) {
+ benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, payloadSize, nil)
+}
+
+func runBenchmarkEchoStream(b *testing.B, iterations, chunkCnt, payloadSize int) {
+ benchmarks.CallEchoStream(b, vrt.NewContext(), address, iterations, chunkCnt, payloadSize, nil)
+}
+
+func runBenchmarkMux(b *testing.B, payloadSize, chunkCntB, payloadSizeB int) {
+ dummyB := testing.B{}
+ _, stop := benchmarks.StartEchoStream(&dummyB, vrt.NewContext(), address, 0, chunkCntB, payloadSizeB, nil)
+
b.ResetTimer()
- benchmarks.CallEcho(ctx, address, b.N, payloadSize, nil)
+ benchmarks.CallEcho(b, vrt.NewContext(), address, b.N, payloadSize, nil)
+ b.StopTimer()
+
+ stop()
}
-func RunStreamBenchmark(b *testing.B, rpcCount, messageCount, payloadSize int) {
- address, stop := benchmarks.StartServer(runtime, profiles.LocalListenSpec)
- defer stop()
- benchmarks.CallEchoStream(runtime, address, 1, 1, 1, nil) // Create VC
- b.ResetTimer()
- benchmarks.CallEchoStream(runtime, address, rpcCount, messageCount, payloadSize, nil)
-}
-
+// Benchmarks for non-streaming RPC.
func Benchmark____1B(b *testing.B) {
- RunBenchmark(b, 1)
+ runBenchmarkEcho(b, 1)
}
func Benchmark___10B(b *testing.B) {
- RunBenchmark(b, 10)
-}
-
-func Benchmark__100B(b *testing.B) {
- RunBenchmark(b, 100)
+ runBenchmarkEcho(b, 10)
}
func Benchmark___1KB(b *testing.B) {
- RunBenchmark(b, 1000)
-}
-
-func Benchmark__10KB(b *testing.B) {
- RunBenchmark(b, 10000)
+ runBenchmarkEcho(b, 1000)
}
func Benchmark_100KB(b *testing.B) {
- RunBenchmark(b, 100000)
+ runBenchmarkEcho(b, 100000)
}
-func Benchmark_N_RPCs____1_chunk_____1B(b *testing.B) {
- RunStreamBenchmark(b, b.N, 1, 1)
+// Benchmarks for streaming RPC.
+func Benchmark____1_chunk_____1B(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 1, 1)
}
-func Benchmark_N_RPCs____1_chunk____10B(b *testing.B) {
- RunStreamBenchmark(b, b.N, 1, 10)
+func Benchmark____1_chunk____10B(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 1, 10)
}
-func Benchmark_N_RPCs____1_chunk___100B(b *testing.B) {
- RunStreamBenchmark(b, b.N, 1, 100)
+func Benchmark____1_chunk____1KB(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 1, 1000)
}
-func Benchmark_N_RPCs____1_chunk____1KB(b *testing.B) {
- RunStreamBenchmark(b, b.N, 1, 1000)
+func Benchmark____1_chunk___10KB(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 1, 10000)
}
-func Benchmark_N_RPCs____1_chunk___10KB(b *testing.B) {
- RunStreamBenchmark(b, b.N, 1, 10000)
+func Benchmark___10_chunks____1B(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 10, 1)
}
-func Benchmark_N_RPCs___10_chunks___1KB(b *testing.B) {
- RunStreamBenchmark(b, b.N, 10, 1000)
+func Benchmark___10_chunks___10B(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 10, 10)
}
-func Benchmark_N_RPCs__100_chunks___1KB(b *testing.B) {
- RunStreamBenchmark(b, b.N, 100, 1000)
+func Benchmark___10_chunks___1KB(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 10, 1000)
}
-func Benchmark_N_RPCs_1000_chunks___1KB(b *testing.B) {
- RunStreamBenchmark(b, b.N, 1000, 1000)
+func Benchmark___10_chunks__10KB(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 10, 10000)
}
-func Benchmark_1_RPC_N_chunks_____1B(b *testing.B) {
- RunStreamBenchmark(b, 1, b.N, 1)
+func Benchmark__100_chunks____1B(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 100, 1)
}
-func Benchmark_1_RPC_N_chunks____10B(b *testing.B) {
- RunStreamBenchmark(b, 1, b.N, 10)
+func Benchmark__100_chunks___10B(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 100, 10)
}
-func Benchmark_1_RPC_N_chunks___100B(b *testing.B) {
- RunStreamBenchmark(b, 1, b.N, 100)
+func Benchmark__100_chunks___1KB(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 100, 1000)
}
-func Benchmark_1_RPC_N_chunks____1KB(b *testing.B) {
- RunStreamBenchmark(b, 1, b.N, 1000)
+func Benchmark__100_chunks__10KB(b *testing.B) {
+ runBenchmarkEchoStream(b, b.N, 100, 10000)
}
-func Benchmark_1_RPC_N_chunks___10KB(b *testing.B) {
- RunStreamBenchmark(b, 1, b.N, 10000)
+// Benchmarks for per-chunk throughput in streaming RPC.
+func Benchmark__per_chunk____1B(b *testing.B) {
+ runBenchmarkEchoStream(b, 1, b.N, 1)
}
-func Benchmark_1_RPC_N_chunks__100KB(b *testing.B) {
- RunStreamBenchmark(b, 1, b.N, 100000)
+func Benchmark__per_chunk___10B(b *testing.B) {
+ runBenchmarkEchoStream(b, 1, b.N, 10)
+}
+
+func Benchmark__per_chunk___1KB(b *testing.B) {
+ runBenchmarkEchoStream(b, 1, b.N, 1000)
+}
+
+func Benchmark__per_chunk__10KB(b *testing.B) {
+ runBenchmarkEchoStream(b, 1, b.N, 10000)
+}
+
+// Benchmarks for non-streaming RPC while running streaming RPC in background.
+func Benchmark____1B_mux___10_chunks___10B(b *testing.B) {
+ runBenchmarkMux(b, 1, 10, 10)
+}
+
+func Benchmark____1B_mux___10_chunks___1KB(b *testing.B) {
+ runBenchmarkMux(b, 1, 10, 1000)
+}
+
+func Benchmark____1B_mux__100_chunks___10B(b *testing.B) {
+ runBenchmarkMux(b, 1, 100, 10)
+}
+
+func Benchmark____1B_mux__100_chunks___1KB(b *testing.B) {
+ runBenchmarkMux(b, 1, 100, 1000)
}
diff --git a/runtimes/google/ipc/server.go b/runtimes/google/ipc/server.go
index af3a370..1b6a66d 100644
--- a/runtimes/google/ipc/server.go
+++ b/runtimes/google/ipc/server.go
@@ -443,7 +443,9 @@
if err := fs.serve(); err != nil {
// TODO(caprita): Logging errors here is too spammy. For example, "not
// authorized" errors shouldn't be logged as server errors.
- vlog.Errorf("Flow serve on %v failed: %v", ep, err)
+ if err != io.EOF {
+ vlog.Errorf("Flow serve on %v failed: %v", ep, err)
+ }
}
}(flow)
}
@@ -757,6 +759,10 @@
TraceResponse: traceResponse,
}
if err := fs.enc.Encode(response); err != nil {
+ if err == io.EOF {
+ return err
+ }
+ // We'll close the flow 2x.
return verror.BadProtocolf("ipc: response encoding failed: %v", err)
}
if response.Error != nil {
@@ -764,6 +770,9 @@
}
for ix, res := range results {
if err := fs.encodeValueHack(res); err != nil {
+ if err == io.EOF {
+ return err
+ }
return verror.BadProtocolf("ipc: result #%d [%T=%v] encoding failed: %v", ix, res, res, err)
}
}
diff --git a/runtimes/google/ipc/stream/vc/flow.go b/runtimes/google/ipc/stream/vc/flow.go
index f7fa3d8..958db51 100644
--- a/runtimes/google/ipc/stream/vc/flow.go
+++ b/runtimes/google/ipc/stream/vc/flow.go
@@ -39,12 +39,12 @@
// This is appropriate when the flow has been closed by the remote end.
func (f *flow) Shutdown() {
f.reader.Close()
- f.writer.Shutdown(true)
+ f.writer.shutdown(true)
}
// Cancel closes the flow and discards any queued up write buffers.
// This is appropriate when the flow is being cancelled locally.
func (f *flow) Cancel() {
f.reader.Close()
- f.writer.Shutdown(false)
+ f.writer.shutdown(false)
}
diff --git a/runtimes/google/ipc/stream/vc/writer.go b/runtimes/google/ipc/stream/vc/writer.go
index f3f3788..7ac9fff 100644
--- a/runtimes/google/ipc/stream/vc/writer.go
+++ b/runtimes/google/ipc/stream/vc/writer.go
@@ -3,6 +3,7 @@
import (
"errors"
"fmt"
+ "io"
"sync"
"sync/atomic"
@@ -20,11 +21,12 @@
Alloc *iobuf.Allocator // Allocator for iobuf.Slice objects. GUARDED_BY(mu)
SharedCounters *vsync.Semaphore // Semaphore hosting counters shared by all flows over a VC.
- mu sync.Mutex // Guards call to Writes
- wroteOnce bool // GUARDED_BY(mu)
- isClosed bool // GUARDED_BY(mu)
- closed chan struct{} // GUARDED_BY(mu)
- deadline <-chan struct{} // GUARDED_BY(mu)
+ mu sync.Mutex // Guards call to Writes
+ wroteOnce bool // GUARDED_BY(mu)
+ isClosed bool // GUARDED_BY(mu)
+ closeError error // GUARDED_BY(mu)
+ closed chan struct{} // GUARDED_BY(mu)
+ deadline <-chan struct{} // GUARDED_BY(mu)
// Total number of bytes filled in by all Write calls on this writer.
// Atomic operations are used to manipulate it.
@@ -42,6 +44,7 @@
Alloc: alloc,
SharedCounters: counters,
closed: make(chan struct{}),
+ closeError: errWriterClosed,
}
}
@@ -50,15 +53,15 @@
// If removeWriter is true the writer will also be removed entirely from the
// bqueue, otherwise the now empty writer will eventually be returned by
// bqueue.Get.
-func (w *writer) Shutdown(removeWriter bool) {
+func (w *writer) shutdown(removeWriter bool) {
w.Sink.Shutdown(removeWriter)
- w.finishClose()
+ w.finishClose(true)
}
// Close closes the writer without discarding any queued up write buffers.
func (w *writer) Close() {
w.Sink.Close()
- w.finishClose()
+ w.finishClose(false)
}
func (w *writer) IsClosed() bool {
@@ -71,7 +74,7 @@
return w.closed
}
-func (w *writer) finishClose() {
+func (w *writer) finishClose(remoteShutdown bool) {
// IsClosed() and Closed() indicate that the writer is closed before
// finishClose() completes. This is safe because Alloc and shared counters
// are guarded, and are not accessed elsewhere after w.closed is closed.
@@ -79,8 +82,12 @@
// finishClose() is idempotent, but Go's builtin close is not.
if !w.isClosed {
w.isClosed = true
+ if remoteShutdown {
+ w.closeError = io.EOF
+ }
close(w.closed)
}
+
w.Alloc.Release()
w.mu.Unlock()
@@ -103,8 +110,9 @@
w.mu.Lock()
defer w.mu.Unlock()
if w.isClosed {
- return 0, errWriterClosed
+ return 0, w.closeError
}
+
for len(b) > 0 {
n := len(b)
if n > w.MTU {
@@ -134,7 +142,7 @@
case bqueue.ErrCancelled, vsync.ErrCanceled:
return written, timeoutError{}
case bqueue.ErrWriterIsClosed:
- return written, errWriterClosed
+ return written, w.closeError
default:
return written, fmt.Errorf("bqueue.Writer.Put failed: %v", err)
}
diff --git a/runtimes/google/ipc/stream/vc/writer_test.go b/runtimes/google/ipc/stream/vc/writer_test.go
index 1ba4908..5c2655b 100644
--- a/runtimes/google/ipc/stream/vc/writer_test.go
+++ b/runtimes/google/ipc/stream/vc/writer_test.go
@@ -2,6 +2,7 @@
import (
"bytes"
+ "io"
"net"
"reflect"
"testing"
@@ -95,6 +96,26 @@
}
}
+func TestShutdownBeforeWrite(t *testing.T) {
+ bq := drrqueue.New(128)
+ defer bq.Close()
+
+ bw, err := bq.NewWriter(0, 0, 10)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ shared := sync.NewSemaphore()
+ shared.IncN(4)
+
+ w := newTestWriter(bw, shared)
+ w.shutdown(true)
+
+ if n, err := w.Write([]byte{1, 2}); n != 0 || err != io.EOF {
+ t.Errorf("Got (%v, %v) want (0, %v)", n, err, io.EOF)
+ }
+}
+
func TestCloseDoesNotDiscardPendingWrites(t *testing.T) {
bq := drrqueue.New(128)
defer bq.Close()
diff --git a/runtimes/google/ipc/stream/vif/vif.go b/runtimes/google/ipc/stream/vif/vif.go
index 6f97362..9a9f025 100644
--- a/runtimes/google/ipc/stream/vif/vif.go
+++ b/runtimes/google/ipc/stream/vif/vif.go
@@ -386,6 +386,10 @@
if vc, _, _ := vif.vcMap.Find(m.VCI); vc != nil {
vif.vcMap.Delete(vc.VCI())
vlog.VI(2).Infof("CloseVC(%+v) on VIF %s", m, vif)
+ // TODO(cnicolaou): it would be nice to have a method on VC
+ // to indicate a 'remote close' rather than a 'local one'. This helps
+ // with error reporting since we expect reads/writes to occur
+ // after a remote close, but not after a local close.
vc.Close(fmt.Sprintf("remote end closed VC(%v)", m.Error))
return nil
}
diff --git a/services/identity/identityd/main.go b/services/identity/identityd/main.go
index c9fbb40..dec6d22 100644
--- a/services/identity/identityd/main.go
+++ b/services/identity/identityd/main.go
@@ -21,7 +21,7 @@
"veyron.io/veyron/veyron2/options"
"veyron.io/veyron/veyron2/rt"
"veyron.io/veyron/veyron2/security"
- "veyron.io/veyron/veyron2/verror"
+ verror "veyron.io/veyron/veyron2/verror2"
"veyron.io/veyron/veyron2/vlog"
"veyron.io/veyron/veyron/lib/signals"
@@ -181,7 +181,7 @@
if invoker := d[suffix]; invoker != nil {
return invoker, allowEveryoneAuthorizer{}, nil
}
- return nil, nil, verror.NoExistf("%q is not a valid suffix at this server", suffix)
+ return nil, nil, verror.Make(verror.NoExist, nil, suffix)
}
// Starts the blessing services and the discharging service on the same port.