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.